@local-civics/mgmt-ui 0.1.256 → 0.1.258
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 +48 -7
- package/dist/index.js +157 -81
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +157 -83
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -60,7 +60,7 @@ function styleInject(css, ref) {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
var css_248z = "@font-face{font-family:ProximaNova;src:url(https://cdn.localcivics.io/fonts/ProximaNova.otf) format(\"opentype\")}@font-face{font-family:ProximaNova;font-weight:700;src:url(https://cdn.localcivics.io/fonts/ProximaNovaBold.otf) format(\"opentype\")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.\\!relative{position:relative!important}.left-3{left:.75rem}.top-1\\/2{top:50%}.left-3\\.5{left:.875rem}.bottom-\\[-20px\\]{bottom:-20px}.left-1\\/2{left:50%}.m-3{margin:.75rem}.mt-0\\.5{margin-top:.125rem}.mt-0{margin-top:0}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1{margin-top:.25rem}.mb-2{margin-bottom:.5rem}.mt-1\\.5{margin-top:.375rem}.-ml-2{margin-left:-.5rem}.mt-4{margin-top:1rem}.mt-3{margin-top:.75rem}.mb-8{margin-bottom:2rem}.mt-2\\.5{margin-top:.625rem}.mb-1{margin-bottom:.25rem}.ml-\\[29px\\]{margin-left:29px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-full{height:100%}.h-9{height:2.25rem}.h-8{height:2rem}.h-7{height:1.75rem}.h-5{height:1.25rem}.h-12{height:3rem}.h-\\[300px\\]{height:300px}.h-screen{height:100vh}.h-14{height:3.5rem}.h-16{height:4rem}.h-28{height:7rem}.h-\\[30px\\]{height:30px}.h-\\[400px\\]{height:400px}.max-h-\\[70vh\\]{max-height:70vh}.w-10{width:2.5rem}.w-full{width:100%}.w-fit{width:-moz-fit-content;width:fit-content}.w-36{width:9rem}.w-28{width:7rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-\\[296px\\]{width:296px}.w-40{width:10rem}.w-24{width:6rem}.w-56{width:14rem}.w-8{width:2rem}.w-7{width:1.75rem}.w-64{width:16rem}.w-5{width:1.25rem}.w-16{width:4rem}.w-12{width:3rem}.w-\\[440px\\]{width:440px}.w-20{width:5rem}.w-\\[250px\\]{width:250px}.w-screen{width:100vw}.w-\\[500px\\]{width:500px}.w-14{width:3.5rem}.w-\\[230px\\]{width:230px}.w-\\[30px\\]{width:30px}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0}.min-w-\\[220px\\]{min-width:220px}.max-w-xs{max-width:20rem}.max-w-xl{max-width:36rem}.max-w-\\[460px\\]{max-width:460px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y:-50%}.-translate-x-1\\/2,.-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\\/2{--tw-translate-x:-50%}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.grid-cols-\\[1\\.5fr_2fr_1fr_0\\.6fr\\]{grid-template-columns:1.5fr 2fr 1fr .6fr}.grid-cols-\\[1\\.2fr_1fr_1\\.8fr_1fr_0\\.8fr_0\\.8fr\\]{grid-template-columns:1.2fr 1fr 1.8fr 1fr .8fr .8fr}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1fr .6fr}.grid-cols-\\[2\\.2fr_1fr\\]{grid-template-columns:2.2fr 1fr}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[18px\\]{gap:18px}.gap-5{gap:1.25rem}.gap-3{gap:.75rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-1\\.5{gap:.375rem}.gap-2\\.5{gap:.625rem}.gap-3\\.5{gap:.875rem}.gap-0\\.5{gap:.125rem}.gap-0{gap:0}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.space-y-1>: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)))}.-space-y-\\[3px\\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(-3px*var(--tw-space-y-reverse));margin-top:calc(-3px*(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-2xl{border-radius:1rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:1.5rem}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-2{border-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-l{border-left-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-sky-blue-400\\/40{border-color:rgba(59,208,242,.4)}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/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-sky-blue-400\\/20{background-color:rgba(59,208,242,.2)}.bg-mint-100{--tw-bg-opacity:1;background-color:rgb(208 251 240/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-gold-100{--tw-bg-opacity:1;background-color:rgb(255 248 214/var(--tw-bg-opacity))}.bg-mint-400\\/20{background-color:rgba(30,226,175,.2)}.bg-transparent{background-color:transparent}.bg-dark-blue-400{--tw-bg-opacity:1;background-color:rgb(35 42 58/var(--tw-bg-opacity))}.bg-slate-50\\/60{background-color:rgba(248,250,252,.6)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-sky-blue-400\\/10{background-color:rgba(59,208,242,.1)}.bg-white\\/90{background-color:hsla(0,0%,100%,.9)}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-gold-400{--tw-bg-opacity:1;background-color:rgb(255 212 77/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-1{padding:.25rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-3{padding:.75rem}.p-3\\.5{padding:.875rem}.p-2\\.5{padding:.625rem}.p-2{padding:.5rem}.px-\\[22px\\]{padding-left:22px;padding-right:22px}.py-\\[18px\\]{padding-bottom:18px;padding-top:18px}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-4{padding-bottom:1rem;padding-top:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pl-9{padding-left:2.25rem}.pr-4{padding-right:1rem}.pl-10{padding-left:2.5rem}.pb-2{padding-bottom:.5rem}.pr-1{padding-right:.25rem}.pl-4{padding-left:1rem}.pt-0\\.5{padding-top:.125rem}.pt-0{padding-top:0}.pb-12{padding-bottom:3rem}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-proxima{font-family:ProximaNova}.text-\\[15\\.5px\\]{font-size:15.5px}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\\[10px\\]{font-size:10px}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[11px\\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-\\[28px\\]{font-size:28px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-\\[11\\.5px\\]{font-size:11.5px}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-black{font-weight:900}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-dark-blue-400{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.line-clamp-2{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;overflow:hidden}*,:after,:before{border-style:solid;border-width:0}button{background-color:transparent;background-image:none;color:inherit;cursor:pointer;font:inherit;margin:0;padding:0;text-transform:none}.placeholder\\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.first\\:ml-0:first-child{margin-left:0}.hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\\:bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.hover\\:bg-sky-blue-400\\/20:hover{background-color:rgba(59,208,242,.2)}.hover\\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\\:bg-mint-400\\/25:hover{background-color:rgba(30,226,175,.25)}.hover\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-sky-blue-400:hover{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.hover\\:text-dark-blue-400:hover{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.hover\\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\\:border-sky-blue-400:focus{--tw-border-opacity:1;border-color:rgb(59 208 242/var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:from-slate-200:disabled{--tw-gradient-from:#e2e8f0;--tw-gradient-to:rgba(226,232,240,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.disabled\\:to-slate-200:disabled{--tw-gradient-to:#e2e8f0}.disabled\\:text-slate-400:disabled{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:opacity-40:disabled{opacity:.4}.disabled\\:shadow-none:disabled{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\\:underline{text-decoration-line:underline}@media (min-width:640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:768px){.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}";
|
|
63
|
+
var css_248z = "@font-face{font-family:ProximaNova;src:url(https://cdn.localcivics.io/fonts/ProximaNova.otf) format(\"opentype\")}@font-face{font-family:ProximaNova;font-weight:700;src:url(https://cdn.localcivics.io/fonts/ProximaNovaBold.otf) format(\"opentype\")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.\\!relative{position:relative!important}.left-3{left:.75rem}.top-1\\/2{top:50%}.left-3\\.5{left:.875rem}.bottom-\\[-20px\\]{bottom:-20px}.left-1\\/2{left:50%}.m-3{margin:.75rem}.mt-0\\.5{margin-top:.125rem}.mt-0{margin-top:0}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1{margin-top:.25rem}.mb-2{margin-bottom:.5rem}.mt-1\\.5{margin-top:.375rem}.-ml-2{margin-left:-.5rem}.mt-4{margin-top:1rem}.mt-3{margin-top:.75rem}.mb-8{margin-bottom:2rem}.mt-2\\.5{margin-top:.625rem}.mb-1{margin-bottom:.25rem}.ml-\\[29px\\]{margin-left:29px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-full{height:100%}.h-3{height:.75rem}.h-8{height:2rem}.h-7{height:1.75rem}.h-5{height:1.25rem}.h-9{height:2.25rem}.h-12{height:3rem}.h-\\[300px\\]{height:300px}.h-screen{height:100vh}.h-14{height:3.5rem}.h-16{height:4rem}.h-28{height:7rem}.h-\\[30px\\]{height:30px}.h-\\[400px\\]{height:400px}.max-h-\\[70vh\\]{max-height:70vh}.w-10{width:2.5rem}.w-full{width:100%}.w-fit{width:-moz-fit-content;width:fit-content}.w-36{width:9rem}.w-8{width:2rem}.w-28{width:7rem}.w-4{width:1rem}.w-\\[296px\\]{width:296px}.w-40{width:10rem}.w-24{width:6rem}.w-56{width:14rem}.w-7{width:1.75rem}.w-64{width:16rem}.w-5{width:1.25rem}.w-16{width:4rem}.w-9{width:2.25rem}.w-12{width:3rem}.w-\\[440px\\]{width:440px}.w-20{width:5rem}.w-\\[250px\\]{width:250px}.w-screen{width:100vw}.w-\\[500px\\]{width:500px}.w-14{width:3.5rem}.w-\\[230px\\]{width:230px}.w-\\[30px\\]{width:30px}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0}.min-w-\\[220px\\]{min-width:220px}.max-w-xs{max-width:20rem}.max-w-xl{max-width:36rem}.max-w-\\[460px\\]{max-width:460px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y:-50%}.-translate-x-1\\/2,.-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\\/2{--tw-translate-x:-50%}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.grid-cols-\\[1\\.5fr_2fr_1fr_0\\.6fr\\]{grid-template-columns:1.5fr 2fr 1fr .6fr}.grid-cols-\\[1\\.2fr_1fr_1\\.8fr_1fr_0\\.8fr_0\\.8fr\\]{grid-template-columns:1.2fr 1fr 1.8fr 1fr .8fr .8fr}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1fr .6fr}.grid-cols-\\[2\\.2fr_1fr\\]{grid-template-columns:2.2fr 1fr}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[18px\\]{gap:18px}.gap-5{gap:1.25rem}.gap-3{gap:.75rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-1\\.5{gap:.375rem}.gap-2\\.5{gap:.625rem}.gap-3\\.5{gap:.875rem}.gap-0\\.5{gap:.125rem}.gap-0{gap:0}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.space-y-1>: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)))}.-space-y-\\[3px\\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(-3px*var(--tw-space-y-reverse));margin-top:calc(-3px*(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-2xl{border-radius:1rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-full{border-radius:9999px}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-3xl{border-radius:1.5rem}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-2{border-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-l{border-left-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-sky-blue-400\\/40{border-color:rgba(59,208,242,.4)}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/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-sky-blue-400\\/20{background-color:rgba(59,208,242,.2)}.bg-mint-100{--tw-bg-opacity:1;background-color:rgb(208 251 240/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-gold-100{--tw-bg-opacity:1;background-color:rgb(255 248 214/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/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-slate-50\\/60{background-color:rgba(248,250,252,.6)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-sky-blue-400\\/10{background-color:rgba(59,208,242,.1)}.bg-white\\/90{background-color:hsla(0,0%,100%,.9)}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-white\\/20{background-color:hsla(0,0%,100%,.2)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-gold-400{--tw-bg-opacity:1;background-color:rgb(255 212 77/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-1{padding:.25rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-3{padding:.75rem}.p-3\\.5{padding:.875rem}.p-2\\.5{padding:.625rem}.p-2{padding:.5rem}.px-\\[22px\\]{padding-left:22px;padding-right:22px}.py-\\[18px\\]{padding-bottom:18px;padding-top:18px}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-4{padding-bottom:1rem;padding-top:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pl-9{padding-left:2.25rem}.pr-4{padding-right:1rem}.pl-10{padding-left:2.5rem}.pb-2{padding-bottom:.5rem}.pr-1{padding-right:.25rem}.pl-4{padding-left:1rem}.pt-0\\.5{padding-top:.125rem}.pt-0{padding-top:0}.pb-12{padding-bottom:3rem}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-proxima{font-family:ProximaNova}.text-\\[15\\.5px\\]{font-size:15.5px}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\\[10px\\]{font-size:10px}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[11px\\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-\\[28px\\]{font-size:28px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-\\[11\\.5px\\]{font-size:11.5px}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-black{font-weight:900}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-dark-blue-400{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.line-clamp-2{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;overflow:hidden}*,:after,:before{border-style:solid;border-width:0}button{background-color:transparent;background-image:none;color:inherit;cursor:pointer;font:inherit;margin:0;padding:0;text-transform:none}.placeholder\\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.first\\:ml-0:first-child{margin-left:0}.hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\\:bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.hover\\:bg-sky-blue-400\\/20:hover{background-color:rgba(59,208,242,.2)}.hover\\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\\:bg-mint-400\\/25:hover{background-color:rgba(30,226,175,.25)}.hover\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-sky-blue-400:hover{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.hover\\:text-dark-blue-400:hover{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.hover\\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\\:border-sky-blue-400:focus{--tw-border-opacity:1;border-color:rgb(59 208 242/var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:from-slate-200:disabled{--tw-gradient-from:#e2e8f0;--tw-gradient-to:rgba(226,232,240,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.disabled\\:to-slate-200:disabled{--tw-gradient-to:#e2e8f0}.disabled\\:text-slate-400:disabled{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:opacity-40:disabled{opacity:.4}.disabled\\:shadow-none:disabled{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\\:underline{text-decoration-line:underline}@media (min-width:640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:768px){.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}";
|
|
64
64
|
styleInject(css_248z);
|
|
65
65
|
|
|
66
66
|
function UserButton({ image, name, email }) {
|
|
@@ -369,11 +369,37 @@ const StatsGroup = ({ data, footer }) => {
|
|
|
369
369
|
return stat.value;
|
|
370
370
|
})();
|
|
371
371
|
const safeValue = Number.isFinite(value) ? value : 0;
|
|
372
|
-
return /* @__PURE__ */ React__namespace.createElement("div", { key: stat.title }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-3xl font-black text-white" }, safeValue.toLocaleString(), stat.unit), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-1.5 text-[11px] font-bold uppercase tracking-wide text-white/70" }, stat.title));
|
|
372
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { key: stat.title }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-3xl font-black text-white" }, stat.loading ? /* @__PURE__ */ React__namespace.createElement("span", { className: "inline-block h-8 w-14 animate-pulse rounded bg-white/20 align-middle" }, /* @__PURE__ */ React__namespace.createElement("span", { className: "sr-only" }, "Loading")) : /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, safeValue.toLocaleString(), stat.unit)), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-1.5 text-[11px] font-bold uppercase tracking-wide text-white/70" }, stat.title));
|
|
373
373
|
});
|
|
374
374
|
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-wrap gap-x-10 gap-y-4 rounded-2xl bg-gradient-to-br from-dark-blue-600 via-dark-blue-400 to-sky-blue-400 px-8 py-6" }, stats, footer);
|
|
375
375
|
};
|
|
376
376
|
|
|
377
|
+
const STATUS_FILTERS = [
|
|
378
|
+
{ value: "all", label: "All" },
|
|
379
|
+
{ value: "submitted", label: "Submitted" },
|
|
380
|
+
{ value: "active", label: "Active" },
|
|
381
|
+
{ value: "inactive", label: "Inactive" }
|
|
382
|
+
];
|
|
383
|
+
const matchesStudentStatus = (student, filter) => filter === "all" ? true : filter === "submitted" ? !!student.isComplete : filter === "active" ? !student.isComplete && !!student.isStarted : !student.isComplete && !student.isStarted;
|
|
384
|
+
const StudentStatusFilterBar = (props) => /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-wrap items-center gap-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, STATUS_FILTERS.map((f) => /* @__PURE__ */ React__namespace.createElement(
|
|
385
|
+
"button",
|
|
386
|
+
{
|
|
387
|
+
key: f.value,
|
|
388
|
+
onClick: () => props.onStatusFilterChange && props.onStatusFilterChange(f.value),
|
|
389
|
+
className: `rounded-lg px-3.5 py-2 text-xs font-bold ${props.statusFilter === f.value ? "bg-sky-blue-400/20 text-dark-blue-400" : "text-slate-400 hover:text-slate-600"}`
|
|
390
|
+
},
|
|
391
|
+
f.label
|
|
392
|
+
))), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex min-w-[220px] flex-1 items-center gap-2.5 rounded-xl border border-slate-200 bg-white px-4 py-2.5 shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(icons.IconSearch, { size: 15, stroke: 1.75, className: "text-slate-400" }), /* @__PURE__ */ React__namespace.createElement(
|
|
393
|
+
"input",
|
|
394
|
+
{
|
|
395
|
+
type: "text",
|
|
396
|
+
value: props.search,
|
|
397
|
+
placeholder: "Search by student name",
|
|
398
|
+
onChange: (e) => props.onSearchChange(e.target.value),
|
|
399
|
+
className: "w-full flex-1 border-none bg-transparent text-sm text-dark-blue-400 outline-none placeholder:text-slate-400"
|
|
400
|
+
}
|
|
401
|
+
)));
|
|
402
|
+
|
|
377
403
|
const NavLink = (props) => /* @__PURE__ */ React__namespace.createElement("div", { onClick: props.onClick, 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 }), props.label);
|
|
378
404
|
const PageHeader = (props) => {
|
|
379
405
|
var _a, _b;
|
|
@@ -483,6 +509,28 @@ function SortableHeader(props) {
|
|
|
483
509
|
);
|
|
484
510
|
}
|
|
485
511
|
|
|
512
|
+
const StudentNameCell = (props) => {
|
|
513
|
+
var _a, _b;
|
|
514
|
+
const initials = (((_a = props.name) == null ? void 0 : _a[0]) || ((_b = props.email) == null ? void 0 : _b[0]) || "?").toUpperCase();
|
|
515
|
+
const avatar = props.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { src: props.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-mint-400/20 text-xs font-bold text-dark-blue-400" }, initials);
|
|
516
|
+
if (props.onStudentClick) {
|
|
517
|
+
return /* @__PURE__ */ React__namespace.createElement(
|
|
518
|
+
"button",
|
|
519
|
+
{
|
|
520
|
+
type: "button",
|
|
521
|
+
onClick: (e) => {
|
|
522
|
+
e.stopPropagation();
|
|
523
|
+
props.onStudentClick(props.userId);
|
|
524
|
+
},
|
|
525
|
+
className: "group flex min-w-0 flex-1 items-center gap-3 text-left"
|
|
526
|
+
},
|
|
527
|
+
avatar,
|
|
528
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-sm font-bold text-sky-blue-400 group-hover:underline" }, props.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-xs text-slate-400" }, props.email))
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, avatar, /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, props.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-xs text-slate-400" }, props.email)));
|
|
532
|
+
};
|
|
533
|
+
|
|
486
534
|
function Stack$4(props) {
|
|
487
535
|
if (props.items.length === 0) {
|
|
488
536
|
return null;
|
|
@@ -551,7 +599,7 @@ function Table$d(props) {
|
|
|
551
599
|
const [expanded, setExpanded] = React__namespace.useState({});
|
|
552
600
|
const preparedItems = React__namespace.useMemo(() => {
|
|
553
601
|
return props.items.map((item) => __spreadProps$e(__spreadValues$h({}, item), {
|
|
554
|
-
status: item.isComplete ? 1 : 0
|
|
602
|
+
status: item.isComplete ? 2 : item.isStarted ? 1 : 0
|
|
555
603
|
}));
|
|
556
604
|
}, [props.items]);
|
|
557
605
|
const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
|
|
@@ -567,17 +615,15 @@ function Table$d(props) {
|
|
|
567
615
|
);
|
|
568
616
|
}
|
|
569
617
|
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-4 px-4" }, /* @__PURE__ */ React__namespace.createElement(SortableHeader, { label: "Student Name", sortKey: "name", sortConfig, onSort: requestSort, className: "flex-1" }), /* @__PURE__ */ React__namespace.createElement(SortableHeader, { label: "Status", sortKey: "status", sortConfig, onSort: requestSort, align: "center", className: "w-28 shrink-0" }), /* @__PURE__ */ React__namespace.createElement("div", { className: "w-4 shrink-0" })), sortedItems.map((row) => {
|
|
570
|
-
var _a;
|
|
571
618
|
const isOpen = !!expanded[row.userId];
|
|
572
|
-
const initials = (((_a = row.name) == null ? void 0 : _a[0]) || row.email[0] || "?").toUpperCase();
|
|
573
619
|
return /* @__PURE__ */ React__namespace.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(
|
|
574
620
|
"div",
|
|
575
621
|
{
|
|
576
622
|
onClick: () => setExpanded(__spreadProps$e(__spreadValues$h({}, expanded), { [row.userId]: !isOpen })),
|
|
577
623
|
className: "flex cursor-pointer items-center gap-4 p-4"
|
|
578
624
|
},
|
|
579
|
-
/* @__PURE__ */ React__namespace.createElement(
|
|
580
|
-
/* @__PURE__ */ React__namespace.createElement("div", { className: "w-28 shrink-0 text-center" }, row.isComplete
|
|
625
|
+
/* @__PURE__ */ React__namespace.createElement(StudentNameCell, { userId: row.userId, name: row.name, email: row.email, avatar: row.avatar, onStudentClick: props.onStudentClick }),
|
|
626
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "w-28 shrink-0 text-center" }, row.isComplete && /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-mint-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, "Complete"), !row.isComplete && row.isStarted === void 0 && /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500" }, "Incomplete"), !row.isComplete && row.isStarted === false && /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500" }, "Not started"), !row.isComplete && row.isStarted === true && /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-gold-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, "In progress")),
|
|
581
627
|
/* @__PURE__ */ React__namespace.createElement(icons.IconChevronDown, { size: 15, stroke: 2.3, className: `shrink-0 text-slate-400 transition-transform ${isOpen ? "rotate-180" : ""}` })
|
|
582
628
|
), isOpen && /* @__PURE__ */ React__namespace.createElement("div", { className: "border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React__namespace.createElement(Stack$4, { items: row.lessons, state: props.linkState })));
|
|
583
629
|
}));
|
|
@@ -604,7 +650,7 @@ function Table$c(props) {
|
|
|
604
650
|
className: "flex items-center gap-4 rounded-xl border border-slate-200 bg-white p-4 no-underline shadow-sm hover:bg-slate-50"
|
|
605
651
|
},
|
|
606
652
|
/* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0 flex-1 text-sm font-bold text-dark-blue-400" }, row.lessonName),
|
|
607
|
-
/* @__PURE__ */ React__namespace.createElement("div", { className: "w-36 shrink-0 text-right text-xs text-slate-500" }, Math.round((row.percentageCompletion + Number.EPSILON) * 100)
|
|
653
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "w-36 shrink-0 text-right text-xs text-slate-500" }, props.completionLoading ? /* @__PURE__ */ React__namespace.createElement("span", { className: "inline-block h-3 w-8 animate-pulse rounded bg-slate-200 align-middle" }, /* @__PURE__ */ React__namespace.createElement("span", { className: "sr-only" }, "Loading")) : `${Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%`)
|
|
608
654
|
)));
|
|
609
655
|
}
|
|
610
656
|
|
|
@@ -614,8 +660,15 @@ const TABS$4 = [
|
|
|
614
660
|
];
|
|
615
661
|
const Badge = (props) => {
|
|
616
662
|
const [tab, setTab] = React.useState("lessons");
|
|
663
|
+
const [search, setSearch] = React.useState("");
|
|
664
|
+
const statusFilter = props.statusFilter || "all";
|
|
665
|
+
const activityLoading = !!props.activityLoading;
|
|
617
666
|
const numberOfStudents = props.students.length;
|
|
618
667
|
const numberOfBadges = numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length : 0;
|
|
668
|
+
const searchLower = search.trim().toLowerCase();
|
|
669
|
+
const visibleStudents = props.students.filter(
|
|
670
|
+
(s) => matchesStudentStatus(s, statusFilter) && (!searchLower || (s.name || "").toLowerCase().includes(searchLower))
|
|
671
|
+
);
|
|
619
672
|
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement(
|
|
620
673
|
PageHeader,
|
|
621
674
|
{
|
|
@@ -641,7 +694,8 @@ const Badge = (props) => {
|
|
|
641
694
|
), /* @__PURE__ */ React__namespace.createElement(StatsGroup, { data: [
|
|
642
695
|
{
|
|
643
696
|
title: props.trial ? "LESSONS SUBMITTED" : "BADGE COMPLETION",
|
|
644
|
-
value: props.trial ? props.lessonsCompleted || 0 : numberOfBadges
|
|
697
|
+
value: props.trial ? props.lessonsCompleted || 0 : numberOfBadges,
|
|
698
|
+
loading: activityLoading
|
|
645
699
|
},
|
|
646
700
|
{
|
|
647
701
|
title: "POINT VALUE",
|
|
@@ -664,7 +718,15 @@ const Badge = (props) => {
|
|
|
664
718
|
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"}`
|
|
665
719
|
},
|
|
666
720
|
t.label
|
|
667
|
-
))), (!!props.trial || tab === "lessons") && /* @__PURE__ */ React__namespace.createElement(Table$c, { loading: props.loading, items: props.lessons }), !props.trial && tab === "students" && /* @__PURE__ */ React__namespace.createElement(
|
|
721
|
+
))), (!!props.trial || tab === "lessons") && /* @__PURE__ */ React__namespace.createElement(Table$c, { loading: props.loading, completionLoading: activityLoading, items: props.lessons }), !props.trial && tab === "students" && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement(
|
|
722
|
+
StudentStatusFilterBar,
|
|
723
|
+
{
|
|
724
|
+
statusFilter,
|
|
725
|
+
onStatusFilterChange: props.onStatusFilterChange,
|
|
726
|
+
search,
|
|
727
|
+
onSearchChange: setSearch
|
|
728
|
+
}
|
|
729
|
+
), props.students.length > 0 && visibleStudents.length === 0 ? /* @__PURE__ */ React__namespace.createElement("p", { className: "px-4 text-sm text-slate-400" }, "No students match this filter.") : /* @__PURE__ */ React__namespace.createElement(Table$d, { loading: props.loading || activityLoading, items: visibleStudents, linkState: props.linkState, onStudentClick: props.onStudentClick }))));
|
|
668
730
|
};
|
|
669
731
|
|
|
670
732
|
function Table$b(props) {
|
|
@@ -1162,6 +1224,41 @@ function Table$8(props) {
|
|
|
1162
1224
|
))));
|
|
1163
1225
|
}
|
|
1164
1226
|
|
|
1227
|
+
const isUrl = (value) => /^https?:\/\/\S+$/i.test(value.trim());
|
|
1228
|
+
const isUpload = (value) => /\/\/cdn\.localcivics\.io\/v1\/store\//i.test(value);
|
|
1229
|
+
const hostOf = (value) => {
|
|
1230
|
+
try {
|
|
1231
|
+
return new URL(value).hostname.replace(/^www\./, "");
|
|
1232
|
+
} catch (e) {
|
|
1233
|
+
return value;
|
|
1234
|
+
}
|
|
1235
|
+
};
|
|
1236
|
+
function AnswerValue(props) {
|
|
1237
|
+
const values = (props.answer || []).filter((v) => typeof v === "string" && v.trim() !== "");
|
|
1238
|
+
const text = values.filter((v) => !isUrl(v));
|
|
1239
|
+
const links = values.filter(isUrl);
|
|
1240
|
+
if (values.length === 0) {
|
|
1241
|
+
return props.emptyText ? /* @__PURE__ */ React__namespace.createElement("div", { className: props.className }, props.emptyText) : null;
|
|
1242
|
+
}
|
|
1243
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: `flex flex-col gap-2 ${props.className || ""}` }, text.length > 0 && /* @__PURE__ */ React__namespace.createElement("div", null, text.join(", ")), links.length > 0 && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-wrap gap-2" }, links.map((link) => {
|
|
1244
|
+
const upload = isUpload(link);
|
|
1245
|
+
return /* @__PURE__ */ React__namespace.createElement(
|
|
1246
|
+
"a",
|
|
1247
|
+
{
|
|
1248
|
+
key: link,
|
|
1249
|
+
href: link,
|
|
1250
|
+
download: upload || void 0,
|
|
1251
|
+
target: "_blank",
|
|
1252
|
+
rel: "noopener noreferrer",
|
|
1253
|
+
title: link,
|
|
1254
|
+
className: "flex w-fit 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"
|
|
1255
|
+
},
|
|
1256
|
+
upload ? /* @__PURE__ */ React__namespace.createElement(icons.IconDownload, { size: 12, stroke: 2 }) : /* @__PURE__ */ React__namespace.createElement(icons.IconExternalLink, { size: 12, stroke: 2 }),
|
|
1257
|
+
upload ? "Download" : `Open link (${hostOf(link)})`
|
|
1258
|
+
);
|
|
1259
|
+
})));
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1165
1262
|
function Table$7(props) {
|
|
1166
1263
|
const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);
|
|
1167
1264
|
if (props.items.length === 0) {
|
|
@@ -1184,7 +1281,7 @@ function Table$7(props) {
|
|
|
1184
1281
|
className: `px-5 py-4 ${i < row.questions.length - 1 || row.reflection ? "border-b border-slate-100" : ""}`
|
|
1185
1282
|
},
|
|
1186
1283
|
/* @__PURE__ */ React__namespace.createElement("div", { className: "text-xs font-semibold text-slate-500" }, q.questionName),
|
|
1187
|
-
/* @__PURE__ */ React__namespace.createElement(
|
|
1284
|
+
/* @__PURE__ */ React__namespace.createElement(AnswerValue, { answer: q.answer, className: "mt-1 text-xs text-slate-600" })
|
|
1188
1285
|
)), row.reflection && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-start justify-between gap-4 px-5 py-4" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-xs font-semibold text-slate-500" }, "Reflection"), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-1 text-xs text-slate-600" }, row.reflection)), !!row.rating && /* @__PURE__ */ React__namespace.createElement("div", { className: "shrink-0 rounded-full bg-gold-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, row.rating.toLocaleString()))));
|
|
1189
1286
|
})));
|
|
1190
1287
|
}
|
|
@@ -1433,7 +1530,7 @@ const SplitButton$3 = (props) => {
|
|
|
1433
1530
|
function Stack$3(props) {
|
|
1434
1531
|
const hasAnswers = props.items.length > 0;
|
|
1435
1532
|
const hasReflection = !!props.reflection;
|
|
1436
|
-
return /* @__PURE__ */ React__namespace.createElement(
|
|
1533
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-4" }, hasAnswers ? props.items.map((row) => /* @__PURE__ */ React__namespace.createElement("div", { key: row.questionName }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-sm font-bold text-dark-blue-400" }, row.questionName), /* @__PURE__ */ React__namespace.createElement(AnswerValue, { answer: row.answer, emptyText: "No answer.", className: "mt-1 text-sm text-slate-600" }))) : !hasReflection ? /* @__PURE__ */ React__namespace.createElement("div", { className: "text-sm font-bold text-dark-blue-400" }, "No question responses recorded yet.") : null, hasReflection && /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center justify-between gap-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-sm font-bold text-dark-blue-400" }, "Reflection"), !!props.rating && /* @__PURE__ */ React__namespace.createElement("div", { className: "shrink-0 rounded-full bg-gold-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, props.rating)), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-1 text-sm text-slate-600" }, props.reflection)), /* @__PURE__ */ React__namespace.createElement(reactRouterDom.Link, { to: props.href, state: props.state, className: "w-fit text-xs font-bold text-dark-blue-400 no-underline hover:underline" }, "View full response \u2192"));
|
|
1437
1534
|
}
|
|
1438
1535
|
|
|
1439
1536
|
var __defProp$d = Object.defineProperty;
|
|
@@ -1475,16 +1572,14 @@ function Table$6(props) {
|
|
|
1475
1572
|
);
|
|
1476
1573
|
}
|
|
1477
1574
|
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-4 px-4" }, /* @__PURE__ */ React__namespace.createElement(SortableHeader, { label: "Student Name", sortKey: "name", sortConfig, onSort: requestSort, className: "flex-1" }), /* @__PURE__ */ React__namespace.createElement(SortableHeader, { label: "Status", sortKey: "status", sortConfig, onSort: requestSort, align: "center", className: "w-28 shrink-0" }), /* @__PURE__ */ React__namespace.createElement("div", { className: "w-4 shrink-0" })), sortedItems.map((row) => {
|
|
1478
|
-
var _a;
|
|
1479
1575
|
const isOpen = !!expanded[row.userId];
|
|
1480
|
-
const initials = (((_a = row.name) == null ? void 0 : _a[0]) || row.email[0] || "?").toUpperCase();
|
|
1481
1576
|
return /* @__PURE__ */ React__namespace.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(
|
|
1482
1577
|
"div",
|
|
1483
1578
|
{
|
|
1484
1579
|
onClick: () => setExpanded(__spreadProps$b(__spreadValues$d({}, expanded), { [row.userId]: !isOpen })),
|
|
1485
1580
|
className: "flex cursor-pointer items-center gap-4 p-4"
|
|
1486
1581
|
},
|
|
1487
|
-
/* @__PURE__ */ React__namespace.createElement(
|
|
1582
|
+
/* @__PURE__ */ React__namespace.createElement(StudentNameCell, { userId: row.userId, name: row.name, email: row.email, avatar: row.avatar, onStudentClick: props.onStudentClick }),
|
|
1488
1583
|
/* @__PURE__ */ React__namespace.createElement("div", { className: "w-28 shrink-0 text-center" }, row.isComplete && /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-mint-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, "Complete"), !row.isComplete && !row.isStarted && /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500" }, "Not started"), !row.isComplete && !!row.isStarted && /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-gold-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, "In progress")),
|
|
1489
1584
|
/* @__PURE__ */ React__namespace.createElement(icons.IconChevronDown, { size: 15, stroke: 2.3, className: `shrink-0 text-slate-400 transition-transform ${isOpen ? "rotate-180" : ""}` })
|
|
1490
1585
|
), isOpen && /* @__PURE__ */ React__namespace.createElement("div", { className: "border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React__namespace.createElement(Stack$3, { href: row.href, items: row.answers, reflection: row.reflection, rating: row.rating, state: props.linkState })));
|
|
@@ -1553,12 +1648,6 @@ function Stack$2(props) {
|
|
|
1553
1648
|
}
|
|
1554
1649
|
const truncateWithEllipses = (text, max) => text.substr(0, max - 1) + (text.length > max ? "…" : "");
|
|
1555
1650
|
|
|
1556
|
-
const STATUS_FILTERS = [
|
|
1557
|
-
{ value: "all", label: "All" },
|
|
1558
|
-
{ value: "submitted", label: "Submitted" },
|
|
1559
|
-
{ value: "active", label: "Active" },
|
|
1560
|
-
{ value: "inactive", label: "Inactive" }
|
|
1561
|
-
];
|
|
1562
1651
|
const initialsFor = (name) => name.split(/[ -]/).map((n) => n.charAt(0)).join("").toUpperCase();
|
|
1563
1652
|
const Lesson = (props) => {
|
|
1564
1653
|
const [tab, setTab] = React.useState("question");
|
|
@@ -1570,11 +1659,10 @@ const Lesson = (props) => {
|
|
|
1570
1659
|
const visibleContributors = contributors.slice(0, 5);
|
|
1571
1660
|
const remainingContributors = contributors.slice(5).length;
|
|
1572
1661
|
const searchLower = search.trim().toLowerCase();
|
|
1573
|
-
const visibleStudents = props.students.filter(
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
});
|
|
1662
|
+
const visibleStudents = props.students.filter(
|
|
1663
|
+
(s) => matchesStudentStatus(s, statusFilter) && (!searchLower || (s.name || "").toLowerCase().includes(searchLower))
|
|
1664
|
+
);
|
|
1665
|
+
const activityLoading = !!props.activityLoading;
|
|
1578
1666
|
const tabs = [
|
|
1579
1667
|
{ label: "By question", value: "question" },
|
|
1580
1668
|
{ label: "By student", value: "students" }
|
|
@@ -1600,7 +1688,8 @@ const Lesson = (props) => {
|
|
|
1600
1688
|
), /* @__PURE__ */ React__namespace.createElement(StatsGroup, { data: [
|
|
1601
1689
|
{
|
|
1602
1690
|
title: props.trial ? "# OF SUBMISSIONS" : "LESSON COMPLETION",
|
|
1603
|
-
value: props.trial ? props.lessonsCompleted || 0 : numberOfLessons
|
|
1691
|
+
value: props.trial ? props.lessonsCompleted || 0 : numberOfLessons,
|
|
1692
|
+
loading: activityLoading
|
|
1604
1693
|
}
|
|
1605
1694
|
] }), contributors.length > 0 && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex" }, visibleContributors.map((u, i) => /* @__PURE__ */ React__namespace.createElement(
|
|
1606
1695
|
"div",
|
|
@@ -1626,24 +1715,15 @@ const Lesson = (props) => {
|
|
|
1626
1715
|
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"}`
|
|
1627
1716
|
},
|
|
1628
1717
|
t.label
|
|
1629
|
-
))), tab === "question" && /* @__PURE__ */ React__namespace.createElement(Stack$2, { loading: props.loading, items: props.questions }), tab === "students" && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement(
|
|
1630
|
-
|
|
1631
|
-
{
|
|
1632
|
-
key: f.value,
|
|
1633
|
-
onClick: () => props.onStatusFilterChange && props.onStatusFilterChange(f.value),
|
|
1634
|
-
className: `rounded-lg px-3.5 py-2 text-xs font-bold ${statusFilter === f.value ? "bg-sky-blue-400/20 text-dark-blue-400" : "text-slate-400 hover:text-slate-600"}`
|
|
1635
|
-
},
|
|
1636
|
-
f.label
|
|
1637
|
-
))), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex min-w-[220px] flex-1 items-center gap-2.5 rounded-xl border border-slate-200 bg-white px-4 py-2.5 shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(icons.IconSearch, { size: 15, stroke: 1.75, className: "text-slate-400" }), /* @__PURE__ */ React__namespace.createElement(
|
|
1638
|
-
"input",
|
|
1718
|
+
))), tab === "question" && /* @__PURE__ */ React__namespace.createElement(Stack$2, { loading: props.loading || activityLoading, items: props.questions }), tab === "students" && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement(
|
|
1719
|
+
StudentStatusFilterBar,
|
|
1639
1720
|
{
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
className: "w-full flex-1 border-none bg-transparent text-sm text-dark-blue-400 outline-none placeholder:text-slate-400"
|
|
1721
|
+
statusFilter,
|
|
1722
|
+
onStatusFilterChange: props.onStatusFilterChange,
|
|
1723
|
+
search,
|
|
1724
|
+
onSearchChange: setSearch
|
|
1645
1725
|
}
|
|
1646
|
-
)
|
|
1726
|
+
), props.students.length > 0 && visibleStudents.length === 0 ? /* @__PURE__ */ React__namespace.createElement("p", { className: "px-4 text-sm text-slate-400" }, "No students match this filter.") : /* @__PURE__ */ React__namespace.createElement(Table$6, { loading: props.loading || activityLoading, items: visibleStudents, linkState: props.linkState, onStudentClick: props.onStudentClick }))));
|
|
1647
1727
|
};
|
|
1648
1728
|
|
|
1649
1729
|
function Table$5(props) {
|
|
@@ -1681,10 +1761,11 @@ const Lessons = (props) => {
|
|
|
1681
1761
|
};
|
|
1682
1762
|
|
|
1683
1763
|
function AccessCode(props) {
|
|
1764
|
+
var _a;
|
|
1684
1765
|
return /* @__PURE__ */ React__namespace.createElement("div", { className: "max-w-[460px]" }, /* @__PURE__ */ React__namespace.createElement("h2", { className: "text-lg font-extrabold text-dark-blue-400" }, "Access code"), /* @__PURE__ */ React__namespace.createElement("p", { className: "text-sm text-slate-500" }, "Grant access to join your organization"), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-4 rounded-xl border border-slate-200 bg-white p-6 shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(
|
|
1685
1766
|
"input",
|
|
1686
1767
|
{
|
|
1687
|
-
value: props.value,
|
|
1768
|
+
value: (_a = props.value) != null ? _a : "",
|
|
1688
1769
|
readOnly: true,
|
|
1689
1770
|
className: "w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-dark-blue-400"
|
|
1690
1771
|
}
|
|
@@ -1699,20 +1780,6 @@ function AccessCode(props) {
|
|
|
1699
1780
|
))));
|
|
1700
1781
|
}
|
|
1701
1782
|
|
|
1702
|
-
const monthNames = [
|
|
1703
|
-
"January",
|
|
1704
|
-
"February",
|
|
1705
|
-
"March",
|
|
1706
|
-
"April",
|
|
1707
|
-
"May",
|
|
1708
|
-
"June",
|
|
1709
|
-
"July",
|
|
1710
|
-
"August",
|
|
1711
|
-
"September",
|
|
1712
|
-
"October",
|
|
1713
|
-
"November",
|
|
1714
|
-
"December"
|
|
1715
|
-
];
|
|
1716
1783
|
const Organization = (props) => {
|
|
1717
1784
|
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement(
|
|
1718
1785
|
PageHeader,
|
|
@@ -1731,7 +1798,7 @@ const Organization = (props) => {
|
|
|
1731
1798
|
value: props.numberOfEducators || 0
|
|
1732
1799
|
},
|
|
1733
1800
|
{
|
|
1734
|
-
title:
|
|
1801
|
+
title: "ACTIVE USERS (30 DAYS)",
|
|
1735
1802
|
value: props.percentageOfAccountsActive,
|
|
1736
1803
|
unit: "%"
|
|
1737
1804
|
}
|
|
@@ -2941,32 +3008,18 @@ function Table$2(props) {
|
|
|
2941
3008
|
);
|
|
2942
3009
|
}
|
|
2943
3010
|
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-4 px-4" }, /* @__PURE__ */ React__namespace.createElement(SortableHeader, { label: "Student Name", sortKey: "name", sortConfig, onSort: requestSort, className: "flex-1" }), /* @__PURE__ */ React__namespace.createElement(SortableHeader, { label: "Status", sortKey: "isComplete", sortConfig, onSort: requestSort, align: "center", className: "w-28 shrink-0" }), categories.map((category) => /* @__PURE__ */ React__namespace.createElement(SortableHeader, { key: category.categoryId, label: category.name, sortKey: category.categoryId, sortConfig, onSort: requestSort, align: "center", className: "w-24 shrink-0" })), /* @__PURE__ */ React__namespace.createElement("div", { className: "w-4 shrink-0" })), sortedItems.map((row) => {
|
|
2944
|
-
var _a;
|
|
2945
3011
|
const isOpen = !!expanded[row.userId];
|
|
2946
|
-
const initials = (((_a = row.name) == null ? void 0 : _a[0]) || row.email[0] || "?").toUpperCase();
|
|
2947
3012
|
return /* @__PURE__ */ React__namespace.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(
|
|
2948
3013
|
"div",
|
|
2949
3014
|
{
|
|
2950
3015
|
onClick: () => setExpanded(__spreadProps$5(__spreadValues$5({}, expanded), { [row.userId]: !isOpen })),
|
|
2951
3016
|
className: "flex cursor-pointer items-center gap-4 p-4"
|
|
2952
3017
|
},
|
|
2953
|
-
|
|
2954
|
-
"button",
|
|
2955
|
-
{
|
|
2956
|
-
type: "button",
|
|
2957
|
-
onClick: (e) => {
|
|
2958
|
-
e.stopPropagation();
|
|
2959
|
-
props.onStudentClick(row.userId);
|
|
2960
|
-
},
|
|
2961
|
-
className: "group flex min-w-0 flex-1 items-center gap-3 text-left"
|
|
2962
|
-
},
|
|
2963
|
-
row.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-mint-400/20 text-xs font-bold text-dark-blue-400" }, initials),
|
|
2964
|
-
/* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-sm font-bold text-sky-blue-400 group-hover:underline" }, row.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))
|
|
2965
|
-
) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-mint-400/20 text-xs font-bold text-dark-blue-400" }, initials), /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
|
|
3018
|
+
/* @__PURE__ */ React__namespace.createElement(StudentNameCell, { userId: row.userId, name: row.name, email: row.email, avatar: row.avatar, onStudentClick: props.onStudentClick }),
|
|
2966
3019
|
/* @__PURE__ */ React__namespace.createElement("div", { className: "w-28 shrink-0 text-center" }, row.isComplete ? /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-mint-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, "Complete") : /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500" }, "Incomplete")),
|
|
2967
3020
|
categories.map((category) => {
|
|
2968
|
-
var
|
|
2969
|
-
return /* @__PURE__ */ React__namespace.createElement("div", { key: category.categoryId, className: "w-24 shrink-0 text-center" }, /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-sky-blue-400/15 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, (
|
|
3021
|
+
var _a;
|
|
3022
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { key: category.categoryId, className: "w-24 shrink-0 text-center" }, /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-sky-blue-400/15 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, (_a = row[category.categoryId]) != null ? _a : 0, " pts"));
|
|
2970
3023
|
}),
|
|
2971
3024
|
/* @__PURE__ */ React__namespace.createElement(icons.IconChevronDown, { size: 15, stroke: 2.3, className: `shrink-0 text-slate-400 transition-transform ${isOpen ? "rotate-180" : ""}` })
|
|
2972
3025
|
), isOpen && /* @__PURE__ */ React__namespace.createElement("div", { className: "border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React__namespace.createElement(Stack$1, { items: row.badges, state: props.linkState })));
|
|
@@ -3020,7 +3073,7 @@ function Table$1(props) {
|
|
|
3020
3073
|
},
|
|
3021
3074
|
/* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0 flex-1 text-sm font-bold text-dark-blue-400" }, row.badgeName),
|
|
3022
3075
|
/* @__PURE__ */ React__namespace.createElement("div", { className: "w-24 shrink-0 text-right text-xs font-black text-mint-400" }, row.weight, " pts"),
|
|
3023
|
-
/* @__PURE__ */ React__namespace.createElement("div", { className: "w-36 shrink-0 text-right text-xs text-slate-500" }, Math.round((row.percentageCompletion + Number.EPSILON) * 100)
|
|
3076
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "w-36 shrink-0 text-right text-xs text-slate-500" }, props.completionLoading ? /* @__PURE__ */ React__namespace.createElement("span", { className: "inline-block h-3 w-8 animate-pulse rounded bg-slate-200 align-middle" }, /* @__PURE__ */ React__namespace.createElement("span", { className: "sr-only" }, "Loading")) : `${Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%`)
|
|
3024
3077
|
))));
|
|
3025
3078
|
}
|
|
3026
3079
|
const CategoryPill = (props) => /* @__PURE__ */ React__namespace.createElement(
|
|
@@ -3183,7 +3236,8 @@ const Pathway = (props) => {
|
|
|
3183
3236
|
), /* @__PURE__ */ React__namespace.createElement(StatsGroup, { data: [
|
|
3184
3237
|
{
|
|
3185
3238
|
title: props.trial ? "BADGES SUBMITTED" : "PATHWAY COMPLETION",
|
|
3186
|
-
value: props.trial ? 0 : numberOfBadgesEarned
|
|
3239
|
+
value: props.trial ? 0 : numberOfBadgesEarned,
|
|
3240
|
+
loading: !props.trial && !!props.activityLoading
|
|
3187
3241
|
}
|
|
3188
3242
|
] }), !props.trial && /* @__PURE__ */ React__namespace.createElement("div", { className: "relative w-full max-w-xs" }, /* @__PURE__ */ React__namespace.createElement(icons.IconCategory2, { size: 16, stroke: 2, className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-slate-400" }), /* @__PURE__ */ React__namespace.createElement(
|
|
3189
3243
|
"select",
|
|
@@ -3202,7 +3256,7 @@ const Pathway = (props) => {
|
|
|
3202
3256
|
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"}`
|
|
3203
3257
|
},
|
|
3204
3258
|
t.label
|
|
3205
|
-
))), (!!props.trial || tab === "badges") && /* @__PURE__ */ React__namespace.createElement(Table$1, { loading: props.loading, badges: props.badges, categories: badgeGroupCategories, activeCategoryId: selectedCategoryId, activeCategoryLabel: selectedCategoryName }), !props.trial && tab === "students" && /* @__PURE__ */ React__namespace.createElement(Table$2, { loading: props.loading, items: props.students, categories: props.categories, linkState: props.linkState, onStudentClick: props.onStudentClick })), /* @__PURE__ */ React__namespace.createElement(
|
|
3259
|
+
))), (!!props.trial || tab === "badges") && /* @__PURE__ */ React__namespace.createElement(Table$1, { loading: props.loading, completionLoading: props.activityLoading, badges: props.badges, categories: badgeGroupCategories, activeCategoryId: selectedCategoryId, activeCategoryLabel: selectedCategoryName }), !props.trial && tab === "students" && /* @__PURE__ */ React__namespace.createElement(Table$2, { loading: props.loading || !!props.activityLoading, items: props.students, categories: props.categories, linkState: props.linkState, onStudentClick: props.onStudentClick })), /* @__PURE__ */ React__namespace.createElement(
|
|
3206
3260
|
CategoriesModal,
|
|
3207
3261
|
{
|
|
3208
3262
|
opened: categoriesOpen,
|
|
@@ -4150,13 +4204,33 @@ var __spreadValues = (a, b) => {
|
|
|
4150
4204
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
4151
4205
|
const initials = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
|
|
4152
4206
|
const ValidationCenter = (props) => {
|
|
4207
|
+
var _a;
|
|
4153
4208
|
const [selected, setSelected] = React__namespace.useState({});
|
|
4154
4209
|
React__namespace.useEffect(() => {
|
|
4155
4210
|
setSelected({});
|
|
4156
4211
|
}, [props.classId, props.badgeId]);
|
|
4157
4212
|
const toggle = (userId, checked) => setSelected((prev) => __spreadProps(__spreadValues({}, prev), { [userId]: checked }));
|
|
4158
|
-
const selectedIds = Object.keys(selected).filter((userId) => selected[userId]);
|
|
4159
4213
|
const eligible = props.students.filter((s) => !s.hasCredit);
|
|
4214
|
+
const eligibleIds = new Set(eligible.map((s) => s.userId));
|
|
4215
|
+
const selectedIds = Object.keys(selected).filter((userId) => selected[userId] && eligibleIds.has(userId));
|
|
4216
|
+
const badgeName = ((_a = props.badges.find((b) => b.badgeId === props.badgeId)) == null ? void 0 : _a.displayName) || "this badge";
|
|
4217
|
+
const onConfirmSubmit = () => {
|
|
4218
|
+
const userIds = selectedIds;
|
|
4219
|
+
const count = userIds.length;
|
|
4220
|
+
modals.openConfirmModal({
|
|
4221
|
+
title: `Credit ${count} student${count === 1 ? "" : "s"} for "${badgeName}"?`,
|
|
4222
|
+
centered: true,
|
|
4223
|
+
children: /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm" }, "They'll get credit for this badge even if they haven't finished its lessons or have open comments on it. Credit can't be removed once it's given."),
|
|
4224
|
+
labels: { confirm: "Give Credit", cancel: "Cancel" },
|
|
4225
|
+
onConfirm: () => {
|
|
4226
|
+
Promise.resolve(props.onSubmit(userIds)).then((ok) => {
|
|
4227
|
+
if (ok === true)
|
|
4228
|
+
setSelected({});
|
|
4229
|
+
}).catch(() => {
|
|
4230
|
+
});
|
|
4231
|
+
}
|
|
4232
|
+
});
|
|
4233
|
+
};
|
|
4160
4234
|
const onSelectAll = (checked) => {
|
|
4161
4235
|
const next = {};
|
|
4162
4236
|
if (checked)
|
|
@@ -4218,7 +4292,7 @@ const ValidationCenter = (props) => {
|
|
|
4218
4292
|
))), props.badgeId && props.students.length > 0 && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React__namespace.createElement(
|
|
4219
4293
|
"button",
|
|
4220
4294
|
{
|
|
4221
|
-
onClick:
|
|
4295
|
+
onClick: onConfirmSubmit,
|
|
4222
4296
|
disabled: selectedIds.length === 0,
|
|
4223
4297
|
className: "rounded-lg bg-dark-blue-400 px-5 py-2.5 text-xs font-bold text-white disabled:opacity-40"
|
|
4224
4298
|
},
|
|
@@ -4317,9 +4391,11 @@ exports.Pathways = Pathways;
|
|
|
4317
4391
|
exports.People = People;
|
|
4318
4392
|
exports.StartAnonymousLesson = StartAnonymousLesson;
|
|
4319
4393
|
exports.Student = Student;
|
|
4394
|
+
exports.StudentStatusFilterBar = StudentStatusFilterBar;
|
|
4320
4395
|
exports.SubmissionCommentPanel = SubmissionCommentPanel;
|
|
4321
4396
|
exports.SwitchAccount = SwitchAccount;
|
|
4322
4397
|
exports.TrialHome = TrialHome;
|
|
4323
4398
|
exports.TrialRegistration = TrialRegistration;
|
|
4324
4399
|
exports.ValidationCenter = ValidationCenter;
|
|
4400
|
+
exports.matchesStudentStatus = matchesStudentStatus;
|
|
4325
4401
|
//# sourceMappingURL=index.js.map
|