=0;g--){var y=h[g];if(y&&y.nodeType===1&&y.hasAttribute(ui))return y}}(o),c=s!==void 0?s.nextSibling:null;l.setAttribute(ui,"active"),l.setAttribute("data-styled-version","5.3.11");var f=RE();return f&&l.setAttribute("nonce",f),o.insertBefore(l,c),l},TE=function(){function n(o){var l=this.element=wy(o);l.appendChild(document.createTextNode("")),this.sheet=function(s){if(s.sheet)return s.sheet;for(var c=document.styleSheets,f=0,p=c.length;f=0){var s=document.createTextNode(l),c=this.nodes[o];return this.element.insertBefore(s,c||null),this.length++,!0}return!1},r.deleteRule=function(o){this.element.removeChild(this.nodes[o]),this.length--},r.getRule=function(o){return o0&&(v+=S+",")}),c+=""+g+y+'{content:"'+v+`"}/*!sc*/
-`}}}return c}(this)},n}(),_E=/(a)(d)/gi,Ug=function(n){return String.fromCharCode(n+(n>25?39:97))};function ad(n){var r,o="";for(r=Math.abs(n);r>52;r=r/52|0)o=Ug(r%52)+o;return(Ug(r%52)+o).replace(_E,"$1-$2")}var ri=function(n,r){for(var o=r.length;o;)n=33*n^r.charCodeAt(--o);return n},Cy=function(n){return ri(5381,n)};function AE(n){for(var r=0;r>>0);if(!o.hasNameForId(s,p)){var h=l(f,"."+p,void 0,s);o.insertRules(s,p,h)}c.push(p),this.staticRulesId=p}else{for(var g=this.rules.length,y=ri(this.baseHash,l.hash),v="",S=0;S>>0);if(!o.hasNameForId(s,_)){var T=l(v,"."+_,void 0,s);o.insertRules(s,_,T)}c.push(_)}}return c.join(" ")},n}(),DE=/^\s*\/\/.*$/gm,zE=[":","[",".","#"];function LE(n){var r,o,l,s,c=ka,f=c.options,p=f===void 0?ka:f,h=c.plugins,g=h===void 0?ys:h,y=new hE(p),v=[],S=function(x){function _(T){if(T)try{x(T+"}")}catch{}}return function(T,E,O,A,N,V,M,C,L,D){switch(T){case 1:if(L===0&&E.charCodeAt(0)===64)return x(E+";"),"";break;case 2:if(C===0)return E+"/*|*/";break;case 3:switch(C){case 102:case 112:return x(O[0]+E),"";default:return E+(D===0?"/*|*/":"")}case-2:E.split("/*|*/}").forEach(_)}}}(function(x){v.push(x)}),j=function(x,_,T){return _===0&&zE.indexOf(T[o.length])!==-1||T.match(s)?x:"."+r};function w(x,_,T,E){E===void 0&&(E="&");var O=x.replace(DE,""),A=_&&T?T+" "+_+" { "+O+" }":O;return r=E,o=_,l=new RegExp("\\"+o+"\\b","g"),s=new RegExp("(\\"+o+"\\b){2,}"),y(T||!_?"":_,A)}return y.use([].concat(g,[function(x,_,T){x===2&&T.length&&T[0].lastIndexOf(o)>0&&(T[0]=T[0].replace(l,j))},S,function(x){if(x===-2){var _=v;return v=[],_}}])),w.hash=g.length?g.reduce(function(x,_){return _.name||zl(15),ri(x,_.name)},5381).toString():"",w}var Ry=zt.createContext();Ry.Consumer;var Ty=zt.createContext(),BE=(Ty.Consumer,new Ey),rd=LE();function UE(){return R.useContext(Ry)||BE}function $E(){return R.useContext(Ty)||rd}var HE=function(){function n(r,o){var l=this;this.inject=function(s,c){c===void 0&&(c=rd);var f=l.name+c.hash;s.hasNameForId(l.id,f)||s.insertRules(l.id,f,c(l.rules,f,"@keyframes"))},this.toString=function(){return zl(12,String(l.name))},this.name=r,this.id="sc-keyframes-"+r,this.rules=o}return n.prototype.getName=function(r){return r===void 0&&(r=rd),this.name+r.hash},n}(),qE=/([A-Z])/,PE=/([A-Z])/g,YE=/^ms-/,GE=function(n){return"-"+n.toLowerCase()};function $g(n){return qE.test(n)?n.replace(PE,GE).replace(YE,"-ms-"):n}var Hg=function(n){return n==null||n===!1||n===""};function ci(n,r,o,l){if(Array.isArray(n)){for(var s,c=[],f=0,p=n.length;f1?r-1:0),l=1;l?@[\\\]^`{|}~-]+/g,KE=/(^-|-$)/g;function Uf(n){return n.replace(FE,"-").replace(KE,"")}var QE=function(n){return ad(Cy(n)>>>0)};function ls(n){return typeof n=="string"&&!0}var id=function(n){return typeof n=="function"||typeof n=="object"&&n!==null&&!Array.isArray(n)},ZE=function(n){return n!=="__proto__"&&n!=="constructor"&&n!=="prototype"};function IE(n,r,o){var l=n[o];id(r)&&id(l)?jy(l,r):n[o]=r}function jy(n){for(var r=arguments.length,o=new Array(r>1?r-1:0),l=1;l=0||(D[C]=V[C]);return D}(r,["componentId"]),N=O&&O+"-"+(ls(E)?E:Uf(Lg(E)));return Ny(E,aa({},A,{attrs:S,componentId:N}),o)},Object.defineProperty(w,"defaultProps",{get:function(){return this._foldedDefaultProps},set:function(E){this._foldedDefaultProps=l?jy({},n.defaultProps,E):E}}),Object.defineProperty(w,"toString",{value:function(){return"."+w.styledComponentId}}),s&&gy(w,n,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0,withComponent:!0}),w}var ra=function(n){return function r(o,l,s){if(s===void 0&&(s=ka),!Sy.isValidElementType(l))return zl(1,String(l));var c=function(){return o(l,s,VE.apply(void 0,arguments))};return c.withConfig=function(f){return r(o,l,aa({},s,{},f))},c.attrs=function(f){return r(o,l,aa({},s,{attrs:Array.prototype.concat(s.attrs,f).filter(Boolean)}))},c}(Ny,n)};["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","textPath","tspan"].forEach(function(n){ra[n]=ra(n)});const Pg=()=>{const[n,r]=R.useState([]),[o,l]=R.useState(!1),[s,c]=R.useState(!1),[f,p]=R.useState(1),h=20,g=["default","updatedAt","ownerLastName","ownerFirstName","title"],[y,v]=R.useState(g[0]),[S,j]=R.useState(1),[w,x]=R.useState("asc"),_=()=>{const C=w==="asc"?"desc":"asc";x(C),j(C==="asc"?1:-1)},[T,E]=R.useState([]),O=Object.keys(It).sort((C,L)=>C.localeCompare(L)),A=async()=>{Ct.get("/users/favListingsIds",{withCredentials:!0}).then(C=>{E(C.data.favListingsIds)}).catch(C=>{console.error("Error fetching user's favorite listings:",C),E([]),Je({text:"Could not load your favorite listings",icon:"warning"})})};R.useEffect(()=>{A()},[]);const N=C=>{r(L=>[...L,...C]),c(C.length{r(C),c(C.length{const D=T;L?(E([C,...D]),Ct.put("/users/favListings",{withCredentials:!0,data:{favListings:[C]}}).catch(z=>{E(D),console.error("Error favoriting listing:",z),Je({text:"Unable to favorite listing",icon:"warning"}),A()})):(E(D.filter(z=>z!==C)),Ct.delete("/users/favListings",{withCredentials:!0,data:{favListings:[C]}}).catch(z=>{E(D),console.error("Error unfavoriting listing:",z),Je({text:"Unable to unfavorite listing",icon:"warning"}),A()}))};return m.jsxs("div",{className:"mx-auto max-w-[1300px] px-6 mt-24 w-full",children:[m.jsx("div",{className:"mt-12",children:m.jsx(pE,{allDepartments:O,resetListings:V,addListings:N,setIsLoading:l,sortBy:y,sortOrder:S,setSortBy:v,setSortOrder:j,sortDirection:w,onToggleSortDirection:_,sortableKeys:g,page:f,setPage:p,pageSize:h})}),m.jsx("div",{className:"mt-4 md:mt-10"}),n.length>0?m.jsx(uE,{loading:o,searchExhausted:s,setPage:p,listings:n,sortableKeys:g,sortBy:y,setSortBy:v,setSortOrder:j,sortDirection:w,onToggleSortDirection:_,favListingsIds:T,updateFavorite:M}):m.jsx(WE,{children:"No results match the search criteria"})]})},WE=ra.h4`
- color: #838383;
- text-align: center;
- padding-top: 15%;
-`;function $e(n,r){if(n==null)return{};var o={};for(var l in n)if({}.hasOwnProperty.call(n,l)){if(r.indexOf(l)!==-1)continue;o[l]=n[l]}return o}function _y(n){var r,o,l="";if(typeof n=="string"||typeof n=="number")l+=n;else if(typeof n=="object")if(Array.isArray(n)){var s=n.length;for(r=0;r{if(l.toString().match(/^(components|slots)$/))o[l]=ee({},n[l],o[l]);else if(l.toString().match(/^(componentsProps|slotProps)$/)){const s=n[l]||{},c=r[l];o[l]={},!c||!Object.keys(c)?o[l]=s:!s||!Object.keys(s)?o[l]=c:(o[l]=ee({},c),Object.keys(s).forEach(f=>{o[l][f]=Tl(s[f],c[f])}))}else o[l]===void 0&&(o[l]=n[l])}),o}function Wt(n,r,o=void 0){const l={};return Object.keys(n).forEach(s=>{l[s]=n[s].reduce((c,f)=>{if(f){const p=r(f);p!==""&&c.push(p),o&&o[f]&&c.push(o[f])}return c},[]).join(" ")}),l}var at={},Hf={exports:{}},Yg;function Ay(){return Yg||(Yg=1,function(n){function r(o){return o&&o.__esModule?o:{default:o}}n.exports=r,n.exports.__esModule=!0,n.exports.default=n.exports}(Hf)),Hf.exports}function jl(n){let r="https://mui.com/production-error/?code="+n;for(let o=1;o=6?2:1}}`,"g");let L=M.match(C);return L&&L[0].length===1&&(L=L.map(D=>D+D)),L?`rgb${L.length===4?"a":""}(${L.map((D,z)=>z<3?parseInt(D,16):Math.round(parseInt(D,16)/255*1e3)/1e3).join(", ")})`:""}function c(M){const C=M.toString(16);return C.length===1?`0${C}`:C}function f(M){if(M.type)return M;if(M.charAt(0)==="#")return f(s(M));const C=M.indexOf("("),L=M.substring(0,C);if(["rgb","rgba","hsl","hsla","color"].indexOf(L)===-1)throw new Error((0,r.default)(9,M));let D=M.substring(C+1,M.length-1),z;if(L==="color"){if(D=D.split(" "),z=D.shift(),D.length===4&&D[3].charAt(0)==="/"&&(D[3]=D[3].slice(1)),["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(z)===-1)throw new Error((0,r.default)(10,z))}else D=D.split(",");return D=D.map(Y=>parseFloat(Y)),{type:L,values:D,colorSpace:z}}const p=M=>{const C=f(M);return C.values.slice(0,3).map((L,D)=>C.type.indexOf("hsl")!==-1&&D!==0?`${L}%`:L).join(" ")};at.colorChannel=p;const h=(M,C)=>{try{return p(M)}catch{return M}};at.private_safeColorChannel=h;function g(M){const{type:C,colorSpace:L}=M;let{values:D}=M;return C.indexOf("rgb")!==-1?D=D.map((z,Y)=>Y<3?parseInt(z,10):z):C.indexOf("hsl")!==-1&&(D[1]=`${D[1]}%`,D[2]=`${D[2]}%`),C.indexOf("color")!==-1?D=`${L} ${D.join(" ")}`:D=`${D.join(", ")}`,`${C}(${D})`}function y(M){if(M.indexOf("#")===0)return M;const{values:C}=f(M);return`#${C.map((L,D)=>c(D===3?Math.round(255*L):L)).join("")}`}function v(M){M=f(M);const{values:C}=M,L=C[0],D=C[1]/100,z=C[2]/100,Y=D*Math.min(z,1-z),K=(Z,oe=(Z+L/30)%12)=>z-Y*Math.max(Math.min(oe-3,9-oe,1),-1);let ie="rgb";const le=[Math.round(K(0)*255),Math.round(K(8)*255),Math.round(K(4)*255)];return M.type==="hsla"&&(ie+="a",le.push(C[3])),g({type:ie,values:le})}function S(M){M=f(M);let C=M.type==="hsl"||M.type==="hsla"?f(v(M)).values:M.values;return C=C.map(L=>(M.type!=="color"&&(L/=255),L<=.03928?L/12.92:((L+.055)/1.055)**2.4)),Number((.2126*C[0]+.7152*C[1]+.0722*C[2]).toFixed(3))}function j(M,C){const L=S(M),D=S(C);return(Math.max(L,D)+.05)/(Math.min(L,D)+.05)}function w(M,C){return M=f(M),C=l(C),(M.type==="rgb"||M.type==="hsl")&&(M.type+="a"),M.type==="color"?M.values[3]=`/${C}`:M.values[3]=C,g(M)}function x(M,C,L){try{return w(M,C)}catch{return M}}function _(M,C){if(M=f(M),C=l(C),M.type.indexOf("hsl")!==-1)M.values[2]*=1-C;else if(M.type.indexOf("rgb")!==-1||M.type.indexOf("color")!==-1)for(let L=0;L<3;L+=1)M.values[L]*=1-C;return g(M)}function T(M,C,L){try{return _(M,C)}catch{return M}}function E(M,C){if(M=f(M),C=l(C),M.type.indexOf("hsl")!==-1)M.values[2]+=(100-M.values[2])*C;else if(M.type.indexOf("rgb")!==-1)for(let L=0;L<3;L+=1)M.values[L]+=(255-M.values[L])*C;else if(M.type.indexOf("color")!==-1)for(let L=0;L<3;L+=1)M.values[L]+=(1-M.values[L])*C;return g(M)}function O(M,C,L){try{return E(M,C)}catch{return M}}function A(M,C=.15){return S(M)>.5?_(M,C):E(M,C)}function N(M,C,L){try{return A(M,C)}catch{return M}}function V(M,C,L,D=1){const z=(le,Z)=>Math.round((le**(1/D)*(1-L)+Z**(1/D)*L)**D),Y=f(M),K=f(C),ie=[z(Y.values[0],K.values[0]),z(Y.values[1],K.values[1]),z(Y.values[2],K.values[2])];return g({type:"rgb",values:ie})}return at}var Lt=r2(),lr={},qf={exports:{}},Vg;function i2(){return Vg||(Vg=1,function(n){function r(){return n.exports=r=Object.assign?Object.assign.bind():function(o){for(var l=1;l96?o2:s2},Kg=function(r,o,l){var s;if(o){var c=o.shouldForwardProp;s=r.__emotion_forwardProp&&c?function(f){return r.__emotion_forwardProp(f)&&c(f)}:c}return typeof s!="function"&&l&&(s=r.__emotion_forwardProp),s},u2=function(r){var o=r.cache,l=r.serialized,s=r.isStringTag;return _s(o,l,s),Ed(function(){return As(o,l,s)}),null},c2=function n(r,o){var l=r.__emotion_real===r,s=l&&r.__emotion_base||r,c,f;o!==void 0&&(c=o.label,f=o.target);var p=Kg(r,o,l),h=p||Fg(s),g=!h("as");return function(){var y=arguments,v=l&&r.__emotion_styles!==void 0?r.__emotion_styles.slice(0):[];if(c!==void 0&&v.push("label:"+c+";"),y[0]==null||y[0].raw===void 0)v.push.apply(v,y);else{var S=y[0];v.push(S[0]);for(var j=y.length,w=1;wr(p2(s)?o:s):r;return m.jsx(xy,{styles:l})}function My(n,r){return ld(n,r)}const m2=(n,r)=>{Array.isArray(n.__emotion_styles)&&(n.__emotion_styles=r(n.__emotion_styles))},g2=Object.freeze(Object.defineProperty({__proto__:null,GlobalStyles:h2,StyledEngineProvider:d2,ThemeContext:hn,css:Td,default:My,internal_processStyles:m2,keyframes:Dl},Symbol.toStringTag,{value:"Module"})),v2=oa(g2);function _a(n){if(typeof n!="object"||n===null)return!1;const r=Object.getPrototypeOf(n);return(r===null||r===Object.prototype||Object.getPrototypeOf(r)===null)&&!(Symbol.toStringTag in n)&&!(Symbol.iterator in n)}function ky(n){if(R.isValidElement(n)||!_a(n))return n;const r={};return Object.keys(n).forEach(o=>{r[o]=ky(n[o])}),r}function Un(n,r,o={clone:!0}){const l=o.clone?ee({},n):n;return _a(n)&&_a(r)&&Object.keys(r).forEach(s=>{R.isValidElement(r[s])?l[s]=r[s]:_a(r[s])&&Object.prototype.hasOwnProperty.call(n,s)&&_a(n[s])?l[s]=Un(n[s],r[s],o):o.clone?l[s]=_a(r[s])?ky(r[s]):r[s]:l[s]=r[s]}),l}const y2=Object.freeze(Object.defineProperty({__proto__:null,default:Un,isPlainObject:_a},Symbol.toStringTag,{value:"Module"})),b2=oa(y2);function qe(n){if(typeof n!="string")throw new Error(jl(7));return n.charAt(0).toUpperCase()+n.slice(1)}const x2=Object.freeze(Object.defineProperty({__proto__:null,default:qe},Symbol.toStringTag,{value:"Module"})),S2=oa(x2);var Yf={exports:{}},Ve={};/**
- * @license React
- * react-is.production.js
- *
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */var Qg;function w2(){if(Qg)return Ve;Qg=1;var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),f=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),g=Symbol.for("react.suspense_list"),y=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),S=Symbol.for("react.view_transition"),j=Symbol.for("react.client.reference");function w(x){if(typeof x=="object"&&x!==null){var _=x.$$typeof;switch(_){case n:switch(x=x.type,x){case o:case s:case l:case h:case g:case S:return x;default:switch(x=x&&x.$$typeof,x){case f:case p:case v:case y:return x;case c:return x;default:return _}}case r:return _}}}return Ve.ContextConsumer=c,Ve.ContextProvider=f,Ve.Element=n,Ve.ForwardRef=p,Ve.Fragment=o,Ve.Lazy=v,Ve.Memo=y,Ve.Portal=r,Ve.Profiler=s,Ve.StrictMode=l,Ve.Suspense=h,Ve.SuspenseList=g,Ve.isContextConsumer=function(x){return w(x)===c},Ve.isContextProvider=function(x){return w(x)===f},Ve.isElement=function(x){return typeof x=="object"&&x!==null&&x.$$typeof===n},Ve.isForwardRef=function(x){return w(x)===p},Ve.isFragment=function(x){return w(x)===o},Ve.isLazy=function(x){return w(x)===v},Ve.isMemo=function(x){return w(x)===y},Ve.isPortal=function(x){return w(x)===r},Ve.isProfiler=function(x){return w(x)===s},Ve.isStrictMode=function(x){return w(x)===l},Ve.isSuspense=function(x){return w(x)===h},Ve.isSuspenseList=function(x){return w(x)===g},Ve.isValidElementType=function(x){return typeof x=="string"||typeof x=="function"||x===o||x===s||x===l||x===h||x===g||typeof x=="object"&&x!==null&&(x.$$typeof===v||x.$$typeof===y||x.$$typeof===f||x.$$typeof===c||x.$$typeof===p||x.$$typeof===j||x.getModuleId!==void 0)},Ve.typeOf=w,Ve}var Zg;function E2(){return Zg||(Zg=1,Yf.exports=w2()),Yf.exports}var Ig=E2();const C2=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function Dy(n){const r=`${n}`.match(C2);return r&&r[1]||""}function zy(n,r=""){return n.displayName||n.name||Dy(n)||r}function Wg(n,r,o){const l=zy(r);return n.displayName||(l!==""?`${o}(${l})`:o)}function R2(n){if(n!=null){if(typeof n=="string")return n;if(typeof n=="function")return zy(n,"Component");if(typeof n=="object")switch(n.$$typeof){case Ig.ForwardRef:return Wg(n,n.render,"ForwardRef");case Ig.Memo:return Wg(n,n.type,"memo");default:return}}}const T2=Object.freeze(Object.defineProperty({__proto__:null,default:R2,getFunctionName:Dy},Symbol.toStringTag,{value:"Module"})),j2=oa(T2),O2=["values","unit","step"],N2=n=>{const r=Object.keys(n).map(o=>({key:o,val:n[o]}))||[];return r.sort((o,l)=>o.val-l.val),r.reduce((o,l)=>ee({},o,{[l.key]:l.val}),{})};function Ly(n){const{values:r={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:o="px",step:l=5}=n,s=$e(n,O2),c=N2(r),f=Object.keys(c);function p(S){return`@media (min-width:${typeof r[S]=="number"?r[S]:S}${o})`}function h(S){return`@media (max-width:${(typeof r[S]=="number"?r[S]:S)-l/100}${o})`}function g(S,j){const w=f.indexOf(j);return`@media (min-width:${typeof r[S]=="number"?r[S]:S}${o}) and (max-width:${(w!==-1&&typeof r[f[w]]=="number"?r[f[w]]:j)-l/100}${o})`}function y(S){return f.indexOf(S)+1`@media (min-width:${Nd[n]}px)`};function ia(n,r,o){const l=n.theme||{};if(Array.isArray(r)){const c=l.breakpoints||Jg;return r.reduce((f,p,h)=>(f[c.up(c.keys[h])]=o(r[h]),f),{})}if(typeof r=="object"){const c=l.breakpoints||Jg;return Object.keys(r).reduce((f,p)=>{if(Object.keys(c.values||Nd).indexOf(p)!==-1){const h=c.up(p);f[h]=o(r[p],p)}else{const h=p;f[h]=r[h]}return f},{})}return o(r)}function A2(n={}){var r;return((r=n.keys)==null?void 0:r.reduce((l,s)=>{const c=n.up(s);return l[c]={},l},{}))||{}}function M2(n,r){return n.reduce((o,l)=>{const s=o[l];return(!s||Object.keys(s).length===0)&&delete o[l],o},r)}function ks(n,r,o=!0){if(!r||typeof r!="string")return null;if(n&&n.vars&&o){const l=`vars.${r}`.split(".").reduce((s,c)=>s&&s[c]?s[c]:null,n);if(l!=null)return l}return r.split(".").reduce((l,s)=>l&&l[s]!=null?l[s]:null,n)}function xs(n,r,o,l=o){let s;return typeof n=="function"?s=n(o):Array.isArray(n)?s=n[o]||l:s=ks(n,o)||l,r&&(s=r(s,l,n)),s}function ut(n){const{prop:r,cssProperty:o=n.prop,themeKey:l,transform:s}=n,c=f=>{if(f[r]==null)return null;const p=f[r],h=f.theme,g=ks(h,l)||{};return ia(f,p,v=>{let S=xs(g,s,v);return v===S&&typeof v=="string"&&(S=xs(g,s,`${r}${v==="default"?"":qe(v)}`,v)),o===!1?S:{[o]:S}})};return c.propTypes={},c.filterProps=[r],c}function k2(n){const r={};return o=>(r[o]===void 0&&(r[o]=n(o)),r[o])}const D2={m:"margin",p:"padding"},z2={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},ev={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},L2=k2(n=>{if(n.length>2)if(ev[n])n=ev[n];else return[n];const[r,o]=n.split(""),l=D2[r],s=z2[o]||"";return Array.isArray(s)?s.map(c=>l+c):[l+s]}),_d=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],Ad=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"];[..._d,...Ad];function Ll(n,r,o,l){var s;const c=(s=ks(n,r,!1))!=null?s:o;return typeof c=="number"?f=>typeof f=="string"?f:c*f:Array.isArray(c)?f=>typeof f=="string"?f:c[f]:typeof c=="function"?c:()=>{}}function By(n){return Ll(n,"spacing",8)}function Bl(n,r){if(typeof r=="string"||r==null)return r;const o=Math.abs(r),l=n(o);return r>=0?l:typeof l=="number"?-l:`-${l}`}function B2(n,r){return o=>n.reduce((l,s)=>(l[s]=Bl(r,o),l),{})}function U2(n,r,o,l){if(r.indexOf(o)===-1)return null;const s=L2(o),c=B2(s,l),f=n[o];return ia(n,f,c)}function Uy(n,r){const o=By(n.theme);return Object.keys(n).map(l=>U2(n,r,l,o)).reduce(vl,{})}function it(n){return Uy(n,_d)}it.propTypes={};it.filterProps=_d;function lt(n){return Uy(n,Ad)}lt.propTypes={};lt.filterProps=Ad;function $2(n=8){if(n.mui)return n;const r=By({spacing:n}),o=(...l)=>(l.length===0?[1]:l).map(c=>{const f=r(c);return typeof f=="number"?`${f}px`:f}).join(" ");return o.mui=!0,o}function Ds(...n){const r=n.reduce((l,s)=>(s.filterProps.forEach(c=>{l[c]=s}),l),{}),o=l=>Object.keys(l).reduce((s,c)=>r[c]?vl(s,r[c](l)):s,{});return o.propTypes={},o.filterProps=n.reduce((l,s)=>l.concat(s.filterProps),[]),o}function pn(n){return typeof n!="number"?n:`${n}px solid`}function gn(n,r){return ut({prop:n,themeKey:"borders",transform:r})}const H2=gn("border",pn),q2=gn("borderTop",pn),P2=gn("borderRight",pn),Y2=gn("borderBottom",pn),G2=gn("borderLeft",pn),V2=gn("borderColor"),X2=gn("borderTopColor"),F2=gn("borderRightColor"),K2=gn("borderBottomColor"),Q2=gn("borderLeftColor"),Z2=gn("outline",pn),I2=gn("outlineColor"),zs=n=>{if(n.borderRadius!==void 0&&n.borderRadius!==null){const r=Ll(n.theme,"shape.borderRadius",4),o=l=>({borderRadius:Bl(r,l)});return ia(n,n.borderRadius,o)}return null};zs.propTypes={};zs.filterProps=["borderRadius"];Ds(H2,q2,P2,Y2,G2,V2,X2,F2,K2,Q2,zs,Z2,I2);const Ls=n=>{if(n.gap!==void 0&&n.gap!==null){const r=Ll(n.theme,"spacing",8),o=l=>({gap:Bl(r,l)});return ia(n,n.gap,o)}return null};Ls.propTypes={};Ls.filterProps=["gap"];const Bs=n=>{if(n.columnGap!==void 0&&n.columnGap!==null){const r=Ll(n.theme,"spacing",8),o=l=>({columnGap:Bl(r,l)});return ia(n,n.columnGap,o)}return null};Bs.propTypes={};Bs.filterProps=["columnGap"];const Us=n=>{if(n.rowGap!==void 0&&n.rowGap!==null){const r=Ll(n.theme,"spacing",8),o=l=>({rowGap:Bl(r,l)});return ia(n,n.rowGap,o)}return null};Us.propTypes={};Us.filterProps=["rowGap"];const W2=ut({prop:"gridColumn"}),J2=ut({prop:"gridRow"}),eC=ut({prop:"gridAutoFlow"}),tC=ut({prop:"gridAutoColumns"}),nC=ut({prop:"gridAutoRows"}),aC=ut({prop:"gridTemplateColumns"}),rC=ut({prop:"gridTemplateRows"}),iC=ut({prop:"gridTemplateAreas"}),lC=ut({prop:"gridArea"});Ds(Ls,Bs,Us,W2,J2,eC,tC,nC,aC,rC,iC,lC);function oi(n,r){return r==="grey"?r:n}const oC=ut({prop:"color",themeKey:"palette",transform:oi}),sC=ut({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:oi}),uC=ut({prop:"backgroundColor",themeKey:"palette",transform:oi});Ds(oC,sC,uC);function Qt(n){return n<=1&&n!==0?`${n*100}%`:n}const cC=ut({prop:"width",transform:Qt}),Md=n=>{if(n.maxWidth!==void 0&&n.maxWidth!==null){const r=o=>{var l,s;const c=((l=n.theme)==null||(l=l.breakpoints)==null||(l=l.values)==null?void 0:l[o])||Nd[o];return c?((s=n.theme)==null||(s=s.breakpoints)==null?void 0:s.unit)!=="px"?{maxWidth:`${c}${n.theme.breakpoints.unit}`}:{maxWidth:c}:{maxWidth:Qt(o)}};return ia(n,n.maxWidth,r)}return null};Md.filterProps=["maxWidth"];const fC=ut({prop:"minWidth",transform:Qt}),dC=ut({prop:"height",transform:Qt}),pC=ut({prop:"maxHeight",transform:Qt}),hC=ut({prop:"minHeight",transform:Qt});ut({prop:"size",cssProperty:"width",transform:Qt});ut({prop:"size",cssProperty:"height",transform:Qt});const mC=ut({prop:"boxSizing"});Ds(cC,Md,fC,dC,pC,hC,mC);const Ul={border:{themeKey:"borders",transform:pn},borderTop:{themeKey:"borders",transform:pn},borderRight:{themeKey:"borders",transform:pn},borderBottom:{themeKey:"borders",transform:pn},borderLeft:{themeKey:"borders",transform:pn},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:pn},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:zs},color:{themeKey:"palette",transform:oi},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:oi},backgroundColor:{themeKey:"palette",transform:oi},p:{style:lt},pt:{style:lt},pr:{style:lt},pb:{style:lt},pl:{style:lt},px:{style:lt},py:{style:lt},padding:{style:lt},paddingTop:{style:lt},paddingRight:{style:lt},paddingBottom:{style:lt},paddingLeft:{style:lt},paddingX:{style:lt},paddingY:{style:lt},paddingInline:{style:lt},paddingInlineStart:{style:lt},paddingInlineEnd:{style:lt},paddingBlock:{style:lt},paddingBlockStart:{style:lt},paddingBlockEnd:{style:lt},m:{style:it},mt:{style:it},mr:{style:it},mb:{style:it},ml:{style:it},mx:{style:it},my:{style:it},margin:{style:it},marginTop:{style:it},marginRight:{style:it},marginBottom:{style:it},marginLeft:{style:it},marginX:{style:it},marginY:{style:it},marginInline:{style:it},marginInlineStart:{style:it},marginInlineEnd:{style:it},marginBlock:{style:it},marginBlockStart:{style:it},marginBlockEnd:{style:it},displayPrint:{cssProperty:!1,transform:n=>({"@media print":{display:n}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:Ls},rowGap:{style:Us},columnGap:{style:Bs},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:Qt},maxWidth:{style:Md},minWidth:{transform:Qt},height:{transform:Qt},maxHeight:{transform:Qt},minHeight:{transform:Qt},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}};function gC(...n){const r=n.reduce((l,s)=>l.concat(Object.keys(s)),[]),o=new Set(r);return n.every(l=>o.size===Object.keys(l).length)}function vC(n,r){return typeof n=="function"?n(r):n}function $y(){function n(o,l,s,c){const f={[o]:l,theme:s},p=c[o];if(!p)return{[o]:l};const{cssProperty:h=o,themeKey:g,transform:y,style:v}=p;if(l==null)return null;if(g==="typography"&&l==="inherit")return{[o]:l};const S=ks(s,g)||{};return v?v(f):ia(f,l,w=>{let x=xs(S,y,w);return w===x&&typeof w=="string"&&(x=xs(S,y,`${o}${w==="default"?"":qe(w)}`,w)),h===!1?x:{[h]:x}})}function r(o){var l;const{sx:s,theme:c={}}=o||{};if(!s)return null;const f=(l=c.unstable_sxConfig)!=null?l:Ul;function p(h){let g=h;if(typeof h=="function")g=h(c);else if(typeof h!="object")return h;if(!g)return null;const y=A2(c.breakpoints),v=Object.keys(y);let S=y;return Object.keys(g).forEach(j=>{const w=vC(g[j],c);if(w!=null)if(typeof w=="object")if(f[j])S=vl(S,n(j,w,c,f));else{const x=ia({theme:c},w,_=>({[j]:_}));gC(x,w)?S[j]=r({sx:w,theme:c}):S=vl(S,x)}else S=vl(S,n(j,w,c,f))}),M2(v,S)}return Array.isArray(s)?s.map(p):p(s)}return r}const $l=$y();$l.filterProps=["sx"];function Hy(n,r){const o=this;return o.vars&&typeof o.getColorSchemeSelector=="function"?{[o.getColorSchemeSelector(n).replace(/(\[[^\]]+\])/,"*:where($1)")]:r}:o.palette.mode===n?r:{}}const yC=["breakpoints","palette","spacing","shape"];function kd(n={},...r){const{breakpoints:o={},palette:l={},spacing:s,shape:c={}}=n,f=$e(n,yC),p=Ly(o),h=$2(s);let g=Un({breakpoints:p,direction:"ltr",components:{},palette:ee({mode:"light"},l),spacing:h,shape:ee({},_2,c)},f);return g.applyStyles=Hy,g=r.reduce((y,v)=>Un(y,v),g),g.unstable_sxConfig=ee({},Ul,f==null?void 0:f.unstable_sxConfig),g.unstable_sx=function(v){return $l({sx:v,theme:this})},g}const bC=Object.freeze(Object.defineProperty({__proto__:null,default:kd,private_createBreakpoints:Ly,unstable_applyStyles:Hy},Symbol.toStringTag,{value:"Module"})),xC=oa(bC),SC=["sx"],wC=n=>{var r,o;const l={systemProps:{},otherProps:{}},s=(r=n==null||(o=n.theme)==null?void 0:o.unstable_sxConfig)!=null?r:Ul;return Object.keys(n).forEach(c=>{s[c]?l.systemProps[c]=n[c]:l.otherProps[c]=n[c]}),l};function Dd(n){const{sx:r}=n,o=$e(n,SC),{systemProps:l,otherProps:s}=wC(o);let c;return Array.isArray(r)?c=[l,...r]:typeof r=="function"?c=(...f)=>{const p=r(...f);return _a(p)?ee({},l,p):l}:c=ee({},l,r),ee({},s,{sx:c})}const EC=Object.freeze(Object.defineProperty({__proto__:null,default:$l,extendSxProp:Dd,unstable_createStyleFunctionSx:$y,unstable_defaultSxConfig:Ul},Symbol.toStringTag,{value:"Module"})),CC=oa(EC);var tv;function RC(){if(tv)return lr;tv=1;var n=Ay();Object.defineProperty(lr,"__esModule",{value:!0}),lr.default=A,lr.shouldForwardProp=w,lr.systemDefaultTheme=void 0;var r=n(i2()),o=n(l2()),l=v(v2),s=b2;n(S2),n(j2);var c=n(xC),f=n(CC);const p=["ownerState"],h=["variants"],g=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function y(N){if(typeof WeakMap!="function")return null;var V=new WeakMap,M=new WeakMap;return(y=function(C){return C?M:V})(N)}function v(N,V){if(N&&N.__esModule)return N;if(N===null||typeof N!="object"&&typeof N!="function")return{default:N};var M=y(V);if(M&&M.has(N))return M.get(N);var C={__proto__:null},L=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var D in N)if(D!=="default"&&Object.prototype.hasOwnProperty.call(N,D)){var z=L?Object.getOwnPropertyDescriptor(N,D):null;z&&(z.get||z.set)?Object.defineProperty(C,D,z):C[D]=N[D]}return C.default=N,M&&M.set(N,C),C}function S(N){return Object.keys(N).length===0}function j(N){return typeof N=="string"&&N.charCodeAt(0)>96}function w(N){return N!=="ownerState"&&N!=="theme"&&N!=="sx"&&N!=="as"}const x=lr.systemDefaultTheme=(0,c.default)(),_=N=>N&&N.charAt(0).toLowerCase()+N.slice(1);function T({defaultTheme:N,theme:V,themeId:M}){return S(V)?N:V[M]||V}function E(N){return N?(V,M)=>M[N]:null}function O(N,V){let{ownerState:M}=V,C=(0,o.default)(V,p);const L=typeof N=="function"?N((0,r.default)({ownerState:M},C)):N;if(Array.isArray(L))return L.flatMap(D=>O(D,(0,r.default)({ownerState:M},C)));if(L&&typeof L=="object"&&Array.isArray(L.variants)){const{variants:D=[]}=L;let Y=(0,o.default)(L,h);return D.forEach(K=>{let ie=!0;typeof K.props=="function"?ie=K.props((0,r.default)({ownerState:M},C,M)):Object.keys(K.props).forEach(le=>{(M==null?void 0:M[le])!==K.props[le]&&C[le]!==K.props[le]&&(ie=!1)}),ie&&(Array.isArray(Y)||(Y=[Y]),Y.push(typeof K.style=="function"?K.style((0,r.default)({ownerState:M},C,M)):K.style))}),Y}return L}function A(N={}){const{themeId:V,defaultTheme:M=x,rootShouldForwardProp:C=w,slotShouldForwardProp:L=w}=N,D=z=>(0,f.default)((0,r.default)({},z,{theme:T((0,r.default)({},z,{defaultTheme:M,themeId:V}))}));return D.__mui_systemSx=!0,(z,Y={})=>{(0,l.internal_processStyles)(z,H=>H.filter(fe=>!(fe!=null&&fe.__mui_systemSx)));const{name:K,slot:ie,skipVariantsResolver:le,skipSx:Z,overridesResolver:oe=E(_(ie))}=Y,ne=(0,o.default)(Y,g),pe=le!==void 0?le:ie&&ie!=="Root"&&ie!=="root"||!1,U=Z||!1;let re,P=w;ie==="Root"||ie==="root"?P=C:ie?P=L:j(z)&&(P=void 0);const Q=(0,l.default)(z,(0,r.default)({shouldForwardProp:P,label:re},ne)),J=H=>typeof H=="function"&&H.__emotion_real!==H||(0,s.isPlainObject)(H)?fe=>O(H,(0,r.default)({},fe,{theme:T({theme:fe.theme,defaultTheme:M,themeId:V})})):H,se=(H,...fe)=>{let B=J(H);const ae=fe?fe.map(J):[];K&&oe&&ae.push(de=>{const Ee=T((0,r.default)({},de,{defaultTheme:M,themeId:V}));if(!Ee.components||!Ee.components[K]||!Ee.components[K].styleOverrides)return null;const _e=Ee.components[K].styleOverrides,we={};return Object.entries(_e).forEach(([Qe,je])=>{we[Qe]=O(je,(0,r.default)({},de,{theme:Ee}))}),oe(de,we)}),K&&!pe&&ae.push(de=>{var Ee;const _e=T((0,r.default)({},de,{defaultTheme:M,themeId:V})),we=_e==null||(Ee=_e.components)==null||(Ee=Ee[K])==null?void 0:Ee.variants;return O({variants:we},(0,r.default)({},de,{theme:_e}))}),U||ae.push(D);const he=ae.length-fe.length;if(Array.isArray(H)&&he>0){const de=new Array(he).fill("");B=[...H,...de],B.raw=[...H.raw,...de]}const ge=Q(B,...ae);return z.muiName&&(ge.muiName=z.muiName),ge};return Q.withConfig&&(se.withConfig=Q.withConfig),se}}return lr}var TC=RC();const jC=fr(TC),nv=n=>n,OC=()=>{let n=nv;return{configure(r){n=r},generate(r){return n(r)},reset(){n=nv}}},qy=OC(),NC={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function Vt(n,r,o="Mui"){const l=NC[r];return l?`${o}-${l}`:`${qy.generate(n)}-${r}`}function _C(n,r){return ee({toolbar:{minHeight:56,[n.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[n.up("sm")]:{minHeight:64}}},r)}const Ol={black:"#000",white:"#fff"},AC={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},Qr={50:"#f3e5f5",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",700:"#7b1fa2"},Zr={300:"#e57373",400:"#ef5350",500:"#f44336",700:"#d32f2f",800:"#c62828"},dl={300:"#ffb74d",400:"#ffa726",500:"#ff9800",700:"#f57c00",900:"#e65100"},Ir={50:"#e3f2fd",200:"#90caf9",400:"#42a5f5",700:"#1976d2",800:"#1565c0"},Wr={300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",700:"#0288d1",900:"#01579b"},Jr={300:"#81c784",400:"#66bb6a",500:"#4caf50",700:"#388e3c",800:"#2e7d32",900:"#1b5e20"},MC=["mode","contrastThreshold","tonalOffset"],av={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:Ol.white,default:Ol.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},Gf={text:{primary:Ol.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:Ol.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function rv(n,r,o,l){const s=l.light||l,c=l.dark||l*1.5;n[r]||(n.hasOwnProperty(o)?n[r]=n[o]:r==="light"?n.light=Lt.lighten(n.main,s):r==="dark"&&(n.dark=Lt.darken(n.main,c)))}function kC(n="light"){return n==="dark"?{main:Ir[200],light:Ir[50],dark:Ir[400]}:{main:Ir[700],light:Ir[400],dark:Ir[800]}}function DC(n="light"){return n==="dark"?{main:Qr[200],light:Qr[50],dark:Qr[400]}:{main:Qr[500],light:Qr[300],dark:Qr[700]}}function zC(n="light"){return n==="dark"?{main:Zr[500],light:Zr[300],dark:Zr[700]}:{main:Zr[700],light:Zr[400],dark:Zr[800]}}function LC(n="light"){return n==="dark"?{main:Wr[400],light:Wr[300],dark:Wr[700]}:{main:Wr[700],light:Wr[500],dark:Wr[900]}}function BC(n="light"){return n==="dark"?{main:Jr[400],light:Jr[300],dark:Jr[700]}:{main:Jr[800],light:Jr[500],dark:Jr[900]}}function UC(n="light"){return n==="dark"?{main:dl[400],light:dl[300],dark:dl[700]}:{main:"#ed6c02",light:dl[500],dark:dl[900]}}function $C(n){const{mode:r="light",contrastThreshold:o=3,tonalOffset:l=.2}=n,s=$e(n,MC),c=n.primary||kC(r),f=n.secondary||DC(r),p=n.error||zC(r),h=n.info||LC(r),g=n.success||BC(r),y=n.warning||UC(r);function v(x){return Lt.getContrastRatio(x,Gf.text.primary)>=o?Gf.text.primary:av.text.primary}const S=({color:x,name:_,mainShade:T=500,lightShade:E=300,darkShade:O=700})=>{if(x=ee({},x),!x.main&&x[T]&&(x.main=x[T]),!x.hasOwnProperty("main"))throw new Error(jl(11,_?` (${_})`:"",T));if(typeof x.main!="string")throw new Error(jl(12,_?` (${_})`:"",JSON.stringify(x.main)));return rv(x,"light",E,l),rv(x,"dark",O,l),x.contrastText||(x.contrastText=v(x.main)),x},j={dark:Gf,light:av};return Un(ee({common:ee({},Ol),mode:r,primary:S({color:c,name:"primary"}),secondary:S({color:f,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:S({color:p,name:"error"}),warning:S({color:y,name:"warning"}),info:S({color:h,name:"info"}),success:S({color:g,name:"success"}),grey:AC,contrastThreshold:o,getContrastText:v,augmentColor:S,tonalOffset:l},j[r]),s)}const HC=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];function qC(n){return Math.round(n*1e5)/1e5}const iv={textTransform:"uppercase"},lv='"Roboto", "Helvetica", "Arial", sans-serif';function PC(n,r){const o=typeof r=="function"?r(n):r,{fontFamily:l=lv,fontSize:s=14,fontWeightLight:c=300,fontWeightRegular:f=400,fontWeightMedium:p=500,fontWeightBold:h=700,htmlFontSize:g=16,allVariants:y,pxToRem:v}=o,S=$e(o,HC),j=s/14,w=v||(T=>`${T/g*j}rem`),x=(T,E,O,A,N)=>ee({fontFamily:l,fontWeight:T,fontSize:w(E),lineHeight:O},l===lv?{letterSpacing:`${qC(A/E)}em`}:{},N,y),_={h1:x(c,96,1.167,-1.5),h2:x(c,60,1.2,-.5),h3:x(f,48,1.167,0),h4:x(f,34,1.235,.25),h5:x(f,24,1.334,0),h6:x(p,20,1.6,.15),subtitle1:x(f,16,1.75,.15),subtitle2:x(p,14,1.57,.1),body1:x(f,16,1.5,.15),body2:x(f,14,1.43,.15),button:x(p,14,1.75,.4,iv),caption:x(f,12,1.66,.4),overline:x(f,12,2.66,1,iv),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return Un(ee({htmlFontSize:g,pxToRem:w,fontFamily:l,fontSize:s,fontWeightLight:c,fontWeightRegular:f,fontWeightMedium:p,fontWeightBold:h},_),S,{clone:!1})}const YC=.2,GC=.14,VC=.12;function We(...n){return[`${n[0]}px ${n[1]}px ${n[2]}px ${n[3]}px rgba(0,0,0,${YC})`,`${n[4]}px ${n[5]}px ${n[6]}px ${n[7]}px rgba(0,0,0,${GC})`,`${n[8]}px ${n[9]}px ${n[10]}px ${n[11]}px rgba(0,0,0,${VC})`].join(",")}const XC=["none",We(0,2,1,-1,0,1,1,0,0,1,3,0),We(0,3,1,-2,0,2,2,0,0,1,5,0),We(0,3,3,-2,0,3,4,0,0,1,8,0),We(0,2,4,-1,0,4,5,0,0,1,10,0),We(0,3,5,-1,0,5,8,0,0,1,14,0),We(0,3,5,-1,0,6,10,0,0,1,18,0),We(0,4,5,-2,0,7,10,1,0,2,16,1),We(0,5,5,-3,0,8,10,1,0,3,14,2),We(0,5,6,-3,0,9,12,1,0,3,16,2),We(0,6,6,-3,0,10,14,1,0,4,18,3),We(0,6,7,-4,0,11,15,1,0,4,20,3),We(0,7,8,-4,0,12,17,2,0,5,22,4),We(0,7,8,-4,0,13,19,2,0,5,24,4),We(0,7,9,-4,0,14,21,2,0,5,26,4),We(0,8,9,-5,0,15,22,2,0,6,28,5),We(0,8,10,-5,0,16,24,2,0,6,30,5),We(0,8,11,-5,0,17,26,2,0,6,32,5),We(0,9,11,-5,0,18,28,2,0,7,34,6),We(0,9,12,-6,0,19,29,2,0,7,36,6),We(0,10,13,-6,0,20,31,3,0,8,38,7),We(0,10,13,-6,0,21,33,3,0,8,40,7),We(0,10,14,-6,0,22,35,3,0,8,42,7),We(0,11,14,-7,0,23,36,3,0,9,44,8),We(0,11,15,-7,0,24,38,3,0,9,46,8)],FC=["duration","easing","delay"],KC={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},QC={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function ov(n){return`${Math.round(n)}ms`}function ZC(n){if(!n)return 0;const r=n/36;return Math.round((4+15*r**.25+r/5)*10)}function IC(n){const r=ee({},KC,n.easing),o=ee({},QC,n.duration);return ee({getAutoHeightDuration:ZC,create:(s=["all"],c={})=>{const{duration:f=o.standard,easing:p=r.easeInOut,delay:h=0}=c;return $e(c,FC),(Array.isArray(s)?s:[s]).map(g=>`${g} ${typeof f=="string"?f:ov(f)} ${p} ${typeof h=="string"?h:ov(h)}`).join(",")}},n,{easing:r,duration:o})}const WC={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},JC=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function zd(n={},...r){const{mixins:o={},palette:l={},transitions:s={},typography:c={}}=n,f=$e(n,JC);if(n.vars&&n.generateCssVars===void 0)throw new Error(jl(18));const p=$C(l),h=kd(n);let g=Un(h,{mixins:_C(h.breakpoints,o),palette:p,shadows:XC.slice(),typography:PC(p,c),transitions:IC(s),zIndex:ee({},WC)});return g=Un(g,f),g=r.reduce((y,v)=>Un(y,v),g),g.unstable_sxConfig=ee({},Ul,f==null?void 0:f.unstable_sxConfig),g.unstable_sx=function(v){return $l({sx:v,theme:this})},g}const Py=zd(),Nl="$$material";function eR(n){return n!=="ownerState"&&n!=="theme"&&n!=="sx"&&n!=="as"}const Ld=n=>eR(n)&&n!=="classes",ct=jC({themeId:Nl,defaultTheme:Py,rootShouldForwardProp:Ld}),Yy=R.createContext(void 0);function tR({value:n,children:r}){return m.jsx(Yy.Provider,{value:n,children:r})}function nR(n){const{theme:r,name:o,props:l}=n;if(!r||!r.components||!r.components[o])return l;const s=r.components[o];return s.defaultProps?Tl(s.defaultProps,l):!s.styleOverrides&&!s.variants?Tl(s,l):l}function aR({props:n,name:r}){const o=R.useContext(Yy);return nR({props:n,name:r,theme:{components:o}})}function Xt(n){return aR(n)}function sd(n,r){typeof n=="function"?n(r):n&&(n.current=r)}function la(...n){return R.useMemo(()=>n.every(r=>r==null)?null:r=>{n.forEach(o=>{sd(o,r)})},n)}const _l=typeof window<"u"?R.useLayoutEffect:R.useEffect;function ii(n){const r=R.useRef(n);return _l(()=>{r.current=n}),R.useRef((...o)=>(0,r.current)(...o)).current}const sv={};function rR(n,r){const o=R.useRef(sv);return o.current===sv&&(o.current=n(r)),o}const iR=[];function lR(n){R.useEffect(n,iR)}class $s{constructor(){this.currentId=null,this.clear=()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)},this.disposeEffect=()=>this.clear}static create(){return new $s}start(r,o){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,o()},r)}}function oR(){const n=rR($s.create).current;return lR(n.disposeEffect),n}let Hs=!0,ud=!1;const sR=new $s,uR={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function cR(n){const{type:r,tagName:o}=n;return!!(o==="INPUT"&&uR[r]&&!n.readOnly||o==="TEXTAREA"&&!n.readOnly||n.isContentEditable)}function fR(n){n.metaKey||n.altKey||n.ctrlKey||(Hs=!0)}function Vf(){Hs=!1}function dR(){this.visibilityState==="hidden"&&ud&&(Hs=!0)}function pR(n){n.addEventListener("keydown",fR,!0),n.addEventListener("mousedown",Vf,!0),n.addEventListener("pointerdown",Vf,!0),n.addEventListener("touchstart",Vf,!0),n.addEventListener("visibilitychange",dR,!0)}function hR(n){const{target:r}=n;try{return r.matches(":focus-visible")}catch{}return Hs||cR(r)}function mR(){const n=R.useCallback(s=>{s!=null&&pR(s.ownerDocument)},[]),r=R.useRef(!1);function o(){return r.current?(ud=!0,sR.start(100,()=>{ud=!1}),r.current=!1,!0):!1}function l(s){return hR(s)?(r.current=!0,!0):!1}return{isFocusVisibleRef:r,onFocus:l,onBlur:o,ref:n}}function cd(n,r){return cd=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(o,l){return o.__proto__=l,o},cd(n,r)}function Gy(n,r){n.prototype=Object.create(r.prototype),n.prototype.constructor=n,cd(n,r)}const uv={disabled:!1},Ss=zt.createContext(null);var gR=function(r){return r.scrollTop},hl="unmounted",or="exited",sr="entering",ni="entered",fd="exiting",$n=function(n){Gy(r,n);function r(l,s){var c;c=n.call(this,l,s)||this;var f=s,p=f&&!f.isMounting?l.enter:l.appear,h;return c.appearStatus=null,l.in?p?(h=or,c.appearStatus=sr):h=ni:l.unmountOnExit||l.mountOnEnter?h=hl:h=or,c.state={status:h},c.nextCallback=null,c}r.getDerivedStateFromProps=function(s,c){var f=s.in;return f&&c.status===hl?{status:or}:null};var o=r.prototype;return o.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},o.componentDidUpdate=function(s){var c=null;if(s!==this.props){var f=this.state.status;this.props.in?f!==sr&&f!==ni&&(c=sr):(f===sr||f===ni)&&(c=fd)}this.updateStatus(!1,c)},o.componentWillUnmount=function(){this.cancelNextCallback()},o.getTimeouts=function(){var s=this.props.timeout,c,f,p;return c=f=p=s,s!=null&&typeof s!="number"&&(c=s.exit,f=s.enter,p=s.appear!==void 0?s.appear:f),{exit:c,enter:f,appear:p}},o.updateStatus=function(s,c){if(s===void 0&&(s=!1),c!==null)if(this.cancelNextCallback(),c===sr){if(this.props.unmountOnExit||this.props.mountOnEnter){var f=this.props.nodeRef?this.props.nodeRef.current:ns.findDOMNode(this);f&&gR(f)}this.performEnter(s)}else this.performExit();else this.props.unmountOnExit&&this.state.status===or&&this.setState({status:hl})},o.performEnter=function(s){var c=this,f=this.props.enter,p=this.context?this.context.isMounting:s,h=this.props.nodeRef?[p]:[ns.findDOMNode(this),p],g=h[0],y=h[1],v=this.getTimeouts(),S=p?v.appear:v.enter;if(!s&&!f||uv.disabled){this.safeSetState({status:ni},function(){c.props.onEntered(g)});return}this.props.onEnter(g,y),this.safeSetState({status:sr},function(){c.props.onEntering(g,y),c.onTransitionEnd(S,function(){c.safeSetState({status:ni},function(){c.props.onEntered(g,y)})})})},o.performExit=function(){var s=this,c=this.props.exit,f=this.getTimeouts(),p=this.props.nodeRef?void 0:ns.findDOMNode(this);if(!c||uv.disabled){this.safeSetState({status:or},function(){s.props.onExited(p)});return}this.props.onExit(p),this.safeSetState({status:fd},function(){s.props.onExiting(p),s.onTransitionEnd(f.exit,function(){s.safeSetState({status:or},function(){s.props.onExited(p)})})})},o.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},o.safeSetState=function(s,c){c=this.setNextCallback(c),this.setState(s,c)},o.setNextCallback=function(s){var c=this,f=!0;return this.nextCallback=function(p){f&&(f=!1,c.nextCallback=null,s(p))},this.nextCallback.cancel=function(){f=!1},this.nextCallback},o.onTransitionEnd=function(s,c){this.setNextCallback(c);var f=this.props.nodeRef?this.props.nodeRef.current:ns.findDOMNode(this),p=s==null&&!this.props.addEndListener;if(!f||p){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var h=this.props.nodeRef?[this.nextCallback]:[f,this.nextCallback],g=h[0],y=h[1];this.props.addEndListener(g,y)}s!=null&&setTimeout(this.nextCallback,s)},o.render=function(){var s=this.state.status;if(s===hl)return null;var c=this.props,f=c.children;c.in,c.mountOnEnter,c.unmountOnExit,c.appear,c.enter,c.exit,c.timeout,c.addEndListener,c.onEnter,c.onEntering,c.onEntered,c.onExit,c.onExiting,c.onExited,c.nodeRef;var p=$e(c,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]);return zt.createElement(Ss.Provider,{value:null},typeof f=="function"?f(s,p):zt.cloneElement(zt.Children.only(f),p))},r}(zt.Component);$n.contextType=Ss;$n.propTypes={};function ei(){}$n.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:ei,onEntering:ei,onEntered:ei,onExit:ei,onExiting:ei,onExited:ei};$n.UNMOUNTED=hl;$n.EXITED=or;$n.ENTERING=sr;$n.ENTERED=ni;$n.EXITING=fd;function vR(n){if(n===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}function Bd(n,r){var o=function(c){return r&&R.isValidElement(c)?r(c):c},l=Object.create(null);return n&&R.Children.map(n,function(s){return s}).forEach(function(s){l[s.key]=o(s)}),l}function yR(n,r){n=n||{},r=r||{};function o(y){return y in r?r[y]:n[y]}var l=Object.create(null),s=[];for(var c in n)c in r?s.length&&(l[c]=s,s=[]):s.push(c);var f,p={};for(var h in r){if(l[h])for(f=0;fp!=="theme"&&p!=="sx"&&p!=="as"})($l);return R.forwardRef(function(h,g){const y=Vy(o),v=Dd(h),{className:S,component:j="div"}=v,w=$e(v,RR);return m.jsx(c,ee({as:j,ref:g,className:ke(S,s?s(l):l),theme:r&&y[r]||y},w))})}function At(n,r,o="Mui"){const l={};return r.forEach(s=>{l[s]=Vt(n,s,o)}),l}function jR(n){const{theme:r,name:o,props:l}=n;return!r||!r.components||!r.components[o]||!r.components[o].defaultProps?l:Tl(r.components[o].defaultProps,l)}function OR(n,r,o,l,s){const[c,f]=R.useState(()=>s&&o?o(n).matches:l?l(n).matches:r);return _l(()=>{let p=!0;if(!o)return;const h=o(n),g=()=>{p&&f(h.matches)};return g(),h.addListener(g),()=>{p=!1,h.removeListener(g)}},[n,o]),c}const Xy=R.useSyncExternalStore;function NR(n,r,o,l,s){const c=R.useCallback(()=>r,[r]),f=R.useMemo(()=>{if(s&&o)return()=>o(n).matches;if(l!==null){const{matches:y}=l(n);return()=>y}return c},[c,n,l,s,o]),[p,h]=R.useMemo(()=>{if(o===null)return[c,()=>()=>{}];const y=o(n);return[()=>y.matches,v=>(y.addListener(v),()=>{y.removeListener(v)})]},[c,o,n]);return Xy(h,p,f)}function _R(n,r={}){const o=$d(),l=typeof window<"u"&&typeof window.matchMedia<"u",{defaultMatches:s=!1,matchMedia:c=l?window.matchMedia:null,ssrMatchMedia:f=null,noSsr:p=!1}=jR({name:"MuiUseMediaQuery",props:r,theme:o});let h=typeof n=="function"?n(o):n;return h=h.replace(/^@media( ?)/m,""),(Xy!==void 0?NR:OR)(h,s,c,f,p)}function cv(...n){return n.reduce((r,o)=>o==null?r:function(...s){r.apply(this,s),o.apply(this,s)},()=>{})}function AR(n,r=166){let o;function l(...s){const c=()=>{n.apply(this,s)};clearTimeout(o),o=setTimeout(c,r)}return l.clear=()=>{clearTimeout(o)},l}function MR(n,r){var o,l;return R.isValidElement(n)&&r.indexOf((o=n.type.muiName)!=null?o:(l=n.type)==null||(l=l._payload)==null||(l=l.value)==null?void 0:l.muiName)!==-1}function Da(n){return n&&n.ownerDocument||document}function Hl(n){return Da(n).defaultView||window}function kR(n){const r=n.documentElement.clientWidth;return Math.abs(window.innerWidth-r)}function dd(n){return typeof n=="string"}function DR(n,r,o){return n===void 0||dd(n)?r:ee({},r,{ownerState:ee({},r.ownerState,o)})}function Fy(n,r=[]){if(n===void 0)return{};const o={};return Object.keys(n).filter(l=>l.match(/^on[A-Z]/)&&typeof n[l]=="function"&&!r.includes(l)).forEach(l=>{o[l]=n[l]}),o}function fv(n){if(n===void 0)return{};const r={};return Object.keys(n).filter(o=>!(o.match(/^on[A-Z]/)&&typeof n[o]=="function")).forEach(o=>{r[o]=n[o]}),r}function zR(n){const{getSlotProps:r,additionalProps:o,externalSlotProps:l,externalForwardedProps:s,className:c}=n;if(!r){const j=ke(o==null?void 0:o.className,c,s==null?void 0:s.className,l==null?void 0:l.className),w=ee({},o==null?void 0:o.style,s==null?void 0:s.style,l==null?void 0:l.style),x=ee({},o,s,l);return j.length>0&&(x.className=j),Object.keys(w).length>0&&(x.style=w),{props:x,internalRef:void 0}}const f=Fy(ee({},s,l)),p=fv(l),h=fv(s),g=r(f),y=ke(g==null?void 0:g.className,o==null?void 0:o.className,c,s==null?void 0:s.className,l==null?void 0:l.className),v=ee({},g==null?void 0:g.style,o==null?void 0:o.style,s==null?void 0:s.style,l==null?void 0:l.style),S=ee({},g,o,h,p);return y.length>0&&(S.className=y),Object.keys(v).length>0&&(S.style=v),{props:S,internalRef:g.ref}}function LR(n,r,o){return typeof n=="function"?n(r,o):n}const BR=["elementType","externalSlotProps","ownerState","skipResolvingSlotProps"];function dv(n){var r;const{elementType:o,externalSlotProps:l,ownerState:s,skipResolvingSlotProps:c=!1}=n,f=$e(n,BR),p=c?{}:LR(l,s),{props:h,internalRef:g}=zR(ee({},f,{externalSlotProps:p})),y=la(g,p==null?void 0:p.ref,(r=n.additionalProps)==null?void 0:r.ref);return DR(o,ee({},h,{ref:y}),s)}function qs(n){if(parseInt(R.version,10)>=19){var r;return(n==null||(r=n.props)==null?void 0:r.ref)||null}return(n==null?void 0:n.ref)||null}const Ky=R.createContext(null);function Qy(){return R.useContext(Ky)}const UR=typeof Symbol=="function"&&Symbol.for,$R=UR?Symbol.for("mui.nested"):"__THEME_NESTED__";function HR(n,r){return typeof r=="function"?r(n):ee({},n,r)}function qR(n){const{children:r,theme:o}=n,l=Qy(),s=R.useMemo(()=>{const c=l===null?o:HR(l,o);return c!=null&&(c[$R]=l!==null),c},[o,l]);return m.jsx(Ky.Provider,{value:s,children:r})}const PR=["value"],Zy=R.createContext();function YR(n){let{value:r}=n,o=$e(n,PR);return m.jsx(Zy.Provider,ee({value:r??!0},o))}const GR=()=>{const n=R.useContext(Zy);return n??!1},pv={};function hv(n,r,o,l=!1){return R.useMemo(()=>{const s=n&&r[n]||r;if(typeof o=="function"){const c=o(s),f=n?ee({},r,{[n]:c}):c;return l?()=>f:f}return n?ee({},r,{[n]:o}):ee({},r,o)},[n,r,o,l])}function VR(n){const{children:r,theme:o,themeId:l}=n,s=$d(pv),c=Qy()||pv,f=hv(l,s,o),p=hv(l,c,o,!0),h=f.direction==="rtl";return m.jsx(qR,{theme:p,children:m.jsx(hn.Provider,{value:f,children:m.jsx(YR,{value:h,children:m.jsx(tR,{value:f==null?void 0:f.components,children:r})})})})}function XR(n){const{className:r,classes:o,pulsate:l=!1,rippleX:s,rippleY:c,rippleSize:f,in:p,onExited:h,timeout:g}=n,[y,v]=R.useState(!1),S=ke(r,o.ripple,o.rippleVisible,l&&o.ripplePulsate),j={width:f,height:f,top:-(f/2)+c,left:-(f/2)+s},w=ke(o.child,y&&o.childLeaving,l&&o.childPulsate);return!p&&!y&&v(!0),R.useEffect(()=>{if(!p&&h!=null){const x=setTimeout(h,g);return()=>{clearTimeout(x)}}},[h,p,g]),m.jsx("span",{className:S,style:j,children:m.jsx("span",{className:w})})}const dn=At("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),FR=["center","classes","className"];let Ps=n=>n,mv,gv,vv,yv;const pd=550,KR=80,QR=Dl(mv||(mv=Ps`
- 0% {
- transform: scale(0);
- opacity: 0.1;
- }
-
- 100% {
- transform: scale(1);
- opacity: 0.3;
- }
-`)),ZR=Dl(gv||(gv=Ps`
- 0% {
- opacity: 1;
- }
-
- 100% {
- opacity: 0;
- }
-`)),IR=Dl(vv||(vv=Ps`
- 0% {
- transform: scale(1);
- }
-
- 50% {
- transform: scale(0.92);
- }
-
- 100% {
- transform: scale(1);
- }
-`)),WR=ct("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),JR=ct(XR,{name:"MuiTouchRipple",slot:"Ripple"})(yv||(yv=Ps`
- opacity: 0;
- position: absolute;
-
- &.${0} {
- opacity: 0.3;
- transform: scale(1);
- animation-name: ${0};
- animation-duration: ${0}ms;
- animation-timing-function: ${0};
- }
-
- &.${0} {
- animation-duration: ${0}ms;
- }
-
- & .${0} {
- opacity: 1;
- display: block;
- width: 100%;
- height: 100%;
- border-radius: 50%;
- background-color: currentColor;
- }
-
- & .${0} {
- opacity: 0;
- animation-name: ${0};
- animation-duration: ${0}ms;
- animation-timing-function: ${0};
- }
-
- & .${0} {
- position: absolute;
- /* @noflip */
- left: 0px;
- top: 0;
- animation-name: ${0};
- animation-duration: 2500ms;
- animation-timing-function: ${0};
- animation-iteration-count: infinite;
- animation-delay: 200ms;
- }
-`),dn.rippleVisible,QR,pd,({theme:n})=>n.transitions.easing.easeInOut,dn.ripplePulsate,({theme:n})=>n.transitions.duration.shorter,dn.child,dn.childLeaving,ZR,pd,({theme:n})=>n.transitions.easing.easeInOut,dn.childPulsate,IR,({theme:n})=>n.transitions.easing.easeInOut),eT=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiTouchRipple"}),{center:s=!1,classes:c={},className:f}=l,p=$e(l,FR),[h,g]=R.useState([]),y=R.useRef(0),v=R.useRef(null);R.useEffect(()=>{v.current&&(v.current(),v.current=null)},[h]);const S=R.useRef(!1),j=oR(),w=R.useRef(null),x=R.useRef(null),_=R.useCallback(A=>{const{pulsate:N,rippleX:V,rippleY:M,rippleSize:C,cb:L}=A;g(D=>[...D,m.jsx(JR,{classes:{ripple:ke(c.ripple,dn.ripple),rippleVisible:ke(c.rippleVisible,dn.rippleVisible),ripplePulsate:ke(c.ripplePulsate,dn.ripplePulsate),child:ke(c.child,dn.child),childLeaving:ke(c.childLeaving,dn.childLeaving),childPulsate:ke(c.childPulsate,dn.childPulsate)},timeout:pd,pulsate:N,rippleX:V,rippleY:M,rippleSize:C},y.current)]),y.current+=1,v.current=L},[c]),T=R.useCallback((A={},N={},V=()=>{})=>{const{pulsate:M=!1,center:C=s||N.pulsate,fakeElement:L=!1}=N;if((A==null?void 0:A.type)==="mousedown"&&S.current){S.current=!1;return}(A==null?void 0:A.type)==="touchstart"&&(S.current=!0);const D=L?null:x.current,z=D?D.getBoundingClientRect():{width:0,height:0,left:0,top:0};let Y,K,ie;if(C||A===void 0||A.clientX===0&&A.clientY===0||!A.clientX&&!A.touches)Y=Math.round(z.width/2),K=Math.round(z.height/2);else{const{clientX:le,clientY:Z}=A.touches&&A.touches.length>0?A.touches[0]:A;Y=Math.round(le-z.left),K=Math.round(Z-z.top)}if(C)ie=Math.sqrt((2*z.width**2+z.height**2)/3),ie%2===0&&(ie+=1);else{const le=Math.max(Math.abs((D?D.clientWidth:0)-Y),Y)*2+2,Z=Math.max(Math.abs((D?D.clientHeight:0)-K),K)*2+2;ie=Math.sqrt(le**2+Z**2)}A!=null&&A.touches?w.current===null&&(w.current=()=>{_({pulsate:M,rippleX:Y,rippleY:K,rippleSize:ie,cb:V})},j.start(KR,()=>{w.current&&(w.current(),w.current=null)})):_({pulsate:M,rippleX:Y,rippleY:K,rippleSize:ie,cb:V})},[s,_,j]),E=R.useCallback(()=>{T({},{pulsate:!0})},[T]),O=R.useCallback((A,N)=>{if(j.clear(),(A==null?void 0:A.type)==="touchend"&&w.current){w.current(),w.current=null,j.start(0,()=>{O(A,N)});return}w.current=null,g(V=>V.length>0?V.slice(1):V),v.current=N},[j]);return R.useImperativeHandle(o,()=>({pulsate:E,start:T,stop:O}),[E,T,O]),m.jsx(WR,ee({className:ke(dn.root,c.root,f),ref:x},p,{children:m.jsx(Ud,{component:null,exit:!0,children:h})}))});function tT(n){return Vt("MuiButtonBase",n)}const nT=At("MuiButtonBase",["root","disabled","focusVisible"]),aT=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],rT=n=>{const{disabled:r,focusVisible:o,focusVisibleClassName:l,classes:s}=n,f=Wt({root:["root",r&&"disabled",o&&"focusVisible"]},tT,s);return o&&l&&(f.root+=` ${l}`),f},iT=ct("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(n,r)=>r.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${nT.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),Hd=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiButtonBase"}),{action:s,centerRipple:c=!1,children:f,className:p,component:h="button",disabled:g=!1,disableRipple:y=!1,disableTouchRipple:v=!1,focusRipple:S=!1,LinkComponent:j="a",onBlur:w,onClick:x,onContextMenu:_,onDragLeave:T,onFocus:E,onFocusVisible:O,onKeyDown:A,onKeyUp:N,onMouseDown:V,onMouseLeave:M,onMouseUp:C,onTouchEnd:L,onTouchMove:D,onTouchStart:z,tabIndex:Y=0,TouchRippleProps:K,touchRippleRef:ie,type:le}=l,Z=$e(l,aT),oe=R.useRef(null),ne=R.useRef(null),pe=la(ne,ie),{isFocusVisibleRef:U,onFocus:re,onBlur:P,ref:Q}=mR(),[J,se]=R.useState(!1);g&&J&&se(!1),R.useImperativeHandle(s,()=>({focusVisible:()=>{se(!0),oe.current.focus()}}),[]);const[H,fe]=R.useState(!1);R.useEffect(()=>{fe(!0)},[]);const B=H&&!y&&!g;R.useEffect(()=>{J&&S&&!y&&H&&ne.current.pulsate()},[y,S,J,H]);function ae(Re,ql,Ys=v){return ii(ua=>(ql&&ql(ua),!Ys&&ne.current&&ne.current[Re](ua),!0))}const he=ae("start",V),ge=ae("stop",_),de=ae("stop",T),Ee=ae("stop",C),_e=ae("stop",Re=>{J&&Re.preventDefault(),M&&M(Re)}),we=ae("start",z),Qe=ae("stop",L),je=ae("stop",D),et=ae("stop",Re=>{P(Re),U.current===!1&&se(!1),w&&w(Re)},!1),vn=ii(Re=>{oe.current||(oe.current=Re.currentTarget),re(Re),U.current===!0&&(se(!0),O&&O(Re)),E&&E(Re)}),Fe=()=>{const Re=oe.current;return h&&h!=="button"&&!(Re.tagName==="A"&&Re.href)},On=R.useRef(!1),Hn=ii(Re=>{S&&!On.current&&J&&ne.current&&Re.key===" "&&(On.current=!0,ne.current.stop(Re,()=>{ne.current.start(Re)})),Re.target===Re.currentTarget&&Fe()&&Re.key===" "&&Re.preventDefault(),A&&A(Re),Re.target===Re.currentTarget&&Fe()&&Re.key==="Enter"&&!g&&(Re.preventDefault(),x&&x(Re))}),Ze=ii(Re=>{S&&Re.key===" "&&ne.current&&J&&!Re.defaultPrevented&&(On.current=!1,ne.current.stop(Re,()=>{ne.current.pulsate(Re)})),N&&N(Re),x&&Re.target===Re.currentTarget&&Fe()&&Re.key===" "&&!Re.defaultPrevented&&x(Re)});let be=h;be==="button"&&(Z.href||Z.to)&&(be=j);const De={};be==="button"?(De.type=le===void 0?"button":le,De.disabled=g):(!Z.href&&!Z.to&&(De.role="button"),g&&(De["aria-disabled"]=g));const sa=la(o,Q,oe),yn=ee({},l,{centerRipple:c,component:h,disabled:g,disableRipple:y,disableTouchRipple:v,focusRipple:S,tabIndex:Y,focusVisible:J}),Jt=rT(yn);return m.jsxs(iT,ee({as:be,className:ke(Jt.root,p),ownerState:yn,onBlur:et,onClick:x,onContextMenu:ge,onFocus:vn,onKeyDown:Hn,onKeyUp:Ze,onMouseDown:he,onMouseLeave:_e,onMouseUp:Ee,onDragLeave:de,onTouchEnd:Qe,onTouchMove:je,onTouchStart:we,ref:sa,tabIndex:g?-1:Y,type:le},De,Z,{children:[f,B?m.jsx(eT,ee({ref:pe,center:c},K)):null]}))});function lT(n){return Vt("MuiButton",n)}const os=At("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","colorPrimary","colorSecondary","colorSuccess","colorError","colorInfo","colorWarning","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","icon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),oT=R.createContext({}),sT=R.createContext(void 0),uT=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],cT=n=>{const{color:r,disableElevation:o,fullWidth:l,size:s,variant:c,classes:f}=n,p={root:["root",c,`${c}${qe(r)}`,`size${qe(s)}`,`${c}Size${qe(s)}`,`color${qe(r)}`,o&&"disableElevation",l&&"fullWidth"],label:["label"],startIcon:["icon","startIcon",`iconSize${qe(s)}`],endIcon:["icon","endIcon",`iconSize${qe(s)}`]},h=Wt(p,lT,f);return ee({},f,h)},Iy=n=>ee({},n.size==="small"&&{"& > *:nth-of-type(1)":{fontSize:18}},n.size==="medium"&&{"& > *:nth-of-type(1)":{fontSize:20}},n.size==="large"&&{"& > *:nth-of-type(1)":{fontSize:22}}),fT=ct(Hd,{shouldForwardProp:n=>Ld(n)||n==="classes",name:"MuiButton",slot:"Root",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.root,r[o.variant],r[`${o.variant}${qe(o.color)}`],r[`size${qe(o.size)}`],r[`${o.variant}Size${qe(o.size)}`],o.color==="inherit"&&r.colorInherit,o.disableElevation&&r.disableElevation,o.fullWidth&&r.fullWidth]}})(({theme:n,ownerState:r})=>{var o,l;const s=n.palette.mode==="light"?n.palette.grey[300]:n.palette.grey[800],c=n.palette.mode==="light"?n.palette.grey.A100:n.palette.grey[700];return ee({},n.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:(n.vars||n).shape.borderRadius,transition:n.transitions.create(["background-color","box-shadow","border-color","color"],{duration:n.transitions.duration.short}),"&:hover":ee({textDecoration:"none",backgroundColor:n.vars?`rgba(${n.vars.palette.text.primaryChannel} / ${n.vars.palette.action.hoverOpacity})`:Lt.alpha(n.palette.text.primary,n.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},r.variant==="text"&&r.color!=="inherit"&&{backgroundColor:n.vars?`rgba(${n.vars.palette[r.color].mainChannel} / ${n.vars.palette.action.hoverOpacity})`:Lt.alpha(n.palette[r.color].main,n.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},r.variant==="outlined"&&r.color!=="inherit"&&{border:`1px solid ${(n.vars||n).palette[r.color].main}`,backgroundColor:n.vars?`rgba(${n.vars.palette[r.color].mainChannel} / ${n.vars.palette.action.hoverOpacity})`:Lt.alpha(n.palette[r.color].main,n.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},r.variant==="contained"&&{backgroundColor:n.vars?n.vars.palette.Button.inheritContainedHoverBg:c,boxShadow:(n.vars||n).shadows[4],"@media (hover: none)":{boxShadow:(n.vars||n).shadows[2],backgroundColor:(n.vars||n).palette.grey[300]}},r.variant==="contained"&&r.color!=="inherit"&&{backgroundColor:(n.vars||n).palette[r.color].dark,"@media (hover: none)":{backgroundColor:(n.vars||n).palette[r.color].main}}),"&:active":ee({},r.variant==="contained"&&{boxShadow:(n.vars||n).shadows[8]}),[`&.${os.focusVisible}`]:ee({},r.variant==="contained"&&{boxShadow:(n.vars||n).shadows[6]}),[`&.${os.disabled}`]:ee({color:(n.vars||n).palette.action.disabled},r.variant==="outlined"&&{border:`1px solid ${(n.vars||n).palette.action.disabledBackground}`},r.variant==="contained"&&{color:(n.vars||n).palette.action.disabled,boxShadow:(n.vars||n).shadows[0],backgroundColor:(n.vars||n).palette.action.disabledBackground})},r.variant==="text"&&{padding:"6px 8px"},r.variant==="text"&&r.color!=="inherit"&&{color:(n.vars||n).palette[r.color].main},r.variant==="outlined"&&{padding:"5px 15px",border:"1px solid currentColor"},r.variant==="outlined"&&r.color!=="inherit"&&{color:(n.vars||n).palette[r.color].main,border:n.vars?`1px solid rgba(${n.vars.palette[r.color].mainChannel} / 0.5)`:`1px solid ${Lt.alpha(n.palette[r.color].main,.5)}`},r.variant==="contained"&&{color:n.vars?n.vars.palette.text.primary:(o=(l=n.palette).getContrastText)==null?void 0:o.call(l,n.palette.grey[300]),backgroundColor:n.vars?n.vars.palette.Button.inheritContainedBg:s,boxShadow:(n.vars||n).shadows[2]},r.variant==="contained"&&r.color!=="inherit"&&{color:(n.vars||n).palette[r.color].contrastText,backgroundColor:(n.vars||n).palette[r.color].main},r.color==="inherit"&&{color:"inherit",borderColor:"currentColor"},r.size==="small"&&r.variant==="text"&&{padding:"4px 5px",fontSize:n.typography.pxToRem(13)},r.size==="large"&&r.variant==="text"&&{padding:"8px 11px",fontSize:n.typography.pxToRem(15)},r.size==="small"&&r.variant==="outlined"&&{padding:"3px 9px",fontSize:n.typography.pxToRem(13)},r.size==="large"&&r.variant==="outlined"&&{padding:"7px 21px",fontSize:n.typography.pxToRem(15)},r.size==="small"&&r.variant==="contained"&&{padding:"4px 10px",fontSize:n.typography.pxToRem(13)},r.size==="large"&&r.variant==="contained"&&{padding:"8px 22px",fontSize:n.typography.pxToRem(15)},r.fullWidth&&{width:"100%"})},({ownerState:n})=>n.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${os.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${os.disabled}`]:{boxShadow:"none"}}),dT=ct("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.startIcon,r[`iconSize${qe(o.size)}`]]}})(({ownerState:n})=>ee({display:"inherit",marginRight:8,marginLeft:-4},n.size==="small"&&{marginLeft:-2},Iy(n))),pT=ct("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.endIcon,r[`iconSize${qe(o.size)}`]]}})(({ownerState:n})=>ee({display:"inherit",marginRight:-4,marginLeft:8},n.size==="small"&&{marginRight:-2},Iy(n))),Ba=R.forwardRef(function(r,o){const l=R.useContext(oT),s=R.useContext(sT),c=Tl(l,r),f=Xt({props:c,name:"MuiButton"}),{children:p,color:h="primary",component:g="button",className:y,disabled:v=!1,disableElevation:S=!1,disableFocusRipple:j=!1,endIcon:w,focusVisibleClassName:x,fullWidth:_=!1,size:T="medium",startIcon:E,type:O,variant:A="text"}=f,N=$e(f,uT),V=ee({},f,{color:h,component:g,disabled:v,disableElevation:S,disableFocusRipple:j,fullWidth:_,size:T,type:O,variant:A}),M=cT(V),C=E&&m.jsx(dT,{className:M.startIcon,ownerState:V,children:E}),L=w&&m.jsx(pT,{className:M.endIcon,ownerState:V,children:w}),D=s||"";return m.jsxs(fT,ee({ownerState:V,className:ke(l.className,M.root,y,D),component:g,disabled:v,focusRipple:!j,focusVisibleClassName:ke(M.focusVisible,x),ref:o,type:O},N,{classes:M,children:[C,p,L]}))}),hT=()=>{const n=window.location.host.includes("yalelabs.io")?"https://yalelabs.io":"http://localhost:4000",[r,o]=R.useState(window.location.origin);R.useEffect(()=>{const s=localStorage.getItem("logoutReturnPath");if(s){try{const c=new URL(s);o(s)}catch{const f=window.location.origin+(s.startsWith("/")?s:"/"+s);o(f)}localStorage.removeItem("logoutReturnPath")}},[]);const l=n+`/cas?redirect=${r}&error=${window.location.origin}/login-error`;return m.jsx(Ba,{variant:"contained",href:l,children:"Sign in With Yale CAS"})},mT=()=>{const{isLoading:n,isAuthenticated:r,user:o}=R.useContext(mn),l=()=>(o==null?void 0:o.userType)==="professor"?"/account":"/";return m.jsxs(gT,{children:[m.jsxs(vT,{children:[m.jsxs("div",{className:"flex items-center",children:[m.jsx("img",{src:"/assets/logos/paperclip.png",alt:"ylabs-logo",className:"mr-2 w-[3.5rem] h-[3rem] md:w-[6.33rem] md:h-[5.4rem] sm:w-[4.5rem] sm:h-[4rem] "}),m.jsx("img",{src:"/assets/logos/ylabs-blue.png",alt:"ylabs-logo",className:"w-[7rem] h-[3rem] md:w-[13.03rem] md:h-[5.4rem] sm:w-[9rem] sm:h-[4rem]"})]}),m.jsx(yT,{className:"mt-12",children:"A Yale Research Database"}),m.jsx(bT,{className:"mt-2",children:"Search through 1400+ Yale faculty listings across 60+ fields of study. Learn about professors who share your research interests and find potential research mentors."})]}),m.jsx(xT,{children:n?m.jsx(Ms,{color:"#66CCFF",size:10}):r?m.jsx(ml,{to:l(),replace:!0}):m.jsx(hT,{})})]})},gT=ra.div`
- width: 100%;
- background: #ffffff;
- display: flex;
- flex-direction: column;
- align-items: center;
- padding: 5% 20px;
- box-sizing: border-box;
-`,vT=ra.div`
- width: 100%;
- max-width: 600px;
- margin-top: 120px;
- display: flex;
- align-items: center;
- flex-direction: column;
- justify-content: top;
- text-align: center;
-
- @media (max-width: 768px) {
- padding: 0 15px;
- }
-`;ra.img`
- width: 320px;
- height: auto;
- max-width: 90%;
-
- @media (max-width: 768px) {
- width: 250px;
- }
-
- @media (max-width: 480px) {
- width: 200px;
- }
-`;const yT=ra.h1`
- color: #000000;
- font-size: 32px;
-
- @media (max-width: 768px) {
- font-size: 28px;
- margin-top: 20px !important;
- }
-
- @media (max-width: 480px) {
- font-size: 24px;
- }
-`,bT=ra.p`
- color: #000000;
- font-size: 20px;
-
- @media (max-width: 768px) {
- font-size: 18px;
- }
-
- @media (max-width: 480px) {
- font-size: 16px;
- }
-`,xT=ra.div`
- margin-top: 30px;
- width: 100%;
- max-width: 600px;
- display: flex;
- align-items: center;
- flex-direction: column;
- text-align: center;
-
- @media (max-width: 768px) {
- margin-top: 20px;
- }
-`,bv=({developer:n})=>n?m.jsxs("div",{children:[m.jsx("img",{src:n.image?n.image:"/assets/developers/no-user.png",alt:`${n.name} Profile Picture`,className:"aspect-square object-cover w-full rounded-lg mb-2",width:500,height:500}),m.jsx("h3",{className:"text-xl font-semibold",children:n.name}),m.jsx("p",{className:"text-gray-700",children:n.position}),m.jsx("p",{className:"text-gray-700 mb-1",children:n.location}),n.website&&m.jsx("a",{href:n.website,target:"_blank",rel:"noopener noreferrer",children:m.jsx("img",{src:"/assets/icons/website-icon.png",alt:`${n.name} Website`,width:20,height:20,className:"inline-block"})}),n.linkedin&&m.jsx("a",{href:n.linkedin,target:"_blank",rel:"noopener noreferrer",children:m.jsx("img",{src:"/assets/icons/linkedin-icon.png",alt:`${n.name} LinkedIn`,width:28,height:28,className:"inline-block"})}),n.github&&m.jsx("a",{href:n.github,target:"_blank",rel:"noopener noreferrer",children:m.jsx("img",{src:"/assets/icons/github-icon.png",alt:`${n.name} Website`,width:20,height:20,className:"inline-block"})})]}):null,ST=()=>m.jsxs("div",{className:"flex flex-col items-center p-8 min-h-screen mt-24",children:[m.jsxs("div",{className:"max-w-5xl text-center",children:[m.jsx("h1",{className:"text-4xl font-bold mb-7",children:"Welcome to Yale Labs! 🔬"}),m.jsxs("p",{className:"text-lg text-gray-700 mb-10 leading-relaxed",children:["A collaboration between the"," ",m.jsx("a",{href:"https://yalecomputersociety.org/",target:"_blank",rel:"noopener noreferrer",className:"text-blue-500",children:"Yale Computer Society"})," ","and the"," ",m.jsx("a",{href:"https://www.yura.yale.edu/",target:"_blank",rel:"noopener noreferrer",className:"text-blue-500",children:"Yale Undergraduate Research Association"}),", Yale Labs brings students a single, streamlined platform to browse research opportunities at Yale! With a mix of lab listings submitted by professors and scraped from the internet, our mission at Yale Labs is to make finding your next lab as stress-free as possible with all the information you need in one place."]}),m.jsx("h1",{className:"text-3xl font-bold mb-7",children:"Help us with our first release!"}),m.jsxs("p",{className:"text-lg text-gray-700 mb-10 leading-relaxed",children:["While we are working dilligently to get more up-to-date listings on the site, we are also working on changes to improve the browsing experience! As you look around the site, please let us know in the"," ",m.jsx("a",{href:"https://docs.google.com/forms/d/e/1FAIpQLSf2BE6MBulJHWXhDDp3y4Nixwe6EH0Oo9X1pTo976-KrJKv5g/viewform?usp=dialog",target:"_blank",rel:"noopener noreferrer",className:"text-blue-500",children:"feedback form"})," ","if there is anything that is broken, annoying, or that you would like to see added to the site."]}),m.jsx("a",{href:"https://yalecomputersociety.org/",target:"_blank",rel:"noopener noreferrer",children:m.jsx("img",{src:"/assets/icons/ycs-icon.png",alt:"y/cs Website",width:40,height:40,className:"inline-block mx-2"})}),m.jsx("a",{href:"https://www.yura.yale.edu/",target:"_blank",rel:"noopener noreferrer",children:m.jsx("img",{src:"/assets/icons/yura-icon.png",alt:"YURA Website",width:32,height:40,className:"inline-block mx-2"})}),m.jsx("a",{href:"https://github.com/YaleComputerSociety/ylabs",target:"_blank",rel:"noopener noreferrer",children:m.jsx("img",{src:"/assets/icons/github-icon.png",alt:"RDB Github",width:40,height:40,className:"inline-block mx-2"})})]}),m.jsxs("div",{className:"max-w-6xl text-center mt-16",children:[m.jsx("h2",{className:"text-3xl font-bold mb-10",children:"Meet our team"}),m.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-4 mb-16",children:wT.map(n=>m.jsx("div",{className:"bg-gray-50 p-3 rounded-lg shadow-md",children:m.jsx(bv,{developer:n})},n.name))}),m.jsx("h2",{className:"text-3xl font-bold mb-10",children:"RDB alumni"}),m.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-4",children:ET.map(n=>m.jsx("div",{className:"bg-gray-50 p-3 rounded-lg shadow-md",children:m.jsx(bv,{developer:n})},n.name))})]})]}),wT=[{name:"Ryan Fernandes",position:"Development Lead",image:"/assets/developers/RyanFernandes.jpeg",location:"Natick, MA",linkedin:"https://www.linkedin.com/in/ryan-fernandes-088109284/",github:"https://github.com/Ryfernandes"},{name:"Sebastian Gonzalez",image:"/assets/developers/SebastianGonzalez.jpeg",position:"Developer",location:"Montclair, NJ",github:"https://github.com/Seb-G0",linkedin:"https://www.linkedin.com/in/sebastian-ravi-gonzalez/"},{name:"Dohun Kim",position:"Developer",image:"/assets/developers/DohunKim.jpeg",location:"Anyang-si, South Korea",github:"https://github.com/rlaehgnss",linkedin:"https://www.linkedin.com/in/dohun-kim-848028251/"},{name:"Alan Zhong",image:"/assets/developers/AlanZhong.jpeg",position:"Developer",location:"Basking Ridge, NJ",github:"https://github.com/azh248",linkedin:"https://www.linkedin.com/in/azhong248/"},{name:"Quntao Zheng",image:"/assets/developers/QuntaoZheng.jpeg",position:"Developer",location:"New York, NY",github:"https://github.com/quntao-z",linkedin:"https://www.linkedin.com/in/quntao-zheng/"},{name:"Christian Phanhthourath",position:"Developer",image:"/assets/developers/ChristianPhanhthourath.jpeg",location:"Marietta, GA",github:"https://github.com/cphanhth",linkedin:"https://linkedin.com/in/christianphanhthourath"},{name:"Christina Xu",position:"Developer",image:"/assets/developers/ChristinaXu.jpeg",location:"Lincoln, Nebraska",github:"https://github.com/shadaxiong"}],ET=[{name:"Julian Lee",position:"RDB Founder",location:"New York, NY",github:"https://github.com/JulianLee123"},{name:"Miles Yamner",position:"Developer",location:"New York, NY"},{name:"Landon Hellman",position:"Developer",location:"Santa Barbara, CA"}],qd=({error:n})=>n?m.jsx("div",{className:"text-red-500 text-xs mt-1",children:n}):null,xv=({id:n,label:r,value:o,onChange:l,placeholder:s,error:c,onValidate:f})=>m.jsxs("div",{className:"mb-4",children:[m.jsx("label",{className:"block text-gray-700 text-sm font-bold mb-2",htmlFor:n,children:r}),m.jsx("input",{id:n,type:"text",value:o,onChange:p=>{l(p.target.value),f&&f(p.target.value)},placeholder:s,className:`shadow appearance-none border ${c?"border-red-500":""} rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline whitespace-nowrap overflow-x-auto`}),m.jsx(qd,{error:c})]}),CT=({id:n,label:r,value:o,onChange:l,placeholder:s,rows:c=10,error:f,onValidate:p})=>m.jsxs("div",{className:"mb-4",children:[m.jsx("label",{className:"block text-gray-700 text-sm font-bold mb-2",htmlFor:"description",children:r}),m.jsx("textarea",{id:n,value:o,onChange:h=>{l(h.target.value),p&&p(h.target.value)},placeholder:s,className:"shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline overflow-x-auto",rows:c}),m.jsx(qd,{error:f})]}),pl=({label:n,items:r,setItems:o,placeholder:l,bgColor:s,textColor:c,buttonColor:f,error:p,type:h="text",permanentValue:g,onValidate:y,infoText:v})=>{const S=R.useRef(null),[j,w]=R.useState(!1),x=E=>{if(E.key==="Enter"&&S.current&&S.current.value.trim()){E.preventDefault();const O=S.current.value.trim();if(!r.includes(O)&&(!g||O!==g)){const A=[...r,O];o(A),S.current.value="",y&&y(g?[...A,g]:A)}}},_=E=>{const O=[...r];O.splice(E,1),o(O),y&&y(g?[...O,g]:O)},T=()=>{const E=[];return g&&E.push(m.jsxs("span",{className:`${s} ${c} px-2 py-1 rounded text-sm flex items-center`,children:[m.jsx("span",{className:"whitespace-nowrap",children:g}),m.jsxs("div",{className:"ml-2 w-4 h-4 relative",onMouseEnter:()=>w(!0),onMouseLeave:()=>w(!1),children:[m.jsx("div",{className:"rounded-full border border-current flex items-center justify-center w-full h-full cursor-pointer",children:m.jsx("span",{className:"text-xs",children:"?"})}),j&&m.jsx("div",{className:"absolute left-6 -top-1 bg-gray-800 text-white text-xs rounded py-1 px-2 whitespace-nowrap z-10",children:"Creator"})]})]},"permanent")),r.forEach((O,A)=>{g!==O&&E.push(m.jsxs("span",{className:`${s} ${c} px-2 py-1 rounded text-sm flex items-center`,children:[m.jsx("span",{className:"whitespace-nowrap",children:O}),m.jsx("button",{type:"button",onClick:()=>_(A),className:`ml-2 ${f}`,children:"×"})]},A))}),E};return m.jsxs("div",{className:"mb-4",children:[m.jsx("label",{className:"block text-gray-700 text-sm font-bold mb-2",children:n}),v&&m.jsx("div",{className:"text-xs text-gray-500 mb-2",children:v}),m.jsx("div",{className:"flex flex-wrap gap-2 mb-2 overflow-x-auto",children:T()}),m.jsx("div",{className:"flex",children:m.jsx("input",{type:h,ref:S,placeholder:l,className:"shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:ring-2 focus:ring-blue-500",onKeyDown:x})}),m.jsx("div",{className:"text-xs text-gray-500 mt-1",children:"Press Enter to add"}),m.jsx(qd,{error:p})]})},RT=({departments:n,availableDepartments:r,onAddDepartment:o,onRemoveDepartment:l})=>{const[s,c]=R.useState(!1),[f,p]=R.useState(""),[h,g]=R.useState(-1),y=R.useRef(null),v=R.useRef(null),S=r.filter(x=>x.toLowerCase().includes(f.toLowerCase()));R.useEffect(()=>{const x=_=>{y.current&&!y.current.contains(_.target)&&(c(!1),p(""))};return document.addEventListener("mousedown",x),()=>document.removeEventListener("mousedown",x)},[]);const j=x=>{switch(x.key){case"ArrowDown":x.preventDefault(),g(_=>__>0?_-1:0);break;case"Enter":x.preventDefault(),h>=0&&h{if(Object.keys(It).includes(x))switch(It[x]){case 0:return"bg-blue-200";case 1:return"bg-green-200";case 2:return"bg-yellow-200";case 3:return"bg-red-200";case 4:return"bg-purple-200";case 5:return"bg-pink-200";case 6:return"bg-teal-200";case 7:return"bg-orange-200";default:return"bg-gray-100"}return"bg-gray-100"};return m.jsxs("div",{className:"mb-4",ref:y,children:[m.jsx("label",{className:"block text-gray-700 text-sm font-bold mb-2",children:"⭐ Departments"}),m.jsxs("div",{className:"text-xs text-gray-500 mb-2",children:["Don't see your department? Let us know"," ",m.jsx("a",{href:"https://docs.google.com/forms/d/e/1FAIpQLSf2BE6MBulJHWXhDDp3y4Nixwe6EH0Oo9X1pTo976-KrJKv5g/viewform",target:"_blank",rel:"noopener noreferrer",className:"text-blue-500",children:"here"})]}),m.jsx("div",{className:"flex flex-wrap gap-2 mb-2 overflow-x-auto",children:n.map((x,_)=>m.jsxs("span",{className:`${w(x)} text-gray-900 px-2 py-1 rounded text-sm flex items-center`,children:[m.jsx("span",{className:"whitespace-nowrap",children:x}),m.jsx("button",{type:"button",onClick:()=>l(_),className:"ml-2 text-gray-500 hover:text-gray-700",children:"×"})]},_))}),m.jsxs("div",{className:"relative",children:[m.jsxs("div",{className:"relative",children:[m.jsx("input",{ref:v,type:"text",value:f,onClick:()=>c(!0),onChange:x=>{p(x.target.value),g(-1)},onKeyDown:j,onFocus:()=>c(!0),className:"shadow appearance-none border rounded w-full py-2 px-3 pr-10 text-gray-700 leading-tight focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:"Add departments..."}),m.jsx("div",{className:"absolute inset-y-0 right-0 flex items-center px-2 text-gray-700 cursor-pointer",onClick:()=>{s&&p(""),c(!s),!s&&v.current&&v.current.focus()},children:m.jsx("svg",{className:"fill-current h-4 w-4",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",children:m.jsx("path",{d:"M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z"})})})]}),s&&m.jsx("div",{className:"absolute w-full bg-white rounded-lg z-10 shadow-lg border overflow-hidden mt-1 max-h-[300px] md:max-h-[350px] border-gray-300",tabIndex:-1,children:m.jsx("ul",{className:"max-h-[350px] p-1 overflow-y-auto",tabIndex:-1,children:S.length>0?S.map((x,_)=>m.jsx("li",{onClick:()=>{o(x),p("")},className:`p-2 cursor-pointer ${h===_?"bg-blue-100":"hover:bg-gray-100"}`,tabIndex:-1,onMouseDown:T=>T.preventDefault(),children:x},_)):m.jsx("li",{className:"p-2 text-gray-500",tabIndex:-1,children:"No departments found"})})})]})]})},TT=({hiringStatus:n,setHiringStatus:r})=>{const[o,l]=R.useState(!1),[s,c]=R.useState(-1),f=R.useRef(null),p=R.useRef(null),h=[{value:-1,label:"Lab not seeking applicants"},{value:0,label:"Lab open to applicants"},{value:1,label:"Lab seeking applicants"}],g=v=>{r(v),l(!1),p.current&&p.current.blur()},y=v=>{switch(v.key){case"ArrowDown":v.preventDefault(),c(S=>SS>0?S-1:0);break;case"Enter":v.preventDefault(),s>=0&&s{l(!0)},onKeyDown:y,onFocus:()=>l(!0),onBlur:()=>{setTimeout(()=>{var v;(v=f.current)!=null&&v.contains(document.activeElement)||l(!1)},100)},className:"shadow appearance-none border rounded w-full py-2 px-3 pr-10 text-gray-700 leading-tight focus:outline-none focus:ring-2 focus:ring-blue-500 cursor-pointer"}),m.jsx("div",{className:"absolute inset-y-0 right-0 flex items-center px-2 text-gray-700 cursor-pointer",onClick:()=>{l(!o),!o&&p.current&&p.current.focus()},children:m.jsx("svg",{className:"fill-current h-4 w-4",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",children:m.jsx("path",{d:"M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z"})})})]}),o&&m.jsx("div",{className:"absolute left-0 right-0 bg-white rounded-lg z-10 shadow-lg border overflow-hidden mt-1 max-h-[350px] border-gray-300",tabIndex:-1,children:m.jsx("ul",{className:"max-h-[350px] overflow-y-auto",tabIndex:-1,children:h.map((v,S)=>m.jsxs("li",{onClick:()=>g(v.value),className:`p-2 cursor-pointer flex items-center justify-between ${s===S?"bg-blue-100":"hover:bg-gray-100"}`,tabIndex:-1,onMouseDown:j=>j.preventDefault(),children:[m.jsx("span",{children:v.label}),n===v.value&&m.jsx("svg",{className:"h-4 w-4 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:m.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M5 13l4 4L19 7"})})]},S))})})]})]})},Sv=n=>n.trim()?void 0:"Title is required",jT=n=>n.trim()?void 0:"Description is required",wv=n=>{if(!n)return;const r=parseInt(n,10),o=new Date().getFullYear();if(isNaN(r)||!Number.isInteger(r))return"Year must be a valid integer";if(r<1701)return"Yale wasn't established until 1701!";if(r>o)return"Year cannot be in the future";if(n.trim().includes(" "))return"Year cannot include spaces";if(r.toString()!=n.trim())return"Year cannot include non-numeric characters"},Ev=n=>n.length>0?void 0:"At least one professor is required",Cv=n=>{if(n.length===0)return"At least one email is required";for(const r of n)if(!r.includes("@")||!r.includes(".")||r.includes(" "))return`Invalid email format: ${r}`},Rv=n=>{if(n.length!==0){for(const r of n)if(!r.includes(".")||r.includes(" "))return`Invalid website format: ${r}`}},Tv=n=>{if(n.length>3)return"Maximum of 3 collaborators allowed";if(new Set(n).size!==n.length)return"Please remove duplicate collaborators";for(const o of n)if(!/^[a-zA-Z0-9]+$/.test(o))return`Invalid format for collaborator netid: ${o}`},OT=({listing:n,isCreated:r,onLoad:o,onCancel:l,onSave:s,onCreate:c})=>{const[f,p]=R.useState(n.title),[h,g]=R.useState([...n.professorNames]),[y,v]=R.useState(`${n.ownerFirstName} ${n.ownerLastName}`),[S,j]=R.useState([...n.departments]),[w,x]=R.useState([]),[_,T]=R.useState([...n.professorIds]),[E,O]=R.useState([...n.emails]),[A,N]=R.useState(n.ownerEmail),[V,M]=R.useState(n.websites?[...n.websites]:[]),[C,L]=R.useState(n.description),[D,z]=R.useState(n.keywords?[...n.keywords]:[]),[Y,K]=R.useState(n.established||""),[ie,le]=R.useState(n.hiringStatus),[Z,oe]=R.useState(n.archived),[ne,pe]=R.useState(!0),{user:U}=R.useContext(mn),re=U&&U.netId===n.ownerId,[P,Q]=R.useState({});R.useEffect(()=>{r?(x(H0.filter(B=>!S.includes(B)).sort()),pe(!1)):(pe(!0),Ct.get(`/listings/${n.id}`,{withCredentials:!0}).then(B=>{if(!B.data.listing){console.error(`Response, but no listing ${ae.id}:`,B.data),o(ae,!1);return}const ae=cr(B.data.listing);p(ae.title),g([...ae.professorNames]),v(`${ae.ownerFirstName} ${ae.ownerLastName}`),j([...ae.departments]),O([...ae.emails]),N(ae.ownerEmail),M(ae.websites?[...ae.websites]:[]),L(ae.description),z(ae.keywords?[...ae.keywords]:[]),K(ae.established||""),le(ae.hiringStatus),oe(ae.archived),o(ae,!0),x(H0.filter(he=>!ae.departments.includes(he)).sort()),pe(!1)}).catch(B=>{console.error(`Error fetching most recent listing ${n.id}:`,B),o(n,!1)}))},[]),R.useEffect(()=>{const B={...n,title:f,professorNames:h,departments:S,emails:E,websites:V,description:C,keywords:D,established:Y,hiringStatus:ie,archived:Z};o(B,!0)},[f,h,S,E,V,C,D,Y,ie,Z]);const J=B=>{B.preventDefault();const ae={title:Sv(f),description:jT(C),established:wv(Y),professorNames:Ev([y,...h]),professorIds:Tv(_),emails:Cv([A,...E]),websites:Rv(V)},he=Object.fromEntries(Object.entries(ae).filter(([ge,de])=>de!==void 0));if(Q(he),Object.keys(he).length===0){const ge={...n,title:f,professorIds:_,professorNames:h,departments:S,emails:E,websites:V,description:C,keywords:D,established:Y,hiringStatus:ie,archived:Z};r?Je({title:"Create Listing",text:"Are you sure you want to create this listing?",icon:"info",buttons:["Cancel","Create"]}).then(de=>{de&&c&&c(ge)}):Je({title:"Submit Form",text:"Are you sure you want to save these changes?",icon:"info",buttons:["Cancel","Save"]}).then(de=>{de&&s&&s(ge)})}else console.log("Validation errors:",he)},se=()=>{if(r)Je({title:"Delete Listing",text:"Are you sure you want to delete this listing? This action cannot be undone",icon:"warning",buttons:["Cancel","Delete"],dangerMode:!0}).then(B=>{B&&l&&l()});else{const B={...n};p(B.title),g([...B.professorNames]),v(`${B.ownerFirstName} ${B.ownerLastName}`),j([...B.departments]),O([...B.emails]),N(B.ownerEmail),M(B.websites?[...B.websites]:[]),L(B.description),z(B.keywords?[...B.keywords]:[]),K(B.established||""),le(B.hiringStatus),oe(B.archived),o({...B},!0),l&&l()}},H=B=>{j(ae=>[...ae,B]),x(ae=>ae.filter(he=>he!==B).sort())},fe=B=>{const ae=[...S],he=ae.splice(B,1)[0];j(ae),x(ge=>[...ge,he].sort())};return m.jsx("div",{className:"border border-gray-300 border-t-0 bg-white p-6 rounded-b-lg shadow-md relative",children:ne?m.jsx("div",{className:"flex flex-col justify-center items-center h-full",children:m.jsx(Ms,{color:"#66CCFF",size:6})}):m.jsxs("form",{onSubmit:J,children:[m.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 mb-16",children:[m.jsxs("div",{className:"col-span-1",children:[m.jsx(xv,{id:"title",label:"⭐ Listing Title",value:f,onChange:p,placeholder:"Add title",error:P.title,onValidate:B=>{P.title&&Q(ae=>({...ae,title:Sv(B)}))}}),m.jsx(CT,{id:"description",label:"⭐ Description",value:C,onChange:L,placeholder:"Add description",rows:10,error:P.description}),m.jsx(xv,{id:"established",label:"Lab Established Year",value:Y,onChange:K,placeholder:"e.g. 2006",error:P.established,onValidate:B=>{P.established&&Q(ae=>({...ae,established:wv(B)}))}})]}),m.jsx("div",{className:"col-span-1 md:col-span-2",children:m.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[m.jsxs("div",{children:[m.jsx(TT,{hiringStatus:ie,setHiringStatus:le}),re&&m.jsx(pl,{label:"Co-Editors",items:_,setItems:T,placeholder:"Add netid",bgColor:"bg-green-100",textColor:"text-green-800",buttonColor:"text-green-500 hover:text-green-700",error:P.professorIds,onValidate:B=>Q(ae=>({...ae,professorIds:Tv(B)})),infoText:"Allow others in your lab to update this listing"}),m.jsx(pl,{label:"Professors",items:h,setItems:g,placeholder:"Add professor",bgColor:"bg-blue-100",textColor:"text-blue-800",buttonColor:"text-blue-500 hover:text-blue-700",error:P.professorNames,permanentValue:y,onValidate:B=>Q(ae=>({...ae,professorNames:Ev(B)}))}),m.jsx(pl,{label:"Emails",items:E,setItems:O,placeholder:"Add email",bgColor:"bg-green-100",textColor:"text-green-800",buttonColor:"text-green-500 hover:text-green-700",error:P.emails,permanentValue:A,type:"email",onValidate:B=>Q(ae=>({...ae,emails:Cv(B)}))}),m.jsxs("div",{className:"mb-6 flex items-center",children:[m.jsx("input",{id:"archived",type:"checkbox",checked:Z,onChange:B=>oe(B.target.checked),className:"mr-3 h-4 w-4 text-blue-500 focus:ring-blue-400 cursor-pointer"}),m.jsx("label",{className:"text-gray-700 text-sm font-bold cursor-pointer",htmlFor:"archived",children:"Archive this listing"})]})]}),m.jsxs("div",{children:[m.jsx(RT,{departments:S,availableDepartments:w,onAddDepartment:H,onRemoveDepartment:fe}),m.jsx(pl,{label:"Websites",items:V,setItems:M,placeholder:"Add website URL",bgColor:"bg-yellow-100",textColor:"text-yellow-800",buttonColor:"text-yellow-500 hover:text-yellow-700",error:P.websites,type:"url",onValidate:B=>Q(ae=>({...ae,websites:Rv(B)}))}),m.jsx(pl,{label:"Keywords (for search)",items:D,setItems:z,placeholder:"Add keyword",bgColor:"bg-gray-100",textColor:"text-gray-800",buttonColor:"text-gray-500 hover:text-gray-700"})]})]})})]}),m.jsxs("div",{className:"absolute bottom-6 right-6 flex space-x-3 bg-white py-2 px-1",children:[m.jsx("button",{type:"button",onClick:se,className:`${r?"bg-red-500 hover:bg-red-700 text-white":"bg-gray-300 hover:bg-gray-400 text-gray-800"} font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline`,children:r?"Delete":"Cancel"}),m.jsx("button",{type:"submit",className:`${r?"bg-green-500 hover:bg-green-700":"bg-blue-500 hover:bg-blue-700"} text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline`,children:r?"Create":"Save"})]})]})})},jv=({listing:n,favListingsIds:r,updateFavorite:o,updateListing:l,postListing:s,clearCreatedListing:c,deleteListing:f,openModal:p,globalEditing:h,setGlobalEditing:g,editable:y,reloadListings:v})=>{const[S,j]=R.useState([]),[w,x]=R.useState(0),[_,T]=R.useState(!1),[E,O]=R.useState(r.includes(n.id)),[A,N]=R.useState(n.archived),V=R.useRef(null),M=n.id==="create",[C,L]=R.useState(M),{user:D}=R.useContext(mn),z=D&&D.netId===n.ownerId,Y=R.useRef(null),K=["bg-blue-200","bg-green-200","bg-yellow-200","bg-red-200","bg-purple-200","bg-pink-200","bg-teal-200","bg-orange-200"],ie=()=>n.hiringStatus<0?"bg-red-500":n.hiringStatus===0?"bg-yellow-500":"bg-green-500",le=()=>n.hiringStatus<0?"Lab not seeking applicants":n.hiringStatus===0?"Lab open to applicants":"Lab seeking applicants";R.useEffect(()=>{r&&O(r.includes(n.id))},[r]),R.useEffect(()=>{N(n.archived)},[n]),R.useEffect(()=>{if(!V.current)return;const P=()=>{const Q=V.current;if(!Q)return;const J=Q.clientWidth;let se=0;const H=[];x(0);const fe=document.createElement("span");fe.className="bg-blue-200 text-gray-900 text-xs rounded px-1 py-0.5 mt-2 mr-2",fe.style.visibility="hidden",fe.style.position="absolute",document.body.appendChild(fe);for(let B=0;BJ&&(H.pop(),x(n.departments.length-H.length))}document.body.removeChild(fe),j(H)};return P(),window.addEventListener("resize",P),()=>window.removeEventListener("resize",P)},[n]);const Z=P=>{P.stopPropagation(),n.favorites=E?n.favorites-1:n.favorites+1,n.favorites<0&&(n.favorites=0),o(n,n.id,!E)},oe=P=>{P.stopPropagation(),Je({title:"Delete Listing",text:"Are you sure you want to delete this listing? This action cannot be undone",icon:"warning",buttons:["Cancel","Delete"],dangerMode:!0}).then(Q=>{Q&&f(n)})},ne=P=>{P.stopPropagation(),A?(N(!1),Ct.put(`/listings/${n.id}/unarchive`,{withCredentials:!0}).then(Q=>{const J=Q.data.listing,se=cr(J);l(se)}).catch(Q=>{N(!0),console.error("Error unarchiving listing:",Q),Q.response.data.incorrectPermissions?(Je({text:"You no longer have permission to unarchive this listing",icon:"warning"}),v()):(Je({text:"Unable to unarchive listing",icon:"warning"}),v())})):(N(!0),Ct.put(`/listings/${n.id}/archive`,{withCredentials:!0}).then(Q=>{const J=Q.data.listing,se=cr(J);l(se)}).catch(Q=>{N(!1),console.error("Error archiving listing:",Q),Q.response.data.incorrectPermissions?(Je({text:"You no longer have permission to archive this listing",icon:"warning"}),v()):(Je({text:"Unable to archive listing",icon:"warning"}),v())}))},pe=P=>{P.stopPropagation(),Y.current=n,L(!0),g(!0)},U=()=>{p(n)},re=P=>P?P.startsWith("http://")||P.startsWith("https://")?P:`https://${P}`:"";return n?m.jsxs("div",{className:"mb-4 relative",children:[m.jsxs("div",{className:"flex relative z-10 rounded-md shadow",children:[m.jsx("div",{className:`${ie()} cursor-pointer rounded-l flex-shrink-0 relative ${A?"opacity-50":""}`,style:{width:"6px"},onMouseEnter:()=>T(!0),onMouseLeave:()=>T(!1),children:_&&m.jsx("div",{className:`${ie()} absolute top-1/2 left-4 -translate-y-1/2 text-white text-xs rounded-full py-1 px-2 z-10 whitespace-nowrap shadow`,children:le()})}),m.jsxs("div",{className:"p-4 flex-grow grid grid-cols-3 md:grid-cols-12 cursor-pointer bg-white hover:bg-gray-100 border border-gray-300 rounded-r",onClick:U,children:[m.jsxs("div",{className:"col-span-2 md:col-span-4",children:[m.jsx("p",{className:`text-lg font-semibold mb-3 ${A?"opacity-50":""}`,style:{lineHeight:"1.2rem",height:"1.2rem",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:n.title}),m.jsxs("p",{className:`text-sm text-gray-700 ${A?"opacity-50":""}`,style:{overflow:"hidden",display:"-webkit-box",WebkitLineClamp:1,WebkitBoxOrient:"vertical"},children:["Professors: ",[`${n.ownerFirstName} ${n.ownerLastName}`,...n.professorNames].join(", ")]}),m.jsx("div",{ref:V,className:"flex overflow-hidden",style:{whiteSpace:"nowrap"},children:S.length>0?m.jsxs(m.Fragment,{children:[S.map(P=>m.jsx("span",{className:`${Object.keys(It).includes(P)?K[It[P]]:"bg-gray-200"} text-gray-900 text-xs rounded px-1 py-0.5 mt-3 mr-2 ${A?"opacity-50":""}`,style:{display:"inline-block",whiteSpace:"nowrap"},children:P},P)),w>0&&m.jsxs("span",{className:`bg-gray-200 text-gray-900 text-xs rounded px-1 py-0.5 mt-3 ${A?"opacity-50":""}`,style:{display:"inline-block",whiteSpace:"nowrap"},children:["+",w," more"]})]}):m.jsx("div",{className:"mt-3 flex",children:m.jsx("span",{className:`invisible bg-gray-200 text-gray-900 text-xs rounded px-1 py-0.5 mr-2 ${A?"opacity-50":""}`,style:{display:"inline-block"},children:"placeholder"})})})]}),m.jsxs("div",{className:"col-span-6 hidden md:flex align-middle",children:[m.jsx("div",{className:`flex-shrink-0 border-l border-gray-300 mx-4 ${A?"opacity-50":""}`}),m.jsx("p",{className:`flex-grow text-gray-800 text-sm overflow-hidden overflow-ellipsis ${A?"opacity-50":""}`,style:{display:"-webkit-box",WebkitLineClamp:4,WebkitBoxOrient:"vertical"},children:n.description})]}),m.jsxs("div",{className:"flex flex-col col-span-1 md:col-span-2 items-end",children:[m.jsxs("div",{children:[n.websites&&n.websites.length>0&&m.jsx("a",{href:re(n.websites[0]),className:"mr-1",onClick:P=>P.stopPropagation(),target:"_blank",rel:"noopener noreferrer",children:m.jsx("button",{className:"p-1 rounded-full hover:bg-gray-200",children:m.jsx("img",{src:"/assets/icons/new-link.png",alt:"Lab Website",className:`w-5 h-5 ${A?"opacity-50":""}`})})}),!M&&m.jsx("a",{onClick:Z,className:"inline-block",children:m.jsx("button",{className:"p-1 hover:bg-gray-200 rounded-full","aria-label":E?"Remove from favorites":"Add to favorites",children:m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",className:`transition-colors ${A?"opacity-50":""}`,fill:E?"#FFDA7B":"none",stroke:E?"#F0C04A":"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:m.jsx("path",{d:"M12 17.75l-6.172 3.245l1.179-6.873l-5-4.867l6.9-1l3.086-6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z"})})})})]}),m.jsx("div",{className:"flex-grow"}),m.jsx("p",{className:"text-[8px] mb-0.5 text-gray-700",style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"100%"},children:"Last Update"}),m.jsx("p",{className:`text-sm text-gray-700 ${A?"opacity-50":""}`,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"100%"},children:new Date(n.updatedAt).toLocaleDateString()})]})]})]},n.id),m.jsx("div",{className:`transform transition-all duration-700 overflow-hidden ${y&&C?"translate-y-0 max-h-[4000px]":"-translate-y-5 max-h-0"} pl-2 pr-0.5 -mt-1`,children:y&&C&&m.jsx(OT,{listing:n,isCreated:M,onLoad:(P,Q)=>{if(!Q){L(!1),Je({text:"Unable to fetch most recent listing",icon:"warning"}),v();return}l(P)},onCancel:()=>{M?(L(!1),c()):(Y.current&&l({...Y.current}),L(!1),g(!1))},onSave:P=>{s(P),L(!1),g(!1)},onCreate:P=>{s(P),L(!1),g(!1)}})}),y&&!C&&m.jsx("div",{className:"flex justify-center",children:m.jsxs("div",{className:"bg-white border border-gray-300 border-t-0 rounded-b-lg shadow px-3 pb-1 pt-3 -mt-1 inline-flex space-x-2",children:[m.jsx("button",{className:"p-1 rounded-full hover:bg-gray-100 text-gray-600 hover:text-green-600 transition-colors",onClick:ne,title:A?"Unarchive listing":"Archive listing","aria-label":A?"Unarchive listing":"Archive listing",children:A?m.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"opacity-50",children:[m.jsx("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),m.jsx("path",{d:"M10.585 10.587a2 2 0 0 0 2.829 2.828"}),m.jsx("path",{d:"M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87"}),m.jsx("path",{d:"M3 3l18 18"})]}):m.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[m.jsx("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),m.jsx("path",{d:"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"}),m.jsx("path",{d:"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6"})]})}),m.jsx("button",{className:`p-1 rounded-full ${h?"text-gray-400 cursor-not-allowed":"hover:bg-gray-100 text-gray-600 hover:text-blue-600 transition-colors"}`,onClick:P=>{P.stopPropagation(),h||pe(P)},title:h?"Must close current editor":"Edit listing","aria-label":h?"Editing disabled":"Edit listing",disabled:h,children:m.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:`${A||h?"opacity-50":""}`,children:[m.jsx("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),m.jsx("path",{d:"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4"}),m.jsx("path",{d:"M13.5 6.5l4 4"})]})}),m.jsx("button",{className:`p-1 rounded-full ${z&&!h?"hover:bg-gray-100 text-gray-600 hover:text-red-600 transition-colors":"text-gray-400 cursor-not-allowed"}`,onClick:P=>{P.stopPropagation(),z&&!h&&oe(P)},title:z?h?"Must close current editor":"Delete listing":"Only owner can delete","aria-label":z?h?"Must close current editor":"Delete listing":"Only owner can delete",disabled:!z,children:m.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:`${A||h?"opacity-50":""}`,children:[m.jsx("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),m.jsx("path",{d:"M4 7l16 0"}),m.jsx("path",{d:"M10 11l0 6"}),m.jsx("path",{d:"M14 11l0 6"}),m.jsx("path",{d:"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12"}),m.jsx("path",{d:"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3"})]})})]})})]}):null},NT=({isOpen:n,onClose:r,listing:o,favListingsIds:l,updateFavorite:s})=>{const[c,f]=R.useState(o.id==="create"),[p,h]=R.useState(l.includes(o.id)),[g,y]=R.useState(!0),{user:v}=R.useContext(mn),S=["bg-blue-200","bg-green-200","bg-yellow-200","bg-red-200","bg-purple-200","bg-pink-200","bg-teal-200","bg-orange-200"],j=()=>o.hiringStatus<0?"bg-red-500":o.hiringStatus===0?"bg-yellow-500":"bg-green-500",w=()=>o.hiringStatus<0?"Lab not seeking applicants":o.hiringStatus===0?"Lab open to applicants":"Lab seeking applicants",x=E=>{E.target===E.currentTarget&&r()};R.useEffect(()=>{l&&h(l.includes(o.id))},[l]),R.useEffect(()=>{v&&v.userConfirmed&&["admin","professor","faculty"].includes(v.userType)&&y(!1)},[]),R.useEffect(()=>(n&&(document.body.style.overflow="hidden"),()=>{document.body.style.overflow="auto"}),[n]);const _=E=>{E.stopPropagation(),o.favorites=p?o.favorites-1:o.favorites+1,o.favorites<0&&(o.favorites=0),s(o,o.id,!p)},T=E=>E?E.startsWith("http://")||E.startsWith("https://")?E:`https://${E}`:"";return!n||!o?null:m.jsx("div",{className:"fixed inset-0 bg-black/65 z-50 flex items-center justify-center overflow-y-auto p-4 pt-24",onClick:x,children:m.jsxs("div",{className:"bg-white rounded-lg shadow-xl w-full max-w-4xl max-h-[80vh] overflow-y-auto",onClick:E=>E.stopPropagation(),children:[m.jsx("div",{className:`${j()} h-2 w-full rounded-t-lg`}),m.jsxs("div",{className:"p-6 relative",children:[m.jsxs("div",{className:"absolute top-4 right-4",children:[!c&&m.jsx("a",{onClick:_,className:"inline-block",children:m.jsx("button",{className:"p-1 hover:bg-gray-100 rounded-full mr-2","aria-label":p?"Remove from favorites":"Add to favorites",children:m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",className:"transition-colors h-6 w-6",fill:p?"#FFDA7B":"none",stroke:p?"#F0C04A":"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:m.jsx("path",{d:"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z"})})})}),m.jsx("button",{onClick:r,className:"p-1 rounded-full hover:bg-gray-100","aria-label":"Close",children:m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:m.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),m.jsx("div",{className:"mb-6 pr-20",children:m.jsxs("div",{className:"flex flex-col md:flex-row md:items-center gap-2",children:[m.jsx("h2",{className:"text-2xl font-bold md:max-w-[400px] lg:max-w-[600px]",children:o.title}),m.jsx("span",{className:`${j()} mt-2 md:mt-0 md:ml-2 text-white text-xs px-2 py-1 rounded-full inline-block w-fit`,children:w()})]})}),m.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[m.jsxs("div",{className:"col-span-1",children:[m.jsxs("section",{className:"mb-6",children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Professors"}),m.jsx("div",{className:"space-y-2",children:[`${o.ownerFirstName} ${o.ownerLastName}`,...o.professorNames].map((E,O)=>m.jsxs("div",{className:"flex items-center",children:[m.jsx("div",{className:"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center mr-2",children:E.charAt(0).toUpperCase()}),m.jsx("span",{children:E})]},O))})]}),m.jsxs("section",{className:"mb-6",children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Departments"}),m.jsx("div",{className:"flex flex-wrap gap-2",children:o.departments.map(E=>m.jsx("span",{className:`${Object.keys(It).includes(E)?S[It[E]]:"bg-gray-200"} text-gray-900 text-xs rounded px-2 py-1`,children:E},E))})]}),m.jsxs("section",{className:"mb-6",children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Contact Information"}),m.jsxs("div",{className:"mb-4",children:[m.jsx("h4",{className:"text-md font-medium",children:"Emails"}),m.jsx("ul",{className:"mt-1 space-y-1",children:[o.ownerEmail,...o.emails].map((E,O)=>m.jsx("li",{children:m.jsx("a",{href:`mailto:${E}`,className:"text-blue-600 hover:underline",children:E})},O))})]}),o.websites&&o.websites.length>0&&m.jsxs("div",{children:[m.jsx("h4",{className:"text-md font-medium",children:"Websites"}),m.jsx("ul",{className:"mt-1 space-y-1",children:o.websites.map((E,O)=>m.jsx("li",{className:"truncate",children:m.jsx("a",{href:T(E),target:"_blank",rel:"noopener noreferrer",className:"text-blue-600 hover:underline",children:E})},O))})]})]}),m.jsxs("section",{children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Stats"}),m.jsxs("div",{className:"space-y-2 text-sm",children:[!g&&m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"flex justify-between",children:[m.jsx("span",{children:"Views:"}),m.jsx("span",{className:"font-medium",children:o.views})]}),m.jsxs("div",{className:"flex justify-between",children:[m.jsx("span",{children:"Favorites:"}),m.jsx("span",{className:"font-medium",children:o.favorites})]})]}),o.established&&m.jsxs("div",{className:"flex justify-between",children:[m.jsx("span",{children:"Lab Established:"}),m.jsx("span",{className:"font-medium",children:o.established})]}),m.jsxs("div",{className:"flex justify-between",children:[m.jsx("span",{children:"Listing Created:"}),m.jsx("span",{className:"font-medium",children:new Date(o.createdAt).toLocaleDateString()})]}),m.jsxs("div",{className:"flex justify-between",children:[m.jsx("span",{children:"Listing Updated:"}),m.jsx("span",{className:"font-medium",children:new Date(o.updatedAt).toLocaleDateString()})]})]})]})]}),m.jsxs("div",{className:"col-span-1 md:col-span-2",children:[m.jsxs("section",{className:"mb-6",children:[m.jsx("h3",{className:"text-lg font-semibold mb-2",children:"About"}),m.jsx("div",{className:"whitespace-pre-wrap",children:o.description})]}),o.archived&&m.jsxs("div",{className:"mt-6 p-3 bg-red-100 text-red-700 rounded-lg",children:[m.jsx("div",{className:"font-semibold",children:"This listing is archived"}),m.jsx("div",{className:"text-sm",children:"Archived listings are not visible in search results or as favorites."})]})]})]})]})]})})},_T=({globalEditing:n,handleCreate:r})=>m.jsx("button",{className:`py-1 px-2 rounded-md ${n?"text-gray-400 cursor-not-allowed":"hover:bg-gray-100 text-green-500 hover:text-green-700 transition-colors"}`,onClick:o=>{o.stopPropagation(),n||r()},title:n?"Must close current editor":"Create listing","aria-label":n?"Create listing disabled":"Edit listing",disabled:n,children:m.jsxs("div",{className:"flex items-center justify-center",children:[m.jsx("span",{className:"mr-1 text-md font-semibold",children:"Create Listing"}),m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:m.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 9v3m0 0v3m0-3h3m-3 0H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z"})})]})});function AT(){return m.jsx("div",{children:m.jsx("iframe",{className:"w-[200px] h-[112.5px] sm:w-[400px] sm:h-[225px] lg:w-[800px] lg:h-[450px] transition-all",src:"https://www.youtube.com/embed/Crf3Tyjsk2k?si=eXHPqMv_Fwi04FT4",title:"YouTube video player",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",referrerPolicy:"strict-origin-when-cross-origin",allowFullScreen:!0})})}const MT=()=>{const[n,r]=R.useState([]),[o,l]=R.useState([]),[s,c]=R.useState([]),[f,p]=R.useState(!1),[h,g]=R.useState(!1),[y,v]=R.useState(!1),[S,j]=R.useState(!1),[w,x]=R.useState(null),{user:_}=R.useContext(mn);R.useEffect(()=>{T()},[]),R.useEffect(()=>{const z=Y=>{if(y){const K="You have unsaved changes that will be lost if you leave this page.";return Y.preventDefault(),Y.returnValue=K,K}};return y&&window.addEventListener("beforeunload",z),()=>{window.removeEventListener("beforeunload",z)}},[y]);const T=async()=>{p(!0),await Ct.get("/users/listings",{withCredentials:!0}).then(z=>{const Y=z.data.ownListings.map(function(ie){return cr(ie)}),K=z.data.favListings.map(function(ie){return cr(ie)});r(Y),l(K)}).catch(z=>{console.error("Error fetching listings:",z),r([]),l([]),p(!1),Je({text:"Error fetching your listings",icon:"warning"})}),Ct.get("/users/favListingsIds",{withCredentials:!0}).then(z=>{c(z.data.favListingsIds),p(!1)}).catch(z=>{console.error("Error fetching user's favorite listings:",z),r([]),l([]),c([]),p(!1),Je({text:"Error fetching your listings",icon:"warning"})})},E=z=>{x(z),g(!0)},O=()=>{g(!1),x(null)},A=(z,Y,K)=>{const ie=o,le=s;K?(l([z,...ie]),c([Y,...le]),Ct.put("/users/favListings",{withCredentials:!0,data:{favListings:[z.id]}}).catch(Z=>{l(ie),c(le),console.error("Error favoriting listing:",Z),Je({text:"Unable to favorite listing",icon:"warning"}),T()})):(l(ie.filter(Z=>Z.id!==Y)),c(le.filter(Z=>Z!==Y)),Ct.delete("/users/favListings",{withCredentials:!0,data:{favListings:[Y]}}).catch(Z=>{l(ie),c(le),console.error("Error unfavoriting listing:",Z),Je({text:"Unable to unfavorite listing",icon:"warning"}),T()}))},N=z=>{r(Y=>Y.map(K=>(K.id===K.id,K))),l(Y=>Y.map(K=>(K.id===K.id,K)))},V=z=>z.filter(Y=>Y.confirmed&&!Y.archived),M=z=>{p(!0),Ct.post("/listings",{withCredentials:!0,data:z}).then(Y=>{T(),v(!1),p(!1),j(!1)}).catch(Y=>{console.error("Error posting new listing:",Y),Je({text:"Unable to create listing",icon:"warning"}),T(),v(!1),p(!1),j(!1)})},C=()=>{r(z=>z.filter(Y=>Y.id!=="create")),v(!1),j(!1)},L=z=>{p(!0),Ct.delete(`/listings/${z.id}`,{withCredentials:!0}).then(Y=>{T(),p(!1)}).catch(Y=>{console.error("Error deleting listing:",Y),Je({text:"Unable to delete listing",icon:"warning"}),T(),p(!1)})},D=()=>{Ct.get("/listings/skeleton",{withCredentials:!0}).then(z=>{const Y=cr(z.data.listing);r(K=>[...K,Y]),v(!0),j(!0)}).catch(z=>{console.error("Error fetching skeleton listing:",z),Je({text:"Unable to create listing",icon:"warning"})})};return m.jsx("div",{className:"mx-auto max-w-[1300px] px-6 mt-24 w-full",children:f?m.jsx("div",{style:{marginTop:"17%",textAlign:"center"},children:m.jsx(Ms,{color:"#66CCFF",size:10})}):m.jsxs("div",{children:[_&&!_.userConfirmed&&m.jsx("div",{className:"bg-amber-100 border-l-4 border-amber-500 text-amber-700 p-4 mb-6 rounded shadow-sm",children:m.jsx("div",{className:"flex items-center",children:m.jsx("p",{className:"font-medium",children:"Your account is pending confirmation. Any listings that you create will not be publicly visible as favorites or in search results until your account is confirmed."})})}),m.jsx("p",{className:"text-xl text-gray-700 mb-4",children:"Your listings"}),n.length>0&&m.jsx("ul",{children:n.map(z=>m.jsx("li",{className:"mb-2",children:m.jsx(jv,{listing:z,favListingsIds:s,updateFavorite:A,updateListing:N,postListing:M,clearCreatedListing:C,deleteListing:L,openModal:E,globalEditing:y,setGlobalEditing:v,editable:!0,reloadListings:T})},z.id))}),_&&(_.userType==="professor"||_.userType==="faculty"||_.userType==="admin")&&!S&&m.jsx("div",{className:"my-8 flex justify-center align-center",children:m.jsx(_T,{globalEditing:y,handleCreate:D})}),m.jsx("p",{className:"text-xl text-gray-700 mb-4",children:"Favorite listings"}),V(o).length>0?m.jsx("ul",{children:V(o).map(z=>m.jsx("li",{className:"mb-2",children:m.jsx(jv,{listing:z,favListingsIds:s,updateFavorite:A,updateListing:N,postListing:M,clearCreatedListing:C,deleteListing:L,openModal:E,globalEditing:y,setGlobalEditing:v,editable:!1,reloadListings:T})},z.id))}):m.jsx("p",{className:"my-4 flex align-center",children:"No listings found."}),_&&(_.userType==="professor"||_.userType==="faculty"||_.userType==="admin")&&m.jsxs(m.Fragment,{children:[m.jsx("h1",{className:"text-4xl mt-24 font-bold text-center mb-7",children:"Learn y/labs!"}),m.jsx("div",{className:"mt-4 flex align-center justify-center mb-4",children:m.jsx(AT,{})})]}),w&&m.jsx(NT,{isOpen:h,onClose:O,listing:w,favListingsIds:s,updateFavorite:A})]})})},kT=()=>{var L;const[n,r]=R.useState(""),[o,l]=R.useState(""),[s,c]=R.useState(""),[f,p]=R.useState(""),[h,g]=R.useState(!1),[y,v]=R.useState(-1),S=R.useRef(null),j=R.useRef(null),[w,x]=R.useState({}),_=[{value:"undergraduate",label:"Undergraduate Student"},{value:"graduate",label:"Graduate Student"},{value:"professor",label:"Professor"},{value:"faculty",label:"Faculty"}],T=D=>D.trim()?void 0:"First name is required",E=D=>D.trim()?void 0:"Last name is required",O=D=>{if(!D.trim())return"Email is required";if(!D.includes("@")||!D.includes(".")||D.includes(" "))return"Invalid email format"},A=D=>D.trim()?void 0:"User type is required",N=D=>{p(D),g(!1),j.current&&j.current.blur(),x(z=>({...z,userType:A(D)}))},V=D=>{switch(D.key){case"ArrowDown":D.preventDefault(),v(z=>z<_.length-1?z+1:z);break;case"ArrowUp":D.preventDefault(),v(z=>z>0?z-1:0);break;case"Enter":D.preventDefault(),y>=0&&y<_.length&&N(_[y].value);break;case"Escape":D.preventDefault(),g(!1),j.current&&j.current.blur();break;case"Tab":g(!1);break}},M=D=>{D.preventDefault();const z={firstName:T(n),lastName:E(o),email:O(s),userType:A(f)},Y=Object.fromEntries(Object.entries(z).filter(([K,ie])=>ie!==void 0));x(Y),Object.keys(Y).length===0&&(console.log("Submitting user information:",{firstName:n,lastName:o,email:s,userType:f}),Ct.put("/users",{withCredentials:!0,data:{fname:n,lname:o,email:s,userType:f,userConfirmed:!1}}).then(K=>{Je("Success!","Your information has been updated! You can now access the site. We will verify your information shortly.","success").then(()=>{window.location.href="/"})}).catch(K=>{console.error("Failed to update user information:",K),Je("Error!","An error occurred while updating your information. Please try again.","error")}))},C=({error:D})=>D?m.jsx("p",{className:"text-red-500 text-xs italic mt-1",children:D}):null;return m.jsx("div",{className:"fixed inset-0 flex items-center justify-center bg-gray-50 p-4",children:m.jsxs("div",{className:"w-full max-w-md bg-white rounded-lg shadow-lg p-6",children:[m.jsx("div",{className:"mb-6",children:m.jsx("h2",{className:"text-xl font-bold text-gray-800 mb-2",children:"Welcome to y/labs!"})}),m.jsxs("form",{onSubmit:M,children:[m.jsxs("div",{className:"mb-4",children:[m.jsx("label",{className:"block text-gray-700 text-sm font-bold mb-2",htmlFor:"firstName",children:"First Name"}),m.jsx("input",{id:"firstName",type:"text",value:n,onChange:D=>{r(D.target.value),w.firstName&&x(z=>({...z,firstName:T(D.target.value)}))},className:`shadow appearance-none border ${w.firstName?"border-red-500":""} rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:ring-2 focus:ring-blue-500`}),m.jsx(C,{error:w.firstName})]}),m.jsxs("div",{className:"mb-4",children:[m.jsx("label",{className:"block text-gray-700 text-sm font-bold mb-2",htmlFor:"lastName",children:"Last Name"}),m.jsx("input",{id:"lastName",type:"text",value:o,onChange:D=>{l(D.target.value),w.lastName&&x(z=>({...z,lastName:E(D.target.value)}))},className:`shadow appearance-none border ${w.lastName?"border-red-500":""} rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:ring-2 focus:ring-blue-500`}),m.jsx(C,{error:w.lastName})]}),m.jsxs("div",{className:"mb-4",children:[m.jsx("label",{className:"block text-gray-700 text-sm font-bold mb-2",htmlFor:"email",children:"Email"}),m.jsx("input",{id:"email",type:"text",value:s,onChange:D=>{c(D.target.value),w.email&&x(z=>({...z,email:O(D.target.value)}))},className:`shadow appearance-none border ${w.email?"border-red-500":""} rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:ring-2 focus:ring-blue-500`}),m.jsx(C,{error:w.email})]}),m.jsxs("div",{className:"mb-6",ref:S,children:[m.jsx("label",{className:"block text-gray-700 text-sm font-bold mb-2",children:"User Type"}),m.jsxs("div",{className:"relative",children:[m.jsxs("div",{className:"relative",children:[m.jsx("input",{ref:j,id:"userType",type:"text",readOnly:!0,value:f&&((L=_.find(D=>D.value===f))==null?void 0:L.label)||"",onClick:()=>{g(!0)},onKeyDown:V,onFocus:()=>g(!0),onBlur:()=>{setTimeout(()=>{var D;(D=S.current)!=null&&D.contains(document.activeElement)||g(!1)},100)},className:`shadow appearance-none border ${w.userType?"border-red-500":""} rounded w-full py-2 px-3 pr-10 text-gray-700 leading-tight focus:outline-none focus:ring-2 focus:ring-blue-500 cursor-pointer`}),m.jsx("div",{className:"absolute inset-y-0 right-0 flex items-center px-2 text-gray-700 cursor-pointer",onClick:()=>{g(!h),!h&&j.current&&j.current.focus()},children:m.jsx("svg",{className:"fill-current h-4 w-4",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",children:m.jsx("path",{d:"M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z"})})})]}),h&&m.jsx("div",{className:"absolute left-0 right-0 bg-white rounded-lg z-10 shadow-lg border overflow-hidden mt-1 max-h-[200px] border-gray-300",tabIndex:-1,children:m.jsx("ul",{className:"max-h-[200px] overflow-y-auto",tabIndex:-1,children:_.map((D,z)=>m.jsxs("li",{onClick:()=>N(D.value),className:`p-2 cursor-pointer flex items-center justify-between ${y===z?"bg-blue-100":"hover:bg-gray-100"}`,tabIndex:-1,onMouseDown:Y=>Y.preventDefault(),children:[m.jsx("span",{children:D.label}),f===D.value&&m.jsx("svg",{className:"h-4 w-4 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:m.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M5 13l4 4L19 7"})})]},z))})})]}),m.jsx(C,{error:w.userType})]}),m.jsx("div",{className:"flex justify-end",children:m.jsx("button",{type:"submit",className:"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-6 rounded focus:outline-none focus:shadow-outline",children:"Continue"})})]})]})})},DT=()=>{const[n,r]=R.useState(!1);return R.useEffect(()=>{setTimeout(()=>{r(!0)},500)}),R.useEffect(()=>{n&&Je({text:"We were unable to process your login. Please try again or contact support if the issue persists.",icon:"warning"}).then(()=>{window.location.href="/login"})},[n]),null},Ov=n=>{let r;return n<1?r=5.11916*n**2:r=4.5*Math.log(n+1)+2,(r/100).toFixed(2)};function Pd(){const n=Vy(Py);return n[Nl]||n}function zT(n){return Vt("MuiPaper",n)}At("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);const LT=["className","component","elevation","square","variant"],BT=n=>{const{square:r,elevation:o,variant:l,classes:s}=n,c={root:["root",l,!r&&"rounded",l==="elevation"&&`elevation${o}`]};return Wt(c,zT,s)},UT=ct("div",{name:"MuiPaper",slot:"Root",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.root,r[o.variant],!o.square&&r.rounded,o.variant==="elevation"&&r[`elevation${o.elevation}`]]}})(({theme:n,ownerState:r})=>{var o;return ee({backgroundColor:(n.vars||n).palette.background.paper,color:(n.vars||n).palette.text.primary,transition:n.transitions.create("box-shadow")},!r.square&&{borderRadius:n.shape.borderRadius},r.variant==="outlined"&&{border:`1px solid ${(n.vars||n).palette.divider}`},r.variant==="elevation"&&ee({boxShadow:(n.vars||n).shadows[r.elevation]},!n.vars&&n.palette.mode==="dark"&&{backgroundImage:`linear-gradient(${Lt.alpha("#fff",Ov(r.elevation))}, ${Lt.alpha("#fff",Ov(r.elevation))})`},n.vars&&{backgroundImage:(o=n.vars.overlays)==null?void 0:o[r.elevation]}))}),Wy=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiPaper"}),{className:s,component:c="div",elevation:f=1,square:p=!1,variant:h="elevation"}=l,g=$e(l,LT),y=ee({},l,{component:c,elevation:f,square:p,variant:h}),v=BT(y);return m.jsx(UT,ee({as:c,ownerState:y,className:ke(v.root,s),ref:o},g))});function $T(n){return Vt("MuiAppBar",n)}At("MuiAppBar",["root","positionFixed","positionAbsolute","positionSticky","positionStatic","positionRelative","colorDefault","colorPrimary","colorSecondary","colorInherit","colorTransparent","colorError","colorInfo","colorSuccess","colorWarning"]);const HT=["className","color","enableColorOnDark","position"],qT=n=>{const{color:r,position:o,classes:l}=n,s={root:["root",`color${qe(r)}`,`position${qe(o)}`]};return Wt(s,$T,l)},ss=(n,r)=>n?`${n==null?void 0:n.replace(")","")}, ${r})`:r,PT=ct(Wy,{name:"MuiAppBar",slot:"Root",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.root,r[`position${qe(o.position)}`],r[`color${qe(o.color)}`]]}})(({theme:n,ownerState:r})=>{const o=n.palette.mode==="light"?n.palette.grey[100]:n.palette.grey[900];return ee({display:"flex",flexDirection:"column",width:"100%",boxSizing:"border-box",flexShrink:0},r.position==="fixed"&&{position:"fixed",zIndex:(n.vars||n).zIndex.appBar,top:0,left:"auto",right:0,"@media print":{position:"absolute"}},r.position==="absolute"&&{position:"absolute",zIndex:(n.vars||n).zIndex.appBar,top:0,left:"auto",right:0},r.position==="sticky"&&{position:"sticky",zIndex:(n.vars||n).zIndex.appBar,top:0,left:"auto",right:0},r.position==="static"&&{position:"static"},r.position==="relative"&&{position:"relative"},!n.vars&&ee({},r.color==="default"&&{backgroundColor:o,color:n.palette.getContrastText(o)},r.color&&r.color!=="default"&&r.color!=="inherit"&&r.color!=="transparent"&&{backgroundColor:n.palette[r.color].main,color:n.palette[r.color].contrastText},r.color==="inherit"&&{color:"inherit"},n.palette.mode==="dark"&&!r.enableColorOnDark&&{backgroundColor:null,color:null},r.color==="transparent"&&ee({backgroundColor:"transparent",color:"inherit"},n.palette.mode==="dark"&&{backgroundImage:"none"})),n.vars&&ee({},r.color==="default"&&{"--AppBar-background":r.enableColorOnDark?n.vars.palette.AppBar.defaultBg:ss(n.vars.palette.AppBar.darkBg,n.vars.palette.AppBar.defaultBg),"--AppBar-color":r.enableColorOnDark?n.vars.palette.text.primary:ss(n.vars.palette.AppBar.darkColor,n.vars.palette.text.primary)},r.color&&!r.color.match(/^(default|inherit|transparent)$/)&&{"--AppBar-background":r.enableColorOnDark?n.vars.palette[r.color].main:ss(n.vars.palette.AppBar.darkBg,n.vars.palette[r.color].main),"--AppBar-color":r.enableColorOnDark?n.vars.palette[r.color].contrastText:ss(n.vars.palette.AppBar.darkColor,n.vars.palette[r.color].contrastText)},!["inherit","transparent"].includes(r.color)&&{backgroundColor:"var(--AppBar-background)"},{color:r.color==="inherit"?"inherit":"var(--AppBar-color)"},r.color==="transparent"&&{backgroundImage:"none",backgroundColor:"transparent",color:"inherit"}))}),YT=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiAppBar"}),{className:s,color:c="primary",enableColorOnDark:f=!1,position:p="fixed"}=l,h=$e(l,HT),g=ee({},l,{color:c,position:p,enableColorOnDark:f}),y=qT(g);return m.jsx(PT,ee({square:!0,component:"header",ownerState:g,elevation:4,className:ke(y.root,s,p==="fixed"&&"mui-fixed"),ref:o},h))}),GT=["theme"];function VT(n){let{theme:r}=n,o=$e(n,GT);const l=r[Nl];let s=l||r;return typeof r!="function"&&(l&&!l.vars?s=ee({},l,{vars:null}):r&&!r.vars&&(s=ee({},r,{vars:null}))),m.jsx(VR,ee({},o,{themeId:l?Nl:void 0,theme:s}))}const XT=At("MuiBox",["root"]),FT=zd(),Xf=TR({themeId:Nl,defaultTheme:FT,defaultClassName:XT.root,generateClassName:qy.generate});function KT(n){return Vt("MuiToolbar",n)}At("MuiToolbar",["root","gutters","regular","dense"]);const QT=["className","component","disableGutters","variant"],ZT=n=>{const{classes:r,disableGutters:o,variant:l}=n;return Wt({root:["root",!o&&"gutters",l]},KT,r)},IT=ct("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.root,!o.disableGutters&&r.gutters,r[o.variant]]}})(({theme:n,ownerState:r})=>ee({position:"relative",display:"flex",alignItems:"center"},!r.disableGutters&&{paddingLeft:n.spacing(2),paddingRight:n.spacing(2),[n.breakpoints.up("sm")]:{paddingLeft:n.spacing(3),paddingRight:n.spacing(3)}},r.variant==="dense"&&{minHeight:48}),({theme:n,ownerState:r})=>r.variant==="regular"&&n.mixins.toolbar),WT=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiToolbar"}),{className:s,component:c="div",disableGutters:f=!1,variant:p="regular"}=l,h=$e(l,QT),g=ee({},l,{component:c,disableGutters:f,variant:p}),y=ZT(g);return m.jsx(IT,ee({as:c,className:ke(y.root,s),ref:o,ownerState:g},h))});function JT(n){return Vt("MuiTypography",n)}At("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);const ej=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],tj=n=>{const{align:r,gutterBottom:o,noWrap:l,paragraph:s,variant:c,classes:f}=n,p={root:["root",c,n.align!=="inherit"&&`align${qe(r)}`,o&&"gutterBottom",l&&"noWrap",s&&"paragraph"]};return Wt(p,JT,f)},nj=ct("span",{name:"MuiTypography",slot:"Root",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.root,o.variant&&r[o.variant],o.align!=="inherit"&&r[`align${qe(o.align)}`],o.noWrap&&r.noWrap,o.gutterBottom&&r.gutterBottom,o.paragraph&&r.paragraph]}})(({theme:n,ownerState:r})=>ee({margin:0},r.variant==="inherit"&&{font:"inherit"},r.variant!=="inherit"&&n.typography[r.variant],r.align!=="inherit"&&{textAlign:r.align},r.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},r.gutterBottom&&{marginBottom:"0.35em"},r.paragraph&&{marginBottom:16})),Nv={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},aj={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},rj=n=>aj[n]||n,ij=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiTypography"}),s=rj(l.color),c=Dd(ee({},l,{color:s})),{align:f="inherit",className:p,component:h,gutterBottom:g=!1,noWrap:y=!1,paragraph:v=!1,variant:S="body1",variantMapping:j=Nv}=c,w=$e(c,ej),x=ee({},c,{align:f,color:s,className:p,component:h,gutterBottom:g,noWrap:y,paragraph:v,variant:S,variantMapping:j}),_=h||(v?"p":j[S]||Nv[S])||"span",T=tj(x);return m.jsx(nj,ee({as:_,ref:o,ownerState:x,className:ke(T.root,p)},w))});function lj(n){return Vt("MuiIconButton",n)}const oj=At("MuiIconButton",["root","disabled","colorInherit","colorPrimary","colorSecondary","colorError","colorInfo","colorSuccess","colorWarning","edgeStart","edgeEnd","sizeSmall","sizeMedium","sizeLarge"]),sj=["edge","children","className","color","disabled","disableFocusRipple","size"],uj=n=>{const{classes:r,disabled:o,color:l,edge:s,size:c}=n,f={root:["root",o&&"disabled",l!=="default"&&`color${qe(l)}`,s&&`edge${qe(s)}`,`size${qe(c)}`]};return Wt(f,lj,r)},cj=ct(Hd,{name:"MuiIconButton",slot:"Root",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.root,o.color!=="default"&&r[`color${qe(o.color)}`],o.edge&&r[`edge${qe(o.edge)}`],r[`size${qe(o.size)}`]]}})(({theme:n,ownerState:r})=>ee({textAlign:"center",flex:"0 0 auto",fontSize:n.typography.pxToRem(24),padding:8,borderRadius:"50%",overflow:"visible",color:(n.vars||n).palette.action.active,transition:n.transitions.create("background-color",{duration:n.transitions.duration.shortest})},!r.disableRipple&&{"&:hover":{backgroundColor:n.vars?`rgba(${n.vars.palette.action.activeChannel} / ${n.vars.palette.action.hoverOpacity})`:Lt.alpha(n.palette.action.active,n.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},r.edge==="start"&&{marginLeft:r.size==="small"?-3:-12},r.edge==="end"&&{marginRight:r.size==="small"?-3:-12}),({theme:n,ownerState:r})=>{var o;const l=(o=(n.vars||n).palette)==null?void 0:o[r.color];return ee({},r.color==="inherit"&&{color:"inherit"},r.color!=="inherit"&&r.color!=="default"&&ee({color:l==null?void 0:l.main},!r.disableRipple&&{"&:hover":ee({},l&&{backgroundColor:n.vars?`rgba(${l.mainChannel} / ${n.vars.palette.action.hoverOpacity})`:Lt.alpha(l.main,n.palette.action.hoverOpacity)},{"@media (hover: none)":{backgroundColor:"transparent"}})}),r.size==="small"&&{padding:5,fontSize:n.typography.pxToRem(18)},r.size==="large"&&{padding:12,fontSize:n.typography.pxToRem(28)},{[`&.${oj.disabled}`]:{backgroundColor:"transparent",color:(n.vars||n).palette.action.disabled}})}),fj=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiIconButton"}),{edge:s=!1,children:c,className:f,color:p="default",disabled:h=!1,disableFocusRipple:g=!1,size:y="medium"}=l,v=$e(l,sj),S=ee({},l,{edge:s,color:p,disabled:h,disableFocusRipple:g,size:y}),j=uj(S);return m.jsx(cj,ee({className:ke(j.root,f),centerRipple:!0,focusRipple:!g,disabled:h,ref:o},v,{ownerState:S,children:c}))});function dj(n){const r=Da(n);return r.body===n?Hl(n).innerWidth>r.documentElement.clientWidth:n.scrollHeight>n.clientHeight}function yl(n,r){r?n.setAttribute("aria-hidden","true"):n.removeAttribute("aria-hidden")}function _v(n){return parseInt(Hl(n).getComputedStyle(n).paddingRight,10)||0}function pj(n){const o=["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].indexOf(n.tagName)!==-1,l=n.tagName==="INPUT"&&n.getAttribute("type")==="hidden";return o||l}function Av(n,r,o,l,s){const c=[r,o,...l];[].forEach.call(n.children,f=>{const p=c.indexOf(f)===-1,h=!pj(f);p&&h&&yl(f,s)})}function Ff(n,r){let o=-1;return n.some((l,s)=>r(l)?(o=s,!0):!1),o}function hj(n,r){const o=[],l=n.container;if(!r.disableScrollLock){if(dj(l)){const f=kR(Da(l));o.push({value:l.style.paddingRight,property:"padding-right",el:l}),l.style.paddingRight=`${_v(l)+f}px`;const p=Da(l).querySelectorAll(".mui-fixed");[].forEach.call(p,h=>{o.push({value:h.style.paddingRight,property:"padding-right",el:h}),h.style.paddingRight=`${_v(h)+f}px`})}let c;if(l.parentNode instanceof DocumentFragment)c=Da(l).body;else{const f=l.parentElement,p=Hl(l);c=(f==null?void 0:f.nodeName)==="HTML"&&p.getComputedStyle(f).overflowY==="scroll"?f:l}o.push({value:c.style.overflow,property:"overflow",el:c},{value:c.style.overflowX,property:"overflow-x",el:c},{value:c.style.overflowY,property:"overflow-y",el:c}),c.style.overflow="hidden"}return()=>{o.forEach(({value:c,el:f,property:p})=>{c?f.style.setProperty(p,c):f.style.removeProperty(p)})}}function mj(n){const r=[];return[].forEach.call(n.children,o=>{o.getAttribute("aria-hidden")==="true"&&r.push(o)}),r}class gj{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(r,o){let l=this.modals.indexOf(r);if(l!==-1)return l;l=this.modals.length,this.modals.push(r),r.modalRef&&yl(r.modalRef,!1);const s=mj(o);Av(o,r.mount,r.modalRef,s,!0);const c=Ff(this.containers,f=>f.container===o);return c!==-1?(this.containers[c].modals.push(r),l):(this.containers.push({modals:[r],container:o,restore:null,hiddenSiblings:s}),l)}mount(r,o){const l=Ff(this.containers,c=>c.modals.indexOf(r)!==-1),s=this.containers[l];s.restore||(s.restore=hj(s,o))}remove(r,o=!0){const l=this.modals.indexOf(r);if(l===-1)return l;const s=Ff(this.containers,f=>f.modals.indexOf(r)!==-1),c=this.containers[s];if(c.modals.splice(c.modals.indexOf(r),1),this.modals.splice(l,1),c.modals.length===0)c.restore&&c.restore(),r.modalRef&&yl(r.modalRef,o),Av(c.container,r.mount,r.modalRef,c.hiddenSiblings,!1),this.containers.splice(s,1);else{const f=c.modals[c.modals.length-1];f.modalRef&&yl(f.modalRef,!1)}return l}isTopModal(r){return this.modals.length>0&&this.modals[this.modals.length-1]===r}}const vj=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'].join(",");function yj(n){const r=parseInt(n.getAttribute("tabindex")||"",10);return Number.isNaN(r)?n.contentEditable==="true"||(n.nodeName==="AUDIO"||n.nodeName==="VIDEO"||n.nodeName==="DETAILS")&&n.getAttribute("tabindex")===null?0:n.tabIndex:r}function bj(n){if(n.tagName!=="INPUT"||n.type!=="radio"||!n.name)return!1;const r=l=>n.ownerDocument.querySelector(`input[type="radio"]${l}`);let o=r(`[name="${n.name}"]:checked`);return o||(o=r(`[name="${n.name}"]`)),o!==n}function xj(n){return!(n.disabled||n.tagName==="INPUT"&&n.type==="hidden"||bj(n))}function Sj(n){const r=[],o=[];return Array.from(n.querySelectorAll(vj)).forEach((l,s)=>{const c=yj(l);c===-1||!xj(l)||(c===0?r.push(l):o.push({documentOrder:s,tabIndex:c,node:l}))}),o.sort((l,s)=>l.tabIndex===s.tabIndex?l.documentOrder-s.documentOrder:l.tabIndex-s.tabIndex).map(l=>l.node).concat(r)}function wj(){return!0}function Ej(n){const{children:r,disableAutoFocus:o=!1,disableEnforceFocus:l=!1,disableRestoreFocus:s=!1,getTabbable:c=Sj,isEnabled:f=wj,open:p}=n,h=R.useRef(!1),g=R.useRef(null),y=R.useRef(null),v=R.useRef(null),S=R.useRef(null),j=R.useRef(!1),w=R.useRef(null),x=la(qs(r),w),_=R.useRef(null);R.useEffect(()=>{!p||!w.current||(j.current=!o)},[o,p]),R.useEffect(()=>{if(!p||!w.current)return;const O=Da(w.current);return w.current.contains(O.activeElement)||(w.current.hasAttribute("tabIndex")||w.current.setAttribute("tabIndex","-1"),j.current&&w.current.focus()),()=>{s||(v.current&&v.current.focus&&(h.current=!0,v.current.focus()),v.current=null)}},[p]),R.useEffect(()=>{if(!p||!w.current)return;const O=Da(w.current),A=M=>{_.current=M,!(l||!f()||M.key!=="Tab")&&O.activeElement===w.current&&M.shiftKey&&(h.current=!0,y.current&&y.current.focus())},N=()=>{const M=w.current;if(M===null)return;if(!O.hasFocus()||!f()||h.current){h.current=!1;return}if(M.contains(O.activeElement)||l&&O.activeElement!==g.current&&O.activeElement!==y.current)return;if(O.activeElement!==S.current)S.current=null;else if(S.current!==null)return;if(!j.current)return;let C=[];if((O.activeElement===g.current||O.activeElement===y.current)&&(C=c(w.current)),C.length>0){var L,D;const z=!!((L=_.current)!=null&&L.shiftKey&&((D=_.current)==null?void 0:D.key)==="Tab"),Y=C[0],K=C[C.length-1];typeof Y!="string"&&typeof K!="string"&&(z?K.focus():Y.focus())}else M.focus()};O.addEventListener("focusin",N),O.addEventListener("keydown",A,!0);const V=setInterval(()=>{O.activeElement&&O.activeElement.tagName==="BODY"&&N()},50);return()=>{clearInterval(V),O.removeEventListener("focusin",N),O.removeEventListener("keydown",A,!0)}},[o,l,s,f,p,c]);const T=O=>{v.current===null&&(v.current=O.relatedTarget),j.current=!0,S.current=O.target;const A=r.props.onFocus;A&&A(O)},E=O=>{v.current===null&&(v.current=O.relatedTarget),j.current=!0};return m.jsxs(R.Fragment,{children:[m.jsx("div",{tabIndex:p?0:-1,onFocus:E,ref:g,"data-testid":"sentinelStart"}),R.cloneElement(r,{ref:x,onFocus:T}),m.jsx("div",{tabIndex:p?0:-1,onFocus:E,ref:y,"data-testid":"sentinelEnd"})]})}function Cj(n){return typeof n=="function"?n():n}const Rj=R.forwardRef(function(r,o){const{children:l,container:s,disablePortal:c=!1}=r,[f,p]=R.useState(null),h=la(R.isValidElement(l)?qs(l):null,o);if(_l(()=>{c||p(Cj(s)||document.body)},[s,c]),_l(()=>{if(f&&!c)return sd(o,f),()=>{sd(o,null)}},[o,f,c]),c){if(R.isValidElement(l)){const g={ref:h};return R.cloneElement(l,g)}return m.jsx(R.Fragment,{children:l})}return m.jsx(R.Fragment,{children:f&&Uv.createPortal(l,f)})}),Jy=n=>n.scrollTop;function ws(n,r){var o,l;const{timeout:s,easing:c,style:f={}}=n;return{duration:(o=f.transitionDuration)!=null?o:typeof s=="number"?s:s[r.mode]||0,easing:(l=f.transitionTimingFunction)!=null?l:typeof c=="object"?c[r.mode]:c,delay:f.transitionDelay}}const Tj=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"],jj={entering:{opacity:1},entered:{opacity:1}},Oj=R.forwardRef(function(r,o){const l=Pd(),s={enter:l.transitions.duration.enteringScreen,exit:l.transitions.duration.leavingScreen},{addEndListener:c,appear:f=!0,children:p,easing:h,in:g,onEnter:y,onEntered:v,onEntering:S,onExit:j,onExited:w,onExiting:x,style:_,timeout:T=s,TransitionComponent:E=$n}=r,O=$e(r,Tj),A=R.useRef(null),N=la(A,qs(p),o),V=ie=>le=>{if(ie){const Z=A.current;le===void 0?ie(Z):ie(Z,le)}},M=V(S),C=V((ie,le)=>{Jy(ie);const Z=ws({style:_,timeout:T,easing:h},{mode:"enter"});ie.style.webkitTransition=l.transitions.create("opacity",Z),ie.style.transition=l.transitions.create("opacity",Z),y&&y(ie,le)}),L=V(v),D=V(x),z=V(ie=>{const le=ws({style:_,timeout:T,easing:h},{mode:"exit"});ie.style.webkitTransition=l.transitions.create("opacity",le),ie.style.transition=l.transitions.create("opacity",le),j&&j(ie)}),Y=V(w),K=ie=>{c&&c(A.current,ie)};return m.jsx(E,ee({appear:f,in:g,nodeRef:A,onEnter:C,onEntered:L,onEntering:M,onExit:z,onExited:Y,onExiting:D,addEndListener:K,timeout:T},O,{children:(ie,le)=>R.cloneElement(p,ee({style:ee({opacity:0,visibility:ie==="exited"&&!g?"hidden":void 0},jj[ie],_,p.props.style),ref:N},le))}))});function Nj(n){return Vt("MuiBackdrop",n)}At("MuiBackdrop",["root","invisible"]);const _j=["children","className","component","components","componentsProps","invisible","open","slotProps","slots","TransitionComponent","transitionDuration"],Aj=n=>{const{classes:r,invisible:o}=n;return Wt({root:["root",o&&"invisible"]},Nj,r)},Mj=ct("div",{name:"MuiBackdrop",slot:"Root",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.root,o.invisible&&r.invisible]}})(({ownerState:n})=>ee({position:"fixed",display:"flex",alignItems:"center",justifyContent:"center",right:0,bottom:0,top:0,left:0,backgroundColor:"rgba(0, 0, 0, 0.5)",WebkitTapHighlightColor:"transparent"},n.invisible&&{backgroundColor:"transparent"})),kj=R.forwardRef(function(r,o){var l,s,c;const f=Xt({props:r,name:"MuiBackdrop"}),{children:p,className:h,component:g="div",components:y={},componentsProps:v={},invisible:S=!1,open:j,slotProps:w={},slots:x={},TransitionComponent:_=Oj,transitionDuration:T}=f,E=$e(f,_j),O=ee({},f,{component:g,invisible:S}),A=Aj(O),N=(l=w.root)!=null?l:v.root;return m.jsx(_,ee({in:j,timeout:T},E,{children:m.jsx(Mj,ee({"aria-hidden":!0},N,{as:(s=(c=x.root)!=null?c:y.Root)!=null?s:g,className:ke(A.root,h,N==null?void 0:N.className),ownerState:ee({},O,N==null?void 0:N.ownerState),classes:A,ref:o,children:p}))}))});function Dj(n){return typeof n=="function"?n():n}function zj(n){return n?n.props.hasOwnProperty("in"):!1}const Lj=new gj;function Bj(n){const{container:r,disableEscapeKeyDown:o=!1,disableScrollLock:l=!1,manager:s=Lj,closeAfterTransition:c=!1,onTransitionEnter:f,onTransitionExited:p,children:h,onClose:g,open:y,rootRef:v}=n,S=R.useRef({}),j=R.useRef(null),w=R.useRef(null),x=la(w,v),[_,T]=R.useState(!y),E=zj(h);let O=!0;(n["aria-hidden"]==="false"||n["aria-hidden"]===!1)&&(O=!1);const A=()=>Da(j.current),N=()=>(S.current.modalRef=w.current,S.current.mount=j.current,S.current),V=()=>{s.mount(N(),{disableScrollLock:l}),w.current&&(w.current.scrollTop=0)},M=ii(()=>{const Z=Dj(r)||A().body;s.add(N(),Z),w.current&&V()}),C=R.useCallback(()=>s.isTopModal(N()),[s]),L=ii(Z=>{j.current=Z,Z&&(y&&C()?V():w.current&&yl(w.current,O))}),D=R.useCallback(()=>{s.remove(N(),O)},[O,s]);R.useEffect(()=>()=>{D()},[D]),R.useEffect(()=>{y?M():(!E||!c)&&D()},[y,D,E,c,M]);const z=Z=>oe=>{var ne;(ne=Z.onKeyDown)==null||ne.call(Z,oe),!(oe.key!=="Escape"||oe.which===229||!C())&&(o||(oe.stopPropagation(),g&&g(oe,"escapeKeyDown")))},Y=Z=>oe=>{var ne;(ne=Z.onClick)==null||ne.call(Z,oe),oe.target===oe.currentTarget&&g&&g(oe,"backdropClick")};return{getRootProps:(Z={})=>{const oe=Fy(n);delete oe.onTransitionEnter,delete oe.onTransitionExited;const ne=ee({},oe,Z);return ee({role:"presentation"},ne,{onKeyDown:z(ne),ref:x})},getBackdropProps:(Z={})=>{const oe=Z;return ee({"aria-hidden":!0},oe,{onClick:Y(oe),open:y})},getTransitionProps:()=>{const Z=()=>{T(!1),f&&f()},oe=()=>{T(!0),p&&p(),c&&D()};return{onEnter:cv(Z,h==null?void 0:h.props.onEnter),onExited:cv(oe,h==null?void 0:h.props.onExited)}},rootRef:x,portalRef:L,isTopModal:C,exited:_,hasTransition:E}}function Uj(n){return Vt("MuiModal",n)}At("MuiModal",["root","hidden","backdrop"]);const $j=["BackdropComponent","BackdropProps","classes","className","closeAfterTransition","children","container","component","components","componentsProps","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","onBackdropClick","onClose","onTransitionEnter","onTransitionExited","open","slotProps","slots","theme"],Hj=n=>{const{open:r,exited:o,classes:l}=n;return Wt({root:["root",!r&&o&&"hidden"],backdrop:["backdrop"]},Uj,l)},qj=ct("div",{name:"MuiModal",slot:"Root",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.root,!o.open&&o.exited&&r.hidden]}})(({theme:n,ownerState:r})=>ee({position:"fixed",zIndex:(n.vars||n).zIndex.modal,right:0,bottom:0,top:0,left:0},!r.open&&r.exited&&{visibility:"hidden"})),Pj=ct(kj,{name:"MuiModal",slot:"Backdrop",overridesResolver:(n,r)=>r.backdrop})({zIndex:-1}),Yj=R.forwardRef(function(r,o){var l,s,c,f,p,h;const g=Xt({name:"MuiModal",props:r}),{BackdropComponent:y=Pj,BackdropProps:v,className:S,closeAfterTransition:j=!1,children:w,container:x,component:_,components:T={},componentsProps:E={},disableAutoFocus:O=!1,disableEnforceFocus:A=!1,disableEscapeKeyDown:N=!1,disablePortal:V=!1,disableRestoreFocus:M=!1,disableScrollLock:C=!1,hideBackdrop:L=!1,keepMounted:D=!1,onBackdropClick:z,open:Y,slotProps:K,slots:ie}=g,le=$e(g,$j),Z=ee({},g,{closeAfterTransition:j,disableAutoFocus:O,disableEnforceFocus:A,disableEscapeKeyDown:N,disablePortal:V,disableRestoreFocus:M,disableScrollLock:C,hideBackdrop:L,keepMounted:D}),{getRootProps:oe,getBackdropProps:ne,getTransitionProps:pe,portalRef:U,isTopModal:re,exited:P,hasTransition:Q}=Bj(ee({},Z,{rootRef:o})),J=ee({},Z,{exited:P}),se=Hj(J),H={};if(w.props.tabIndex===void 0&&(H.tabIndex="-1"),Q){const{onEnter:Ee,onExited:_e}=pe();H.onEnter=Ee,H.onExited=_e}const fe=(l=(s=ie==null?void 0:ie.root)!=null?s:T.Root)!=null?l:qj,B=(c=(f=ie==null?void 0:ie.backdrop)!=null?f:T.Backdrop)!=null?c:y,ae=(p=K==null?void 0:K.root)!=null?p:E.root,he=(h=K==null?void 0:K.backdrop)!=null?h:E.backdrop,ge=dv({elementType:fe,externalSlotProps:ae,externalForwardedProps:le,getSlotProps:oe,additionalProps:{ref:o,as:_},ownerState:J,className:ke(S,ae==null?void 0:ae.className,se==null?void 0:se.root,!J.open&&J.exited&&(se==null?void 0:se.hidden))}),de=dv({elementType:B,externalSlotProps:he,additionalProps:v,getSlotProps:Ee=>ne(ee({},Ee,{onClick:_e=>{z&&z(_e),Ee!=null&&Ee.onClick&&Ee.onClick(_e)}})),className:ke(he==null?void 0:he.className,v==null?void 0:v.className,se==null?void 0:se.backdrop),ownerState:J});return!D&&!Y&&(!Q||P)?null:m.jsx(Rj,{ref:U,container:x,disablePortal:V,children:m.jsxs(fe,ee({},ge,{children:[!L&&y?m.jsx(B,ee({},de)):null,m.jsx(Ej,{disableEnforceFocus:A,disableAutoFocus:O,disableRestoreFocus:M,isEnabled:re,open:Y,children:R.cloneElement(w,H)})]}))})}),Gj=["addEndListener","appear","children","container","direction","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function Vj(n,r,o){const l=r.getBoundingClientRect(),s=o&&o.getBoundingClientRect(),c=Hl(r);let f;if(r.fakeTransform)f=r.fakeTransform;else{const g=c.getComputedStyle(r);f=g.getPropertyValue("-webkit-transform")||g.getPropertyValue("transform")}let p=0,h=0;if(f&&f!=="none"&&typeof f=="string"){const g=f.split("(")[1].split(")")[0].split(",");p=parseInt(g[4],10),h=parseInt(g[5],10)}return n==="left"?s?`translateX(${s.right+p-l.left}px)`:`translateX(${c.innerWidth+p-l.left}px)`:n==="right"?s?`translateX(-${l.right-s.left-p}px)`:`translateX(-${l.left+l.width-p}px)`:n==="up"?s?`translateY(${s.bottom+h-l.top}px)`:`translateY(${c.innerHeight+h-l.top}px)`:s?`translateY(-${l.top-s.top+l.height-h}px)`:`translateY(-${l.top+l.height-h}px)`}function Xj(n){return typeof n=="function"?n():n}function us(n,r,o){const l=Xj(o),s=Vj(n,r,l);s&&(r.style.webkitTransform=s,r.style.transform=s)}const Fj=R.forwardRef(function(r,o){const l=Pd(),s={enter:l.transitions.easing.easeOut,exit:l.transitions.easing.sharp},c={enter:l.transitions.duration.enteringScreen,exit:l.transitions.duration.leavingScreen},{addEndListener:f,appear:p=!0,children:h,container:g,direction:y="down",easing:v=s,in:S,onEnter:j,onEntered:w,onEntering:x,onExit:_,onExited:T,onExiting:E,style:O,timeout:A=c,TransitionComponent:N=$n}=r,V=$e(r,Gj),M=R.useRef(null),C=la(qs(h),M,o),L=ne=>pe=>{ne&&(pe===void 0?ne(M.current):ne(M.current,pe))},D=L((ne,pe)=>{us(y,ne,g),Jy(ne),j&&j(ne,pe)}),z=L((ne,pe)=>{const U=ws({timeout:A,style:O,easing:v},{mode:"enter"});ne.style.webkitTransition=l.transitions.create("-webkit-transform",ee({},U)),ne.style.transition=l.transitions.create("transform",ee({},U)),ne.style.webkitTransform="none",ne.style.transform="none",x&&x(ne,pe)}),Y=L(w),K=L(E),ie=L(ne=>{const pe=ws({timeout:A,style:O,easing:v},{mode:"exit"});ne.style.webkitTransition=l.transitions.create("-webkit-transform",pe),ne.style.transition=l.transitions.create("transform",pe),us(y,ne,g),_&&_(ne)}),le=L(ne=>{ne.style.webkitTransition="",ne.style.transition="",T&&T(ne)}),Z=ne=>{f&&f(M.current,ne)},oe=R.useCallback(()=>{M.current&&us(y,M.current,g)},[y,g]);return R.useEffect(()=>{if(S||y==="down"||y==="right")return;const ne=AR(()=>{M.current&&us(y,M.current,g)}),pe=Hl(M.current);return pe.addEventListener("resize",ne),()=>{ne.clear(),pe.removeEventListener("resize",ne)}},[y,S,g]),R.useEffect(()=>{S||oe()},[S,oe]),m.jsx(N,ee({nodeRef:M,onEnter:D,onEntered:Y,onEntering:z,onExit:ie,onExited:le,onExiting:K,addEndListener:Z,appear:p,in:S,timeout:A},V,{children:(ne,pe)=>R.cloneElement(h,ee({ref:C,style:ee({visibility:ne==="exited"&&!S?"hidden":void 0},O,h.props.style)},pe))}))});function Kj(n){return Vt("MuiDrawer",n)}At("MuiDrawer",["root","docked","paper","paperAnchorLeft","paperAnchorRight","paperAnchorTop","paperAnchorBottom","paperAnchorDockedLeft","paperAnchorDockedRight","paperAnchorDockedTop","paperAnchorDockedBottom","modal"]);const Qj=["BackdropProps"],Zj=["anchor","BackdropProps","children","className","elevation","hideBackdrop","ModalProps","onClose","open","PaperProps","SlideProps","TransitionComponent","transitionDuration","variant"],eb=(n,r)=>{const{ownerState:o}=n;return[r.root,(o.variant==="permanent"||o.variant==="persistent")&&r.docked,r.modal]},Ij=n=>{const{classes:r,anchor:o,variant:l}=n,s={root:["root"],docked:[(l==="permanent"||l==="persistent")&&"docked"],modal:["modal"],paper:["paper",`paperAnchor${qe(o)}`,l!=="temporary"&&`paperAnchorDocked${qe(o)}`]};return Wt(s,Kj,r)},Wj=ct(Yj,{name:"MuiDrawer",slot:"Root",overridesResolver:eb})(({theme:n})=>({zIndex:(n.vars||n).zIndex.drawer})),Mv=ct("div",{shouldForwardProp:Ld,name:"MuiDrawer",slot:"Docked",skipVariantsResolver:!1,overridesResolver:eb})({flex:"0 0 auto"}),Jj=ct(Wy,{name:"MuiDrawer",slot:"Paper",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.paper,r[`paperAnchor${qe(o.anchor)}`],o.variant!=="temporary"&&r[`paperAnchorDocked${qe(o.anchor)}`]]}})(({theme:n,ownerState:r})=>ee({overflowY:"auto",display:"flex",flexDirection:"column",height:"100%",flex:"1 0 auto",zIndex:(n.vars||n).zIndex.drawer,WebkitOverflowScrolling:"touch",position:"fixed",top:0,outline:0},r.anchor==="left"&&{left:0},r.anchor==="top"&&{top:0,left:0,right:0,height:"auto",maxHeight:"100%"},r.anchor==="right"&&{right:0},r.anchor==="bottom"&&{top:"auto",left:0,bottom:0,right:0,height:"auto",maxHeight:"100%"},r.anchor==="left"&&r.variant!=="temporary"&&{borderRight:`1px solid ${(n.vars||n).palette.divider}`},r.anchor==="top"&&r.variant!=="temporary"&&{borderBottom:`1px solid ${(n.vars||n).palette.divider}`},r.anchor==="right"&&r.variant!=="temporary"&&{borderLeft:`1px solid ${(n.vars||n).palette.divider}`},r.anchor==="bottom"&&r.variant!=="temporary"&&{borderTop:`1px solid ${(n.vars||n).palette.divider}`})),tb={left:"right",right:"left",top:"down",bottom:"up"};function e5(n){return["left","right"].indexOf(n)!==-1}function t5({direction:n},r){return n==="rtl"&&e5(r)?tb[r]:r}const n5=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiDrawer"}),s=Pd(),c=GR(),f={enter:s.transitions.duration.enteringScreen,exit:s.transitions.duration.leavingScreen},{anchor:p="left",BackdropProps:h,children:g,className:y,elevation:v=16,hideBackdrop:S=!1,ModalProps:{BackdropProps:j}={},onClose:w,open:x=!1,PaperProps:_={},SlideProps:T,TransitionComponent:E=Fj,transitionDuration:O=f,variant:A="temporary"}=l,N=$e(l.ModalProps,Qj),V=$e(l,Zj),M=R.useRef(!1);R.useEffect(()=>{M.current=!0},[]);const C=t5({direction:c?"rtl":"ltr"},p),D=ee({},l,{anchor:p,elevation:v,open:x,variant:A},V),z=Ij(D),Y=m.jsx(Jj,ee({elevation:A==="temporary"?v:0,square:!0},_,{className:ke(z.paper,_.className),ownerState:D,children:g}));if(A==="permanent")return m.jsx(Mv,ee({className:ke(z.root,z.docked,y),ownerState:D,ref:o},V,{children:Y}));const K=m.jsx(E,ee({in:x,direction:tb[C],timeout:O,appear:M.current},T,{children:Y}));return A==="persistent"?m.jsx(Mv,ee({className:ke(z.root,z.docked,y),ownerState:D,ref:o},V,{children:K})):m.jsx(Wj,ee({BackdropProps:ee({},h,j,{transitionDuration:O}),className:ke(z.root,z.modal,y),open:x,ownerState:D,onClose:w,hideBackdrop:S,ref:o},V,N,{children:K}))}),bl=R.createContext({});function a5(n){return Vt("MuiList",n)}At("MuiList",["root","padding","dense","subheader"]);const r5=["children","className","component","dense","disablePadding","subheader"],i5=n=>{const{classes:r,disablePadding:o,dense:l,subheader:s}=n;return Wt({root:["root",!o&&"padding",l&&"dense",s&&"subheader"]},a5,r)},l5=ct("ul",{name:"MuiList",slot:"Root",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.root,!o.disablePadding&&r.padding,o.dense&&r.dense,o.subheader&&r.subheader]}})(({ownerState:n})=>ee({listStyle:"none",margin:0,padding:0,position:"relative"},!n.disablePadding&&{paddingTop:8,paddingBottom:8},n.subheader&&{paddingTop:0})),o5=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiList"}),{children:s,className:c,component:f="ul",dense:p=!1,disablePadding:h=!1,subheader:g}=l,y=$e(l,r5),v=R.useMemo(()=>({dense:p}),[p]),S=ee({},l,{component:f,dense:p,disablePadding:h}),j=i5(S);return m.jsx(bl.Provider,{value:v,children:m.jsxs(l5,ee({as:f,className:ke(j.root,c),ref:o,ownerState:S},y,{children:[g,s]}))})});function s5(n){return Vt("MuiListItem",n)}const ai=At("MuiListItem",["root","container","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","padding","button","secondaryAction","selected"]),u5=At("MuiListItemButton",["root","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","selected"]);function c5(n){return Vt("MuiListItemSecondaryAction",n)}At("MuiListItemSecondaryAction",["root","disableGutters"]);const f5=["className"],d5=n=>{const{disableGutters:r,classes:o}=n;return Wt({root:["root",r&&"disableGutters"]},c5,o)},p5=ct("div",{name:"MuiListItemSecondaryAction",slot:"Root",overridesResolver:(n,r)=>{const{ownerState:o}=n;return[r.root,o.disableGutters&&r.disableGutters]}})(({ownerState:n})=>ee({position:"absolute",right:16,top:"50%",transform:"translateY(-50%)"},n.disableGutters&&{right:0})),nb=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiListItemSecondaryAction"}),{className:s}=l,c=$e(l,f5),f=R.useContext(bl),p=ee({},l,{disableGutters:f.disableGutters}),h=d5(p);return m.jsx(p5,ee({className:ke(h.root,s),ownerState:p,ref:o},c))});nb.muiName="ListItemSecondaryAction";const h5=["className"],m5=["alignItems","autoFocus","button","children","className","component","components","componentsProps","ContainerComponent","ContainerProps","dense","disabled","disableGutters","disablePadding","divider","focusVisibleClassName","secondaryAction","selected","slotProps","slots"],g5=(n,r)=>{const{ownerState:o}=n;return[r.root,o.dense&&r.dense,o.alignItems==="flex-start"&&r.alignItemsFlexStart,o.divider&&r.divider,!o.disableGutters&&r.gutters,!o.disablePadding&&r.padding,o.button&&r.button,o.hasSecondaryAction&&r.secondaryAction]},v5=n=>{const{alignItems:r,button:o,classes:l,dense:s,disabled:c,disableGutters:f,disablePadding:p,divider:h,hasSecondaryAction:g,selected:y}=n;return Wt({root:["root",s&&"dense",!f&&"gutters",!p&&"padding",h&&"divider",c&&"disabled",o&&"button",r==="flex-start"&&"alignItemsFlexStart",g&&"secondaryAction",y&&"selected"],container:["container"]},s5,l)},y5=ct("div",{name:"MuiListItem",slot:"Root",overridesResolver:g5})(({theme:n,ownerState:r})=>ee({display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",width:"100%",boxSizing:"border-box",textAlign:"left"},!r.disablePadding&&ee({paddingTop:8,paddingBottom:8},r.dense&&{paddingTop:4,paddingBottom:4},!r.disableGutters&&{paddingLeft:16,paddingRight:16},!!r.secondaryAction&&{paddingRight:48}),!!r.secondaryAction&&{[`& > .${u5.root}`]:{paddingRight:48}},{[`&.${ai.focusVisible}`]:{backgroundColor:(n.vars||n).palette.action.focus},[`&.${ai.selected}`]:{backgroundColor:n.vars?`rgba(${n.vars.palette.primary.mainChannel} / ${n.vars.palette.action.selectedOpacity})`:Lt.alpha(n.palette.primary.main,n.palette.action.selectedOpacity),[`&.${ai.focusVisible}`]:{backgroundColor:n.vars?`rgba(${n.vars.palette.primary.mainChannel} / calc(${n.vars.palette.action.selectedOpacity} + ${n.vars.palette.action.focusOpacity}))`:Lt.alpha(n.palette.primary.main,n.palette.action.selectedOpacity+n.palette.action.focusOpacity)}},[`&.${ai.disabled}`]:{opacity:(n.vars||n).palette.action.disabledOpacity}},r.alignItems==="flex-start"&&{alignItems:"flex-start"},r.divider&&{borderBottom:`1px solid ${(n.vars||n).palette.divider}`,backgroundClip:"padding-box"},r.button&&{transition:n.transitions.create("background-color",{duration:n.transitions.duration.shortest}),"&:hover":{textDecoration:"none",backgroundColor:(n.vars||n).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${ai.selected}:hover`]:{backgroundColor:n.vars?`rgba(${n.vars.palette.primary.mainChannel} / calc(${n.vars.palette.action.selectedOpacity} + ${n.vars.palette.action.hoverOpacity}))`:Lt.alpha(n.palette.primary.main,n.palette.action.selectedOpacity+n.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:n.vars?`rgba(${n.vars.palette.primary.mainChannel} / ${n.vars.palette.action.selectedOpacity})`:Lt.alpha(n.palette.primary.main,n.palette.action.selectedOpacity)}}},r.hasSecondaryAction&&{paddingRight:48})),b5=ct("li",{name:"MuiListItem",slot:"Container",overridesResolver:(n,r)=>r.container})({position:"relative"}),ti=R.forwardRef(function(r,o){const l=Xt({props:r,name:"MuiListItem"}),{alignItems:s="center",autoFocus:c=!1,button:f=!1,children:p,className:h,component:g,components:y={},componentsProps:v={},ContainerComponent:S="li",ContainerProps:{className:j}={},dense:w=!1,disabled:x=!1,disableGutters:_=!1,disablePadding:T=!1,divider:E=!1,focusVisibleClassName:O,secondaryAction:A,selected:N=!1,slotProps:V={},slots:M={}}=l,C=$e(l.ContainerProps,h5),L=$e(l,m5),D=R.useContext(bl),z=R.useMemo(()=>({dense:w||D.dense||!1,alignItems:s,disableGutters:_}),[s,D.dense,w,_]),Y=R.useRef(null);_l(()=>{c&&Y.current&&Y.current.focus()},[c]);const K=R.Children.toArray(p),ie=K.length&&MR(K[K.length-1],["ListItemSecondaryAction"]),le=ee({},l,{alignItems:s,autoFocus:c,button:f,dense:z.dense,disabled:x,disableGutters:_,disablePadding:T,divider:E,hasSecondaryAction:ie,selected:N}),Z=v5(le),oe=la(Y,o),ne=M.root||y.Root||y5,pe=V.root||v.root||{},U=ee({className:ke(Z.root,pe.className,h),disabled:x},L);let re=g||"li";return f&&(U.component=g||"div",U.focusVisibleClassName=ke(ai.focusVisible,O),re=Hd),ie?(re=!U.component&&!g?"div":re,S==="li"&&(re==="li"?re="div":U.component==="li"&&(U.component="div")),m.jsx(bl.Provider,{value:z,children:m.jsxs(b5,ee({as:S,className:ke(Z.container,j),ref:oe,ownerState:le},C,{children:[m.jsx(ne,ee({},pe,!dd(ne)&&{as:re,ownerState:ee({},le,pe.ownerState)},U,{children:K})),K.pop()]}))})):m.jsx(bl.Provider,{value:z,children:m.jsxs(ne,ee({},pe,{as:re,ref:oe},!dd(ne)&&{ownerState:ee({},le,pe.ownerState)},U,{children:[K,A&&m.jsx(nb,{children:A})]}))})}),kv=()=>{const{checkContext:n}=R.useContext(mn),r=()=>{const o=window.location.pathname;if(o!=="/login"){const l=window.location.origin+o;localStorage.setItem("logoutReturnPath",l)}Ct.get("/logout").then(({data:l})=>{l.success?n():console.log("LOGOUT: Logout failed")}).catch(l=>{console.error("LOGOUT: Error during logout:",l)})};return m.jsx(Ba,{color:"inherit",sx:{textTransform:"none",color:"#3874CB",fontFamily:"Inter",fontWeight:450,fontSize:"14px",textDecoration:"underline"},onClick:r,disableRipple:!0,children:"Logout"})},Dv=()=>m.jsx(Ba,{color:"inherit",component:Rs,to:"/about",sx:{textTransform:"none",color:"#000000",fontFamily:"Inter",fontWeight:450,fontSize:"14px"},disableRipple:!0,children:"About"}),zv=()=>m.jsx(Ba,{color:"inherit",component:Rs,to:"/account",sx:{textTransform:"none",color:"#000000",fontFamily:"Inter",fontWeight:450,fontSize:"14px"},disableRipple:!0,children:"My Labs"}),x5=()=>{const n=pi(),r=o=>{n.pathname==="/"&&(o.preventDefault(),window.location.reload())};return m.jsxs(Ba,{component:Rs,to:"/",onClick:r,disableRipple:!0,children:[m.jsx("img",{src:"/assets/logos/paperclip.png",alt:"ylabs-logo",className:"mr-2",style:{width:"31.65px",height:"27px"}}),m.jsx("img",{src:"/assets/logos/ylabs-blue.png",alt:"ylabs-logo",style:{width:"65.17px",height:"27px"}})]})},S5=()=>m.jsx(Ba,{color:"inherit",component:Rs,to:"/",sx:{textTransform:"none",color:"#000000",fontFamily:"Inter",fontWeight:450,fontSize:"14px"},disableRipple:!0,children:"Find Labs"}),Lv=()=>{const n=()=>{window.location.reload()};return m.jsxs(Ba,{onClick:n,disableRipple:!0,children:[m.jsx("img",{src:"/assets/logos/paperclip.png",alt:"ylabs-logo",className:"mr-2",style:{width:"31.65px",height:"27px"}}),m.jsx("img",{src:"/assets/logos/ylabs-blue.png",alt:"ylabs-logo",style:{width:"65.17px",height:"27px"}})]})},w5=()=>m.jsx(Ba,{component:"a",href:"https://docs.google.com/forms/d/e/1FAIpQLSf2BE6MBulJHWXhDDp3y4Nixwe6EH0Oo9X1pTo976-KrJKv5g/viewform?usp=dialog",target:"_blank",rel:"noopener noreferrer",color:"inherit",sx:{textTransform:"none",color:"#000000",fontFamily:"Inter",fontWeight:450,fontSize:"14px"},disableRipple:!0,children:"Feedback"}),E5=zd({breakpoints:{values:{xs:0,sm:640,md:768,lg:1024,xl:1280}}}),C5="768px",R5=()=>m.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"4px",padding:"2px"},children:[m.jsx("div",{style:{width:"18px",height:"2px",backgroundColor:"black"}}),m.jsx("div",{style:{width:"18px",height:"2px",backgroundColor:"black"}}),m.jsx("div",{style:{width:"18px",height:"2px",backgroundColor:"black"}})]});function T5(){const{isAuthenticated:n}=R.useContext(mn),[r,o]=R.useState(!1);_R(`(max-width:${C5})`);const l=c=>f=>{f.type==="keydown"&&(f.key==="Tab"||f.key==="Shift")||o(c)},s=()=>{const c={"& .MuiButton-root":{paddingLeft:1,justifyContent:"flex-start",width:"100%"}};return m.jsx(Xf,{sx:{width:250},role:"presentation",onClick:l(!1),onKeyDown:l(!1),children:m.jsx(o5,{children:n?m.jsxs(m.Fragment,{children:[m.jsx(ti,{sx:c,children:m.jsx(S5,{})}),m.jsx(ti,{sx:c,children:m.jsx(zv,{})}),m.jsx(ti,{sx:c,children:m.jsx(Dv,{})}),m.jsx(ti,{sx:c,children:m.jsx(w5,{})}),m.jsx(ti,{sx:c,children:m.jsx(kv,{})})]}):m.jsx(ti,{sx:c,children:m.jsx(Lv,{})})})})};return m.jsx(VT,{theme:E5,children:m.jsx(Xf,{sx:{flexGrow:1},children:m.jsx(YT,{position:"fixed",sx:{backgroundColor:"#FFFFFF",height:{xs:"64px",sm:"64px"},"& .MuiToolbar-root":{minHeight:"64px !important",height:"64px !important",paddingLeft:{lg:"85px"},paddingRight:{lg:"85px"},transition:"padding 0.3s ease"},boxShadow:"0px 1px 5px rgba(0, 0, 0, 0.2)"},children:m.jsxs(WT,{sx:{height:"64px"},children:[n?m.jsx(x5,{}):m.jsx(Lv,{}),m.jsx(ij,{variant:"h6",component:"div",sx:{flexGrow:1}}),n&&m.jsxs(m.Fragment,{children:[m.jsxs(Xf,{sx:{display:{xs:"none",md:"flex"},gap:"14px"},children:[m.jsx(zv,{}),m.jsx(Dv,{}),m.jsx(kv,{})]}),m.jsx(fj,{size:"large",edge:"start",color:"inherit","aria-label":"menu",onClick:l(!0),sx:{marginLeft:"18px",borderRadius:"4px",padding:"8px","&:hover":{backgroundColor:"rgba(0, 0, 0, 0.04)",borderRadius:"4px"}},children:m.jsx(R5,{})}),m.jsx(n5,{anchor:"right",open:r,onClose:l(!1),children:s()})]})]})})})})}const j5=()=>m.jsxs(OS,{children:[m.jsx(T5,{}),m.jsxs(SS,{children:[m.jsx(Na,{path:"/",element:m.jsx(ul,{Component:Pg,unknownBlocked:!0})}),m.jsx(Na,{path:"/about",element:m.jsx(ul,{Component:ST,unknownBlocked:!0})}),m.jsx(Na,{path:"/account",element:m.jsx(ul,{Component:MT,unknownBlocked:!0})}),m.jsx(Na,{path:"/login",element:m.jsx(mT,{})}),m.jsx(Na,{path:"/login-error",element:m.jsx(kS,{Component:DT})}),m.jsx(Na,{path:"/unknown",element:m.jsx(ul,{Component:kT,knownBlocked:!0})}),m.jsx(Na,{path:"/*",element:m.jsx(ul,{Component:Pg,unknownBlocked:!0})})]})]}),O5=({children:n})=>{const[r,o]=R.useState(!0),[l,s]=R.useState(!1),[c,f]=R.useState(),p=R.useCallback(()=>{o(!0),Ct.get("/check",{withCredentials:!0}).then(({data:h})=>{h.auth?(s(!0),f(h.user)):(s(!1),f(void 0)),o(!1)}).catch(h=>{console.error("Auth check failed:",h),s(!1),f(void 0),o(!1),Je({text:"Something went wrong while checking authentication status.",icon:"warning"})})},[]);return R.useEffect(()=>{p()},[p]),m.jsx(mn.Provider,{value:{isLoading:r,isAuthenticated:l,user:c,checkContext:p},children:n})},ab=document.getElementById("root");if(!ab)throw new Error("Root container missing in index.html");const N5=_1.createRoot(ab);N5.render(m.jsx(zt.StrictMode,{children:m.jsx(O5,{children:m.jsx(j5,{})})}));
diff --git a/client/dist/assets/logos/RDB.png b/client/dist/assets/logos/RDB.png
deleted file mode 100644
index 991444b..0000000
Binary files a/client/dist/assets/logos/RDB.png and /dev/null differ
diff --git a/client/dist/assets/logos/YURA.png b/client/dist/assets/logos/YURA.png
deleted file mode 100644
index 6c33bfc..0000000
Binary files a/client/dist/assets/logos/YURA.png and /dev/null differ
diff --git a/client/dist/assets/logos/paperclip.png b/client/dist/assets/logos/paperclip.png
deleted file mode 100644
index 7b4ece1..0000000
Binary files a/client/dist/assets/logos/paperclip.png and /dev/null differ
diff --git a/client/dist/assets/logos/ylabs-blue.png b/client/dist/assets/logos/ylabs-blue.png
deleted file mode 100644
index f5d91ab..0000000
Binary files a/client/dist/assets/logos/ylabs-blue.png and /dev/null differ
diff --git a/client/dist/assets/logos/ylabs-temp-blue.png b/client/dist/assets/logos/ylabs-temp-blue.png
deleted file mode 100644
index 0bfde05..0000000
Binary files a/client/dist/assets/logos/ylabs-temp-blue.png and /dev/null differ
diff --git a/client/dist/assets/logos/ylabs-temp.png b/client/dist/assets/logos/ylabs-temp.png
deleted file mode 100644
index fa776b2..0000000
Binary files a/client/dist/assets/logos/ylabs-temp.png and /dev/null differ
diff --git a/client/dist/favicon.ico b/client/dist/favicon.ico
deleted file mode 100644
index 2bc719b..0000000
Binary files a/client/dist/favicon.ico and /dev/null differ
diff --git a/client/dist/index.html b/client/dist/index.html
deleted file mode 100644
index e924ed2..0000000
--- a/client/dist/index.html
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- YaleLabs
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/client/dist/manifest.json b/client/dist/manifest.json
deleted file mode 100644
index 6416e4f..0000000
--- a/client/dist/manifest.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "short_name": "y/labs",
- "name": "y/labs",
- "icons": [
- {
- "src": "favicon.ico",
- "sizes": "64x64 32x32 24x24 16x16",
- "type": "image/x-icon"
- }
- ],
- "start_url": ".",
- "display": "standalone",
- "theme_color": "#000000",
- "background_color": "#ffffff"
-}
diff --git a/client/dist/robots.txt b/client/dist/robots.txt
deleted file mode 100644
index e9e57dc..0000000
--- a/client/dist/robots.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# https://www.robotstxt.org/robotstxt.html
-User-agent: *
-Disallow:
diff --git a/client/src/pages/analytics.tsx b/client/src/pages/analytics.tsx
index 50586ff..cfb25d9 100644
--- a/client/src/pages/analytics.tsx
+++ b/client/src/pages/analytics.tsx
@@ -47,6 +47,20 @@ interface AnalyticsData {
avgFavorites: number;
viewsByDepartment: Array<{ department: string; totalViews: number; listingCount: number; avgViews: number }>;
};
+ emails: {
+ totalEmails: number;
+ emailsLast7Days: number;
+ emailsToday: number;
+ emailsLast30Days: number;
+ topProfessors: Array<{
+ professorEmail: string;
+ emailCount: number;
+ }>;
+ topUndergrads: Array<{
+ netid: string;
+ emailCount: number;
+ }>;
+ };
listings: {
overview: {
total: number;
@@ -146,20 +160,20 @@ const Analytics = () => {
Visitor Statistics
-
+
-
-
-
@@ -167,18 +181,18 @@ const Analytics = () => {
{/* Login Frequency */}
-
-
-
@@ -237,18 +251,18 @@ const Analytics = () => {
-
-
-
@@ -271,18 +285,18 @@ const Analytics = () => {
{/* View Stats from Events */}
-
-
-
@@ -290,19 +304,115 @@ const Analytics = () => {
{/* Active Users */}
-
-
+ {/* Email Analytics */}
+
+
+ Email Analytics
+
+
+ {/* Email Totals */}
+
+
+
+
+
+
+
+ {/* Top Professors */}
+ {data.emails.topProfessors.length > 0 && (
+
+
+ Top 10 Professors by Emails Received
+
+
+
+
+
+ | Rank |
+ Professor Email |
+ Emails Received |
+
+
+
+ {data.emails.topProfessors.map((prof, index) => (
+
+ | #{index + 1} |
+ {prof.professorEmail} |
+ {prof.emailCount} |
+
+ ))}
+
+
+
+
+ )}
+
+ {/* Top Undergrads */}
+ {data.emails.topUndergrads.length > 0 && (
+
+
+ Top 10 Undergraduates by Emails Sent
+
+
+
+
+
+ | Rank |
+ NetID |
+ Emails Sent |
+
+
+
+ {data.emails.topUndergrads.map((student, index) => (
+
+ | #{index + 1} |
+ {student.netid} |
+ {student.emailCount} |
+
+ ))}
+
+
+
+
+ )}
+
+ {/* No emails message */}
+ {data.emails.totalEmails === 0 && (
+
+ )}
+
+
{/* Most Active Users */}
{data.engagement.mostActiveUsers.length > 0 && (
@@ -381,18 +491,18 @@ const Analytics = () => {
-
-
-
diff --git a/server/package.json b/server/package.json
index 8581f12..afe9339 100644
--- a/server/package.json
+++ b/server/package.json
@@ -24,6 +24,8 @@
"express": "^4.17.3",
"express-session": "^1.17.2",
"mongoose": "^8.0.4",
+ "multer": "^2.0.2",
+ "nodemailer": "^7.0.11",
"passport": "^0.5.2",
"passport-cas": "git+https://github.com/coursetable/passport-cas#79612f1",
"passport-strategy": "^1.0.0"
@@ -33,7 +35,9 @@
"@types/cors": "^2.8.12",
"@types/express": "4.17.13",
"@types/express-session": "^1.17.4",
+ "@types/multer": "^2.0.0",
"@types/node": "20",
+ "@types/nodemailer": "^7.0.4",
"@types/passport": "^1.0.7",
"@types/passport-strategy": "^0.2.35",
"nodemon": "^2.0.15",
diff --git a/server/src/controllers/emailController.ts b/server/src/controllers/emailController.ts
new file mode 100644
index 0000000..f2d29c4
--- /dev/null
+++ b/server/src/controllers/emailController.ts
@@ -0,0 +1,64 @@
+import { Request, Response } from 'express';
+import { sendRelayEmail } from '../services/emailService';
+import { logEvent } from '../services/analyticsService';
+import { AnalyticsEventType } from '../models/analytics';
+
+export const sendContactEmail = async (req: Request, res: Response) => {
+ try {
+ const { studentName, studentEmail, professorEmail, subject, message, cc, bcc } = req.body;
+ const currentUser = req.user as { netId?: string, userType: string };
+
+ if (!studentName || !studentEmail || !professorEmail || !subject || !message) {
+ return res.status(400).json({
+ error: 'Missing required fields',
+ required: ['studentName', 'studentEmail', 'professorEmail', 'subject', 'message']
+ });
+ }
+
+ const ccArray = cc ? (Array.isArray(cc) ? cc : [cc]) : [];
+ const bccArray = bcc ? (Array.isArray(bcc) ? bcc : [bcc]) : [];
+
+ const attachments = (req.files as Express.Multer.File[]) || [];
+
+ await sendRelayEmail({
+ studentName,
+ studentEmail,
+ professorEmail,
+ subject,
+ message,
+ cc: ccArray,
+ bcc: bccArray,
+ attachments
+ });
+
+ if (currentUser?.netId) {
+ await logEvent({
+ eventType: AnalyticsEventType.EMAIL_SENT,
+ netid: currentUser.netId,
+ userType: currentUser.userType,
+ metadata: {
+ studentEmail,
+ professorEmail,
+ subject,
+ attachmentCount: attachments.length,
+ ccCount: ccArray.length,
+ bccCount: bccArray.length
+ }
+ });
+ }
+
+ res.status(200).json({
+ success: true,
+ message: 'Email sent successfully',
+ emailsSent: 1 + ccArray.length + bccArray.length,
+ attachmentCount: attachments.length
+ });
+
+ } catch (error: any) {
+ console.error('Email send error:', error);
+ res.status(500).json({
+ error: 'Failed to send email',
+ details: error.message
+ });
+ }
+};
\ No newline at end of file
diff --git a/server/src/middleware/upload.ts b/server/src/middleware/upload.ts
new file mode 100644
index 0000000..d639e1f
--- /dev/null
+++ b/server/src/middleware/upload.ts
@@ -0,0 +1,21 @@
+// server/src/middleware/upload.ts
+import multer from 'multer';
+
+// Store files in memory as buffers (not saved to disk)
+const storage = multer.memoryStorage();
+
+export const uploadPDFs = multer({
+ storage: storage,
+ limits: {
+ fileSize: 10 * 1024 * 1024, // 10MB per file
+ files: 5 // Max 5 files total
+ },
+ fileFilter: (req, file, cb) => {
+ // Only allow PDFs
+ if (file.mimetype === 'application/pdf') {
+ cb(null, true);
+ } else {
+ cb(new Error('Only PDF files are allowed'));
+ }
+ }
+});
\ No newline at end of file
diff --git a/server/src/models/analytics.ts b/server/src/models/analytics.ts
index f261440..bf88420 100644
--- a/server/src/models/analytics.ts
+++ b/server/src/models/analytics.ts
@@ -13,6 +13,7 @@ export enum AnalyticsEventType {
LISTING_ARCHIVE = 'listing_archive',
LISTING_UNARCHIVE = 'listing_unarchive',
PROFILE_UPDATE = 'profile_update',
+ EMAIL_SENT = 'email_sent', // NEW
}
const analyticsEventSchema = new mongoose.Schema({
diff --git a/server/src/routes/email.ts b/server/src/routes/email.ts
new file mode 100644
index 0000000..8ac4987
--- /dev/null
+++ b/server/src/routes/email.ts
@@ -0,0 +1,9 @@
+import express from 'express';
+import { sendContactEmail } from '../controllers/emailController';
+import { uploadPDFs } from '../middleware/upload';
+
+const router = express.Router();
+
+router.post('/contact', uploadPDFs.array('attachments'), sendContactEmail);
+
+export default router;
\ No newline at end of file
diff --git a/server/src/routes/index.ts b/server/src/routes/index.ts
index b083f06..a973494 100644
--- a/server/src/routes/index.ts
+++ b/server/src/routes/index.ts
@@ -2,11 +2,13 @@ import { Router } from "express";
import UsersRoutes from "./users";
import ListingsRoutes from "./listings";
import AnalyticsRoutes from "./analytics";
+import EmailRoutes from "./email";
const router = Router();
router.use("/listings", ListingsRoutes);
router.use("/users", UsersRoutes);
router.use("/analytics", AnalyticsRoutes);
+router.use("/email", EmailRoutes);
export default router;
\ No newline at end of file
diff --git a/server/src/services/analyticsService.ts b/server/src/services/analyticsService.ts
index d46abf2..adab4b7 100644
--- a/server/src/services/analyticsService.ts
+++ b/server/src/services/analyticsService.ts
@@ -5,7 +5,7 @@ import mongoose from "mongoose";
export interface LogEventParams {
eventType: AnalyticsEventType;
- netid: string;
+ netid: string;
userType: string;
listingId?: string;
searchQuery?: string;
@@ -60,7 +60,7 @@ export const getAnalytics = async () => {
const sevenDaysAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
const thirtyDaysAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
-
+
const visitorStats = await AnalyticsEvent.aggregate([
{
$match: {
@@ -408,6 +408,86 @@ export const getAnalytics = async () => {
}
]);
+
+ const emailStats = await AnalyticsEvent.aggregate([
+ {
+ $facet: {
+ // Email totals
+ emailTotals: [
+ {
+ $match: {
+ eventType: AnalyticsEventType.EMAIL_SENT
+ }
+ },
+ {
+ $group: {
+ _id: null,
+ totalEmails: { $sum: 1 },
+ emailsLast7Days: {
+ $sum: { $cond: [{ $gte: ["$timestamp", sevenDaysAgo] }, 1, 0] }
+ },
+ emailsToday: {
+ $sum: { $cond: [{ $gte: ["$timestamp", today] }, 1, 0] }
+ },
+ emailsLast30Days: {
+ $sum: { $cond: [{ $gte: ["$timestamp", thirtyDaysAgo] }, 1, 0] }
+ }
+ }
+ }
+ ],
+ // Top 10 professors receiving emails
+ topProfessors: [
+ {
+ $match: {
+ eventType: AnalyticsEventType.EMAIL_SENT,
+ "metadata.professorEmail": { $exists: true }
+ }
+ },
+ {
+ $group: {
+ _id: "$metadata.professorEmail",
+ emailCount: { $sum: 1 }
+ }
+ },
+ { $sort: { emailCount: -1 } },
+ { $limit: 10 },
+ {
+ $project: {
+ _id: 0,
+ professorEmail: "$_id",
+ emailCount: 1
+ }
+ }
+ ],
+ // Top 10 students sending emails (undergrads only)
+ topUndergrads: [
+ {
+ $match: {
+ eventType: AnalyticsEventType.EMAIL_SENT,
+ userType: "undergraduate",
+ netid: { $exists: true }
+ }
+ },
+ {
+ $group: {
+ _id: "$netid",
+ emailCount: { $sum: 1 }
+ }
+ },
+ { $sort: { emailCount: -1 } },
+ { $limit: 10 },
+ {
+ $project: {
+ _id: 0,
+ netid: "$_id",
+ emailCount: 1
+ }
+ }
+ ]
+ }
+ }
+ ]);
+
// ==================== LISTING ANALYTICS - from db ====================
const listingStats = await Listing.aggregate([
@@ -680,6 +760,14 @@ export const getAnalytics = async () => {
avgFavorites: listings.viewsAndFavorites[0]?.avgFavorites || 0,
viewsByDepartment: listings.viewsByDepartment || []
},
+ emails: {
+ totalEmails: emailStats[0]?.emailTotals[0]?.totalEmails || 0,
+ emailsLast7Days: emailStats[0]?.emailTotals[0]?.emailsLast7Days || 0,
+ emailsToday: emailStats[0]?.emailTotals[0]?.emailsToday || 0,
+ emailsLast30Days: emailStats[0]?.emailTotals[0]?.emailsLast30Days || 0,
+ topProfessors: emailStats[0]?.topProfessors || [],
+ topUndergrads: emailStats[0]?.topUndergrads || []
+ },
listings: {
overview: listings.overview[0] || { total: 0, active: 0, archived: 0, unconfirmed: 0 },
newListingsLast7Days: listings.newListingsLast7Days[0]?.count || 0,
diff --git a/server/src/services/emailService.ts b/server/src/services/emailService.ts
new file mode 100644
index 0000000..04a82fa
--- /dev/null
+++ b/server/src/services/emailService.ts
@@ -0,0 +1,54 @@
+import nodemailer from 'nodemailer';
+import dotenv from 'dotenv';
+
+dotenv.config();
+
+interface SendRelayEmailParams {
+ studentName: string;
+ studentEmail: string;
+ professorEmail: string;
+ subject: string;
+ message: string;
+ cc?: string[];
+ bcc?: string[];
+ attachments?: Express.Multer.File[];
+}
+
+export async function sendRelayEmail({
+ studentName,
+ studentEmail,
+ professorEmail,
+ subject,
+ message,
+ cc = [],
+ bcc = [],
+ attachments = []
+}: SendRelayEmailParams): Promise
{
+ const transporter = nodemailer.createTransport({
+ host: process.env.EMAIL_HOST,
+ port: Number(process.env.EMAIL_PORT),
+ secure: false,
+ auth: {
+ user: process.env.EMAIL_USER,
+ pass: process.env.EMAIL_PASSWORD
+ }
+ });
+
+ // Format attachments for nodemailer
+ const formattedAttachments = attachments.map(file => ({
+ filename: file.originalname,
+ content: file.buffer
+ }));
+
+ await transporter.sendMail({
+ from: `"${studentName}" <${process.env.EMAIL_USER}>`,
+ to: professorEmail,
+ cc: cc.length > 0 ? cc : undefined,
+ bcc: bcc.length > 0 ? bcc : undefined,
+ replyTo: studentEmail,
+ subject: subject,
+ text: message,
+ html: `${message.replace(/\n/g, '
')}
`,
+ attachments: formattedAttachments
+ });
+}
\ No newline at end of file
diff --git a/server/src/testing/test.pdf b/server/src/testing/test.pdf
new file mode 100644
index 0000000..4a032f4
Binary files /dev/null and b/server/src/testing/test.pdf differ
diff --git a/server/src/testing/testEmail.ts b/server/src/testing/testEmail.ts
new file mode 100644
index 0000000..9dcc005
--- /dev/null
+++ b/server/src/testing/testEmail.ts
@@ -0,0 +1,44 @@
+// server/src/testEmail.ts
+import nodemailer from 'nodemailer';
+import dotenv from 'dotenv';
+import path from 'path';
+
+// Explicitly load .env from server directory
+dotenv.config({ path: path.resolve(__dirname, '../../.env') });
+
+async function testEmail() {
+ // Debug: Check if env vars are loaded
+ console.log('EMAIL_HOST:', process.env.EMAIL_HOST);
+ console.log('EMAIL_PORT:', process.env.EMAIL_PORT);
+ console.log('EMAIL_USER:', process.env.EMAIL_USER);
+ console.log('EMAIL_PASSWORD:', process.env.EMAIL_PASSWORD ? '***SET***' : 'NOT SET');
+
+ if (!process.env.EMAIL_HOST || !process.env.EMAIL_USER || !process.env.EMAIL_PASSWORD) {
+ console.error('❌ Environment variables not loaded! Check your .env file.');
+ return;
+ }
+
+ const transporter = nodemailer.createTransport({
+ host: process.env.EMAIL_HOST,
+ port: Number(process.env.EMAIL_PORT),
+ secure: false,
+ auth: {
+ user: process.env.EMAIL_USER,
+ pass: process.env.EMAIL_PASSWORD
+ }
+ });
+
+ try {
+ await transporter.sendMail({
+ from: process.env.EMAIL_USER,
+ to: 'sebastian.gonzalez@yale.edu', // PUT YOUR EMAIL HERE
+ subject: 'Test Email from YaleLabs',
+ text: 'If you receive this, the email service is working!'
+ });
+ console.log('✅ Test email sent successfully!');
+ } catch (error) {
+ console.error('❌ Error sending test email:', error);
+ }
+}
+
+testEmail();
\ No newline at end of file
diff --git a/server/src/types/express-session.d.ts b/server/src/types/express-session.d.ts
new file mode 100644
index 0000000..e5e9f0c
--- /dev/null
+++ b/server/src/types/express-session.d.ts
@@ -0,0 +1,7 @@
+import 'express-session';
+
+declare module 'express-session' {
+ interface SessionData {
+ visitorLogged?: boolean;
+ }
+}
diff --git a/server/tsconfig.json b/server/tsconfig.json
index 754dc67..98c10ac 100644
--- a/server/tsconfig.json
+++ b/server/tsconfig.json
@@ -3,7 +3,9 @@
"target": "es2017",
"module": "commonjs",
"moduleResolution": "node",
- "lib": ["es2017"],
+ "lib": [
+ "es2017"
+ ],
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
@@ -13,8 +15,16 @@
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"outDir": "build",
- "types": ["node"]
+ "typeRoots": [
+ "./src/types",
+ "./node_modules/@types"
+ ]
},
- "include": ["src/**/*"],
- "exclude": ["node_modules/**/*", "build/**/*"]
+ "include": [
+ "src/**/*"
+ ],
+ "exclude": [
+ "node_modules/**/*",
+ "build/**/*"
+ ]
}
\ No newline at end of file
diff --git a/server/yarn.lock b/server/yarn.lock
index 736ca31..ac70663 100644
--- a/server/yarn.lock
+++ b/server/yarn.lock
@@ -5,6 +5,551 @@ __metadata:
version: 8
cacheKey: 10c0
+"@aws-crypto/sha256-browser@npm:5.2.0":
+ version: 5.2.0
+ resolution: "@aws-crypto/sha256-browser@npm:5.2.0"
+ dependencies:
+ "@aws-crypto/sha256-js": "npm:^5.2.0"
+ "@aws-crypto/supports-web-crypto": "npm:^5.2.0"
+ "@aws-crypto/util": "npm:^5.2.0"
+ "@aws-sdk/types": "npm:^3.222.0"
+ "@aws-sdk/util-locate-window": "npm:^3.0.0"
+ "@smithy/util-utf8": "npm:^2.0.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/05f6d256794df800fe9aef5f52f2ac7415f7f3117d461f85a6aecaa4e29e91527b6fd503681a17136fa89e9dd3d916e9c7e4cfb5eba222875cb6c077bdc1d00d
+ languageName: node
+ linkType: hard
+
+"@aws-crypto/sha256-js@npm:5.2.0, @aws-crypto/sha256-js@npm:^5.2.0":
+ version: 5.2.0
+ resolution: "@aws-crypto/sha256-js@npm:5.2.0"
+ dependencies:
+ "@aws-crypto/util": "npm:^5.2.0"
+ "@aws-sdk/types": "npm:^3.222.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/6c48701f8336341bb104dfde3d0050c89c288051f6b5e9bdfeb8091cf3ffc86efcd5c9e6ff2a4a134406b019c07aca9db608128f8d9267c952578a3108db9fd1
+ languageName: node
+ linkType: hard
+
+"@aws-crypto/supports-web-crypto@npm:^5.2.0":
+ version: 5.2.0
+ resolution: "@aws-crypto/supports-web-crypto@npm:5.2.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/4d2118e29d68ca3f5947f1e37ce1fbb3239a0c569cc938cdc8ab8390d595609b5caf51a07c9e0535105b17bf5c52ea256fed705a07e9681118120ab64ee73af2
+ languageName: node
+ linkType: hard
+
+"@aws-crypto/util@npm:^5.2.0":
+ version: 5.2.0
+ resolution: "@aws-crypto/util@npm:5.2.0"
+ dependencies:
+ "@aws-sdk/types": "npm:^3.222.0"
+ "@smithy/util-utf8": "npm:^2.0.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/0362d4c197b1fd64b423966945130207d1fe23e1bb2878a18e361f7743c8d339dad3f8729895a29aa34fff6a86c65f281cf5167c4bf253f21627ae80b6dd2951
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/client-sesv2@npm:^3.839.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/client-sesv2@npm:3.940.0"
+ dependencies:
+ "@aws-crypto/sha256-browser": "npm:5.2.0"
+ "@aws-crypto/sha256-js": "npm:5.2.0"
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/credential-provider-node": "npm:3.940.0"
+ "@aws-sdk/middleware-host-header": "npm:3.936.0"
+ "@aws-sdk/middleware-logger": "npm:3.936.0"
+ "@aws-sdk/middleware-recursion-detection": "npm:3.936.0"
+ "@aws-sdk/middleware-user-agent": "npm:3.940.0"
+ "@aws-sdk/region-config-resolver": "npm:3.936.0"
+ "@aws-sdk/signature-v4-multi-region": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@aws-sdk/util-endpoints": "npm:3.936.0"
+ "@aws-sdk/util-user-agent-browser": "npm:3.936.0"
+ "@aws-sdk/util-user-agent-node": "npm:3.940.0"
+ "@smithy/config-resolver": "npm:^4.4.3"
+ "@smithy/core": "npm:^3.18.5"
+ "@smithy/fetch-http-handler": "npm:^5.3.6"
+ "@smithy/hash-node": "npm:^4.2.5"
+ "@smithy/invalid-dependency": "npm:^4.2.5"
+ "@smithy/middleware-content-length": "npm:^4.2.5"
+ "@smithy/middleware-endpoint": "npm:^4.3.12"
+ "@smithy/middleware-retry": "npm:^4.4.12"
+ "@smithy/middleware-serde": "npm:^4.2.6"
+ "@smithy/middleware-stack": "npm:^4.2.5"
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/node-http-handler": "npm:^4.4.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/smithy-client": "npm:^4.9.8"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/url-parser": "npm:^4.2.5"
+ "@smithy/util-base64": "npm:^4.3.0"
+ "@smithy/util-body-length-browser": "npm:^4.2.0"
+ "@smithy/util-body-length-node": "npm:^4.2.1"
+ "@smithy/util-defaults-mode-browser": "npm:^4.3.11"
+ "@smithy/util-defaults-mode-node": "npm:^4.2.14"
+ "@smithy/util-endpoints": "npm:^3.2.5"
+ "@smithy/util-middleware": "npm:^4.2.5"
+ "@smithy/util-retry": "npm:^4.2.5"
+ "@smithy/util-utf8": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/719d552b5255fe9f445c4bf30e106851473534e9ed9061055d24a5d0f423fece68a7857158803aa30a7e32041a7b73aba195719e5198db577f417432bbb06f7b
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/client-sso@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/client-sso@npm:3.940.0"
+ dependencies:
+ "@aws-crypto/sha256-browser": "npm:5.2.0"
+ "@aws-crypto/sha256-js": "npm:5.2.0"
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/middleware-host-header": "npm:3.936.0"
+ "@aws-sdk/middleware-logger": "npm:3.936.0"
+ "@aws-sdk/middleware-recursion-detection": "npm:3.936.0"
+ "@aws-sdk/middleware-user-agent": "npm:3.940.0"
+ "@aws-sdk/region-config-resolver": "npm:3.936.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@aws-sdk/util-endpoints": "npm:3.936.0"
+ "@aws-sdk/util-user-agent-browser": "npm:3.936.0"
+ "@aws-sdk/util-user-agent-node": "npm:3.940.0"
+ "@smithy/config-resolver": "npm:^4.4.3"
+ "@smithy/core": "npm:^3.18.5"
+ "@smithy/fetch-http-handler": "npm:^5.3.6"
+ "@smithy/hash-node": "npm:^4.2.5"
+ "@smithy/invalid-dependency": "npm:^4.2.5"
+ "@smithy/middleware-content-length": "npm:^4.2.5"
+ "@smithy/middleware-endpoint": "npm:^4.3.12"
+ "@smithy/middleware-retry": "npm:^4.4.12"
+ "@smithy/middleware-serde": "npm:^4.2.6"
+ "@smithy/middleware-stack": "npm:^4.2.5"
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/node-http-handler": "npm:^4.4.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/smithy-client": "npm:^4.9.8"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/url-parser": "npm:^4.2.5"
+ "@smithy/util-base64": "npm:^4.3.0"
+ "@smithy/util-body-length-browser": "npm:^4.2.0"
+ "@smithy/util-body-length-node": "npm:^4.2.1"
+ "@smithy/util-defaults-mode-browser": "npm:^4.3.11"
+ "@smithy/util-defaults-mode-node": "npm:^4.2.14"
+ "@smithy/util-endpoints": "npm:^3.2.5"
+ "@smithy/util-middleware": "npm:^4.2.5"
+ "@smithy/util-retry": "npm:^4.2.5"
+ "@smithy/util-utf8": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/c0f6c8bc4ad55f2b573fbc40f472b974679c11c6e2bc224b1b9a4f4a9134895b37127eaaa588d56cb2e32522de4921dd813ae7229f5db4fedeeea1d06500e74c
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/core@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/core@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/types": "npm:3.936.0"
+ "@aws-sdk/xml-builder": "npm:3.930.0"
+ "@smithy/core": "npm:^3.18.5"
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/signature-v4": "npm:^5.3.5"
+ "@smithy/smithy-client": "npm:^4.9.8"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-base64": "npm:^4.3.0"
+ "@smithy/util-middleware": "npm:^4.2.5"
+ "@smithy/util-utf8": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/090b960007d3fe7a6f54d6e9a739f7de51c25d6e8f7519821ed94d8760508a9a1f034bc4ffc8b87a797eba485baf7024d45fc86556ce224b35da2530fe85af20
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/credential-provider-env@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/credential-provider-env@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/538ede72ad6357ccc613957b11bcd254789cd502e14938c26870c326ff1518df9bb5b23fd4d1139bac77b4394ea6a1a621ad025609d62f86d7b363636ca73e5e
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/credential-provider-http@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/credential-provider-http@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/fetch-http-handler": "npm:^5.3.6"
+ "@smithy/node-http-handler": "npm:^4.4.5"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/smithy-client": "npm:^4.9.8"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-stream": "npm:^4.5.6"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/a3092b60041cb5be3d07891c1be959b14420a5d630372030877970c7d111c0ca8881daeb6740c16767c3a587a9a65d5e6aa8081a73a58a6cccefc98f9307a9e3
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/credential-provider-ini@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/credential-provider-ini@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/credential-provider-env": "npm:3.940.0"
+ "@aws-sdk/credential-provider-http": "npm:3.940.0"
+ "@aws-sdk/credential-provider-login": "npm:3.940.0"
+ "@aws-sdk/credential-provider-process": "npm:3.940.0"
+ "@aws-sdk/credential-provider-sso": "npm:3.940.0"
+ "@aws-sdk/credential-provider-web-identity": "npm:3.940.0"
+ "@aws-sdk/nested-clients": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/credential-provider-imds": "npm:^4.2.5"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/shared-ini-file-loader": "npm:^4.4.0"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/28b78575da447ea9a8f21c926fe0b1ef037e886a1676d60e168702abbeb070241a869b758bab1522e9e97ad7940376e30e7866c72201fab46a3dd67c4073af94
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/credential-provider-login@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/credential-provider-login@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/nested-clients": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/shared-ini-file-loader": "npm:^4.4.0"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/a408b413bf13c73c25bec80323e0cb59a86cf44b724156db6fd34cd8ae72b55af81a0c7c6325d1f99b85bd5f04aa64edadd06910c4f7ab0e5f8a714c54aad26e
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/credential-provider-node@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/credential-provider-node@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/credential-provider-env": "npm:3.940.0"
+ "@aws-sdk/credential-provider-http": "npm:3.940.0"
+ "@aws-sdk/credential-provider-ini": "npm:3.940.0"
+ "@aws-sdk/credential-provider-process": "npm:3.940.0"
+ "@aws-sdk/credential-provider-sso": "npm:3.940.0"
+ "@aws-sdk/credential-provider-web-identity": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/credential-provider-imds": "npm:^4.2.5"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/shared-ini-file-loader": "npm:^4.4.0"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/ecaa866d4cf9bce5cdf71e67d76e3e1b35e0f57b266f2b3447c08ccd5555c5b19d83a015cc153d2b6165ff6b1fce0c55d08eb306dcde909583741200ae287469
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/credential-provider-process@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/credential-provider-process@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/shared-ini-file-loader": "npm:^4.4.0"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/42aba573606be61f5d82120fa5379ff6eaf819be0972b20b08422a25b7f41c2113eaa762476590a08912ca248bd7eddf3504bd6620b18a98574450315b4962d0
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/credential-provider-sso@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/credential-provider-sso@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/client-sso": "npm:3.940.0"
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/token-providers": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/shared-ini-file-loader": "npm:^4.4.0"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/fd6397d6df02ce23b1151a4453d35fd123b15a71322aab3e50885268ecac21cd441bc02063b0ad834d57ce57e70c3cf07f1e6ad75814e7baf74741a5919d3e9c
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/credential-provider-web-identity@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/credential-provider-web-identity@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/nested-clients": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/shared-ini-file-loader": "npm:^4.4.0"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/9967bbde6603372b89a600cfed211caa769709e34b27f90f627ee5b60c5994b6db0f17b4bbd1ea4ac133092691dc94a0776ba82a187075e875005c864eb7e851
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/middleware-host-header@npm:3.936.0":
+ version: 3.936.0
+ resolution: "@aws-sdk/middleware-host-header@npm:3.936.0"
+ dependencies:
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/524221650f88650c4a9cc60f7ed1bdd215f4112e120ad75807ee9b51358a1016c867e0b696cae91256aac084fa091cb230b2f579388c4b59e680b8a3e2bc7d29
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/middleware-logger@npm:3.936.0":
+ version: 3.936.0
+ resolution: "@aws-sdk/middleware-logger@npm:3.936.0"
+ dependencies:
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/9f94ae2f30a7b42d7423e3bee868e08d5ac1314e5ed9882fd5e457cb50ba87fcc7c859c0629210a64b1b9a595844988876a005c2a02f63c615ae19eee9baafba
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/middleware-recursion-detection@npm:3.936.0":
+ version: 3.936.0
+ resolution: "@aws-sdk/middleware-recursion-detection@npm:3.936.0"
+ dependencies:
+ "@aws-sdk/types": "npm:3.936.0"
+ "@aws/lambda-invoke-store": "npm:^0.2.0"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/3230f4868899d2c811231f1edf19c768feb2d250bace28644672a4ddf53c4fe1f7a88c3cbbafa2bade08cb685a60743fc8dfb70c893081a1805cc3e79e76244b
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/middleware-sdk-s3@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/middleware-sdk-s3@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@aws-sdk/util-arn-parser": "npm:3.893.0"
+ "@smithy/core": "npm:^3.18.5"
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/signature-v4": "npm:^5.3.5"
+ "@smithy/smithy-client": "npm:^4.9.8"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-config-provider": "npm:^4.2.0"
+ "@smithy/util-middleware": "npm:^4.2.5"
+ "@smithy/util-stream": "npm:^4.5.6"
+ "@smithy/util-utf8": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/ecd85d7c391f53d5dc26658289428c2444781b1e612d98c8d86dca4d8ff07ac473886cfd07f396592ab14abc59651d7954e2fa532e2efbb84e29f5ecbc69f00f
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/middleware-user-agent@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/middleware-user-agent@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@aws-sdk/util-endpoints": "npm:3.936.0"
+ "@smithy/core": "npm:^3.18.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/1756e35c96c5289857c65c8620d9e3afe5b14259fb0bb1290f8f08d879dd62a44569b28c505e2a56e641300df4e15fd7f29e788d1301ee2a0926caab6d2d0b9f
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/nested-clients@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/nested-clients@npm:3.940.0"
+ dependencies:
+ "@aws-crypto/sha256-browser": "npm:5.2.0"
+ "@aws-crypto/sha256-js": "npm:5.2.0"
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/middleware-host-header": "npm:3.936.0"
+ "@aws-sdk/middleware-logger": "npm:3.936.0"
+ "@aws-sdk/middleware-recursion-detection": "npm:3.936.0"
+ "@aws-sdk/middleware-user-agent": "npm:3.940.0"
+ "@aws-sdk/region-config-resolver": "npm:3.936.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@aws-sdk/util-endpoints": "npm:3.936.0"
+ "@aws-sdk/util-user-agent-browser": "npm:3.936.0"
+ "@aws-sdk/util-user-agent-node": "npm:3.940.0"
+ "@smithy/config-resolver": "npm:^4.4.3"
+ "@smithy/core": "npm:^3.18.5"
+ "@smithy/fetch-http-handler": "npm:^5.3.6"
+ "@smithy/hash-node": "npm:^4.2.5"
+ "@smithy/invalid-dependency": "npm:^4.2.5"
+ "@smithy/middleware-content-length": "npm:^4.2.5"
+ "@smithy/middleware-endpoint": "npm:^4.3.12"
+ "@smithy/middleware-retry": "npm:^4.4.12"
+ "@smithy/middleware-serde": "npm:^4.2.6"
+ "@smithy/middleware-stack": "npm:^4.2.5"
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/node-http-handler": "npm:^4.4.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/smithy-client": "npm:^4.9.8"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/url-parser": "npm:^4.2.5"
+ "@smithy/util-base64": "npm:^4.3.0"
+ "@smithy/util-body-length-browser": "npm:^4.2.0"
+ "@smithy/util-body-length-node": "npm:^4.2.1"
+ "@smithy/util-defaults-mode-browser": "npm:^4.3.11"
+ "@smithy/util-defaults-mode-node": "npm:^4.2.14"
+ "@smithy/util-endpoints": "npm:^3.2.5"
+ "@smithy/util-middleware": "npm:^4.2.5"
+ "@smithy/util-retry": "npm:^4.2.5"
+ "@smithy/util-utf8": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/6695cd044d5b43f26a6d2ae533dcd56f6a8780dc0a19e152af1dfb1017fa1a1813c1e742ca7ba608561f881f4cd4e18f957293698d880d857b460dd715b8ac50
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/region-config-resolver@npm:3.936.0":
+ version: 3.936.0
+ resolution: "@aws-sdk/region-config-resolver@npm:3.936.0"
+ dependencies:
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/config-resolver": "npm:^4.4.3"
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/67ecf8f3575abe5c6b802afd6d8ba73ce54a97e6ff613eee36c4536a61ecfc732e2ac3a938829275122c4e645b40c0838c9a3904cebf6fc6d229c149e623a7f3
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/signature-v4-multi-region@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/signature-v4-multi-region@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/middleware-sdk-s3": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/signature-v4": "npm:^5.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/877127f4f3a64e62e110b80b7f1c0f6e99a670e2263d4efa2c46c5ae249ee9cf5081a1e38e1f8c3df2fedffb772f6a33f348f95b2301246c9b37b46c32aa055e
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/token-providers@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/token-providers@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/core": "npm:3.940.0"
+ "@aws-sdk/nested-clients": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/shared-ini-file-loader": "npm:^4.4.0"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/6dc90385d521521124eb65a1acdc28c792f5c353c15cc61ba08f7e2dae45f3ad81e02603eb0c244f453409becf73ec7c4e92a32048a464f07e85055a84faf0d7
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/types@npm:3.936.0, @aws-sdk/types@npm:^3.222.0":
+ version: 3.936.0
+ resolution: "@aws-sdk/types@npm:3.936.0"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/6f7eeabd0ada675b3b8e969d512f7ce29602a1dd6af154e3d6977f0a6f03084ca3be9498d091142369636a7b7d9f1b22e58156c741d1d088c4939581848054bb
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/util-arn-parser@npm:3.893.0":
+ version: 3.893.0
+ resolution: "@aws-sdk/util-arn-parser@npm:3.893.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/c8bbc1e258674e791929f1259a3f2422433c0b8c5470808a958ef4320bb9ca7c27783b617da3b9e04d9a1cd1d0b547da2858249dbec816f1098c02731b551aac
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/util-endpoints@npm:3.936.0":
+ version: 3.936.0
+ resolution: "@aws-sdk/util-endpoints@npm:3.936.0"
+ dependencies:
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/url-parser": "npm:^4.2.5"
+ "@smithy/util-endpoints": "npm:^3.2.5"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/13b1ae923ea8c09cb8ea91e7fec6d4c3138300140a23a437348dea826f50c00bf1331d4b1b1169232bedb311cbc3cc51284bd8d57820d9b028f928d06c61573f
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/util-locate-window@npm:^3.0.0":
+ version: 3.893.0
+ resolution: "@aws-sdk/util-locate-window@npm:3.893.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/ed2232d1eff567a7fa96bed87d56f03ac183dc20ba0ea262edb35f0b66aea201b987f447a5c383adc5694c80275700345946c0ad3183b30a6f9ec2f89be789d8
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/util-user-agent-browser@npm:3.936.0":
+ version: 3.936.0
+ resolution: "@aws-sdk/util-user-agent-browser@npm:3.936.0"
+ dependencies:
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/types": "npm:^4.9.0"
+ bowser: "npm:^2.11.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/5dec40c3ca7cfe0779cadcd8c67d8aa174a385bd38ebe0c54b01b2554c833519dd2714f68aa1809d5268d8614167f3187199f5f28559a2992cc5a5a816458e64
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/util-user-agent-node@npm:3.940.0":
+ version: 3.940.0
+ resolution: "@aws-sdk/util-user-agent-node@npm:3.940.0"
+ dependencies:
+ "@aws-sdk/middleware-user-agent": "npm:3.940.0"
+ "@aws-sdk/types": "npm:3.936.0"
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ peerDependencies:
+ aws-crt: ">=1.0.0"
+ peerDependenciesMeta:
+ aws-crt:
+ optional: true
+ checksum: 10c0/0287c87d3e4bb8f679c54123314ed164013b357ad7a8eefd1685ecef14c6fed062e31e9a689c6e761acc49a1f3eb1903a95d450f823c76fb89f49a4729a83a93
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/xml-builder@npm:3.930.0":
+ version: 3.930.0
+ resolution: "@aws-sdk/xml-builder@npm:3.930.0"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ fast-xml-parser: "npm:5.2.5"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/f46b8544ef54083944c179e85e3468023f5b960354f0c4e0c5261918c42d6a56a23807d3c88a73fe982b38f40e5d4e7e9e6885ebad7fec0df7be83dc7596abb6
+ languageName: node
+ linkType: hard
+
+"@aws/lambda-invoke-store@npm:^0.2.0":
+ version: 0.2.1
+ resolution: "@aws/lambda-invoke-store@npm:0.2.1"
+ checksum: 10c0/7fdfd6e4b175d36dae522556efc51b0f7445af3d55e516acee0f4e52946833ec9655be45cb3bdefec5974c0c6e5bcca3ad1bce7d397eb5f7a2393623867fb4b2
+ languageName: node
+ linkType: hard
+
"@cspotcode/source-map-consumer@npm:0.8.0":
version: 0.8.0
resolution: "@cspotcode/source-map-consumer@npm:0.8.0"
@@ -89,6 +634,495 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/abort-controller@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/abort-controller@npm:4.2.5"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/aaca4d8a87100f4b8805bb034cae9315b9bf813a029576d3417a1a1ecd5c1d9e92907349ffaf9d6606c4fc20483ac28864565c1e6dec6f2a7d8709522c8b5290
+ languageName: node
+ linkType: hard
+
+"@smithy/config-resolver@npm:^4.4.3":
+ version: 4.4.3
+ resolution: "@smithy/config-resolver@npm:4.4.3"
+ dependencies:
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-config-provider": "npm:^4.2.0"
+ "@smithy/util-endpoints": "npm:^3.2.5"
+ "@smithy/util-middleware": "npm:^4.2.5"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/e28844ea32776b2d2790e134bdfcb700f5a8f4bcd7aeac9869ddac635012eb2911d5abbddf36ae63703dff3af435015095b381b17a3cb4d2b1ba1c02cdc9f314
+ languageName: node
+ linkType: hard
+
+"@smithy/core@npm:^3.18.5":
+ version: 3.18.5
+ resolution: "@smithy/core@npm:3.18.5"
+ dependencies:
+ "@smithy/middleware-serde": "npm:^4.2.6"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-base64": "npm:^4.3.0"
+ "@smithy/util-body-length-browser": "npm:^4.2.0"
+ "@smithy/util-middleware": "npm:^4.2.5"
+ "@smithy/util-stream": "npm:^4.5.6"
+ "@smithy/util-utf8": "npm:^4.2.0"
+ "@smithy/uuid": "npm:^1.1.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/c6ccaf4a0639524e0141905224cbbd0142a98ee4917bc0e3e914bcc887be5f7740f1baa2717dab131f5e185fa69002d3cb5cb1a40e5a1a31c5c2c30bd946060d
+ languageName: node
+ linkType: hard
+
+"@smithy/credential-provider-imds@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/credential-provider-imds@npm:4.2.5"
+ dependencies:
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/url-parser": "npm:^4.2.5"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/98efbb03e75d71392baac12755c677b72bbb239b84ff3e776aabc0d192f4501d35da8b81956b48e266501eeff37d3bde56ab188fefb5422bf107a0f20bfd7674
+ languageName: node
+ linkType: hard
+
+"@smithy/fetch-http-handler@npm:^5.3.6":
+ version: 5.3.6
+ resolution: "@smithy/fetch-http-handler@npm:5.3.6"
+ dependencies:
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/querystring-builder": "npm:^4.2.5"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-base64": "npm:^4.3.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/8ae0401c69cf941bc2716d0372fad715f7d80e23c5aba5e30ac3abc632a02de5895a417419064324c6853857c7bcffab45fc39393cc0b46d07a11b591015a68a
+ languageName: node
+ linkType: hard
+
+"@smithy/hash-node@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/hash-node@npm:4.2.5"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-buffer-from": "npm:^4.2.0"
+ "@smithy/util-utf8": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/e0c24b8b93be02a491303a014ba57e2bb746f3f8905df330d8a480c94480803e0f93d76cdbc3d8229b7673a22e68b23ee6f5ce4d6db1ac2c427cc36e804fedcf
+ languageName: node
+ linkType: hard
+
+"@smithy/invalid-dependency@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/invalid-dependency@npm:4.2.5"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/0b3e7608d3c145ad557c04eb5b0f7f10dd93f5eaf1d36b724b0e4ff3c3f500893e19b8ecf02ede4822bc36c049a4e03b69890a37e776a4ac6cfcc8e2f6fa843e
+ languageName: node
+ linkType: hard
+
+"@smithy/is-array-buffer@npm:^2.2.0":
+ version: 2.2.0
+ resolution: "@smithy/is-array-buffer@npm:2.2.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/2f2523cd8cc4538131e408eb31664983fecb0c8724956788b015aaf3ab85a0c976b50f4f09b176f1ed7bbe79f3edf80743be7a80a11f22cd9ce1285d77161aaf
+ languageName: node
+ linkType: hard
+
+"@smithy/is-array-buffer@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "@smithy/is-array-buffer@npm:4.2.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/8e3e21cff5929d627bbf4a9beded28bd54555cfd37772226290964af6950cc10d700776a2ce7553f34ddf88a2e7e3d4681de58c94e9805592d901fc0f32cb597
+ languageName: node
+ linkType: hard
+
+"@smithy/middleware-content-length@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/middleware-content-length@npm:4.2.5"
+ dependencies:
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/672a29ab57b80dcebd841624c6a762980b17dc658ca0f7c948c0739fedacf3c6a43d0c3f63e79f13aa4069d9fb1f52266bcd5980d9e6907b2f62b918c286b861
+ languageName: node
+ linkType: hard
+
+"@smithy/middleware-endpoint@npm:^4.3.12":
+ version: 4.3.12
+ resolution: "@smithy/middleware-endpoint@npm:4.3.12"
+ dependencies:
+ "@smithy/core": "npm:^3.18.5"
+ "@smithy/middleware-serde": "npm:^4.2.6"
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/shared-ini-file-loader": "npm:^4.4.0"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/url-parser": "npm:^4.2.5"
+ "@smithy/util-middleware": "npm:^4.2.5"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/0bfb1d825d15eed389e603e547aab134c8064c3e82fad9241f721d0f896d2f3490516d8b0a845869c78a1d071040df26cd4e3234b171bab130f0da13cb4f2a94
+ languageName: node
+ linkType: hard
+
+"@smithy/middleware-retry@npm:^4.4.12":
+ version: 4.4.12
+ resolution: "@smithy/middleware-retry@npm:4.4.12"
+ dependencies:
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/service-error-classification": "npm:^4.2.5"
+ "@smithy/smithy-client": "npm:^4.9.8"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-middleware": "npm:^4.2.5"
+ "@smithy/util-retry": "npm:^4.2.5"
+ "@smithy/uuid": "npm:^1.1.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/3c958a58c6346b07d3d1231e4835754fe159f4697bb2b8d8a0e173ec9325e92d5e73a21b1f8f7854b390fc5a5715c44a44a50ea389c17edf95178a8173d819c4
+ languageName: node
+ linkType: hard
+
+"@smithy/middleware-serde@npm:^4.2.6":
+ version: 4.2.6
+ resolution: "@smithy/middleware-serde@npm:4.2.6"
+ dependencies:
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/c7b4f806f3664573f119b35b91f4adaa62ec2501bae37133ca5837b24a879514812c0820345340a3281374307bd4f468c0da058c2fe0b854baa5db114403326a
+ languageName: node
+ linkType: hard
+
+"@smithy/middleware-stack@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/middleware-stack@npm:4.2.5"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/c88476053920bb54dbf0c407b22cf5e17f497def265ee6bbdacd559144acb3142082e9f5439745da3d96655aa0aafdbb33cab14ba02ec4c3b108eab512c612b8
+ languageName: node
+ linkType: hard
+
+"@smithy/node-config-provider@npm:^4.3.5":
+ version: 4.3.5
+ resolution: "@smithy/node-config-provider@npm:4.3.5"
+ dependencies:
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/shared-ini-file-loader": "npm:^4.4.0"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/433eb6cab0a96fc7391351925098954265f630986777a0443f8e05f1d22b5b5ebba62cb26c4d9d0989eb747a0c4921bfa833593872715810cabc3998cf5e2816
+ languageName: node
+ linkType: hard
+
+"@smithy/node-http-handler@npm:^4.4.5":
+ version: 4.4.5
+ resolution: "@smithy/node-http-handler@npm:4.4.5"
+ dependencies:
+ "@smithy/abort-controller": "npm:^4.2.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/querystring-builder": "npm:^4.2.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/5385f20466e4ecf7e7fd9b1309077820fa65e213b806fce4ec08191c9af216da03bae6e03c5860fedf6d87c5aeba660721e1c4e0114a1d1a5d8a1cf840c30604
+ languageName: node
+ linkType: hard
+
+"@smithy/property-provider@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/property-provider@npm:4.2.5"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/bea8cf1758e90779476b5a44d722a63a658bee27a00e2f4f2b0b6e96ee14e2e66e3a23674c51619eb00c0472592a1d658249d7ee79cf19847ac10c698b3b67af
+ languageName: node
+ linkType: hard
+
+"@smithy/protocol-http@npm:^5.3.5":
+ version: 5.3.5
+ resolution: "@smithy/protocol-http@npm:5.3.5"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/15e6bfbf39a8740b5cce729b84d470835887442f0f662325eb55d1f02d8d790772595446bb7f776d2852ca6f6ff67d7a9f45a3eab0bc757997c82564a483f3dc
+ languageName: node
+ linkType: hard
+
+"@smithy/querystring-builder@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/querystring-builder@npm:4.2.5"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-uri-escape": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/1dbbf4792a90c7f4c3948526200a61b83c0444d86da6b925501611c11c4a12bdfe7e1870e66c10353128821cf5f9fedb509af85deb6c2015be0ef298a6d03972
+ languageName: node
+ linkType: hard
+
+"@smithy/querystring-parser@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/querystring-parser@npm:4.2.5"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/83c4200282469791a3266d8f44c6ce9128b0adb42ee9f097bac31fafa5bb62eb1cfcab29ff0641fe48d2585089109633eb1d99151dc91e4879dae563898fecdc
+ languageName: node
+ linkType: hard
+
+"@smithy/service-error-classification@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/service-error-classification@npm:4.2.5"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ checksum: 10c0/d1a3ef99b4474ad71cd6279e581e174fd5421646618360200350c4d346b2227ddae14a71a88c32442e88b1261ed080e87df6b3d34298833be6cf5db95d266db4
+ languageName: node
+ linkType: hard
+
+"@smithy/shared-ini-file-loader@npm:^4.4.0":
+ version: 4.4.0
+ resolution: "@smithy/shared-ini-file-loader@npm:4.4.0"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/a674622375df25685e793b0c777e856f439a79614240445b7f5982b263b5525f6f6f2c02ab4058db7e6a8988d9b1809181cc70bf4d06ea2a71608fecad6ea6d1
+ languageName: node
+ linkType: hard
+
+"@smithy/signature-v4@npm:^5.3.5":
+ version: 5.3.5
+ resolution: "@smithy/signature-v4@npm:5.3.5"
+ dependencies:
+ "@smithy/is-array-buffer": "npm:^4.2.0"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-hex-encoding": "npm:^4.2.0"
+ "@smithy/util-middleware": "npm:^4.2.5"
+ "@smithy/util-uri-escape": "npm:^4.2.0"
+ "@smithy/util-utf8": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/e4e8f28fc53f9609f5d290d2f94f0736713a5269061b959e6be6da3ed2ef58511ba56c2727b4557349ae5201c0879555a28df4bd717e6d1789a52a678deef876
+ languageName: node
+ linkType: hard
+
+"@smithy/smithy-client@npm:^4.9.8":
+ version: 4.9.8
+ resolution: "@smithy/smithy-client@npm:4.9.8"
+ dependencies:
+ "@smithy/core": "npm:^3.18.5"
+ "@smithy/middleware-endpoint": "npm:^4.3.12"
+ "@smithy/middleware-stack": "npm:^4.2.5"
+ "@smithy/protocol-http": "npm:^5.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-stream": "npm:^4.5.6"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/42752686da591865cea0f5f7379eb729bdba003ddf59cfc05368e4155b350d6499772426e66b32c9e9af003fe1eb812170652a5d0f996097df4411c722120852
+ languageName: node
+ linkType: hard
+
+"@smithy/types@npm:^4.9.0":
+ version: 4.9.0
+ resolution: "@smithy/types@npm:4.9.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/7068428d2e98eafb7f7e03d10f919ae0e7ea2f339b5afca1631be3d6a6cb3512d5dc57ca95d4dab533a3ad587eeba3a1c77305eb4e563fbc067abda170482ff5
+ languageName: node
+ linkType: hard
+
+"@smithy/url-parser@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/url-parser@npm:4.2.5"
+ dependencies:
+ "@smithy/querystring-parser": "npm:^4.2.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/1d8241eeaaaa6401e1de670c2ebcd3992f9abb175f399c92aec1b30de81ce8023f66e0b7079be966b0a891c878a798d4cb08a09f410bcb795799e8ae9057e99a
+ languageName: node
+ linkType: hard
+
+"@smithy/util-base64@npm:^4.3.0":
+ version: 4.3.0
+ resolution: "@smithy/util-base64@npm:4.3.0"
+ dependencies:
+ "@smithy/util-buffer-from": "npm:^4.2.0"
+ "@smithy/util-utf8": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/02dd536b9257914cc9a595a865faac64fc96db10468d52d0cba475df78764fc25ba255707ccd061ee197fca189d7859d70af8cf89b0b0c3e27c1c693676eb6e4
+ languageName: node
+ linkType: hard
+
+"@smithy/util-body-length-browser@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "@smithy/util-body-length-browser@npm:4.2.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/15553c249088d59406c6917c19ed19810c7dbcc0967c44e5f3fbb2cc870c004b35f388c082b77f370a2c440a69ec7e8336c7a066af904812a66944dd5cb4c8cc
+ languageName: node
+ linkType: hard
+
+"@smithy/util-body-length-node@npm:^4.2.1":
+ version: 4.2.1
+ resolution: "@smithy/util-body-length-node@npm:4.2.1"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/3c32306735af5b62f75375e976a531ab45f171dfb0dc23ee035478d2132eaf21f244c31b0f3e861c514ff97d8112055e74c98ed44595ad24bd31434d5fdaf4bf
+ languageName: node
+ linkType: hard
+
+"@smithy/util-buffer-from@npm:^2.2.0":
+ version: 2.2.0
+ resolution: "@smithy/util-buffer-from@npm:2.2.0"
+ dependencies:
+ "@smithy/is-array-buffer": "npm:^2.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/223d6a508b52ff236eea01cddc062b7652d859dd01d457a4e50365af3de1e24a05f756e19433f6ccf1538544076b4215469e21a4ea83dc1d58d829725b0dbc5a
+ languageName: node
+ linkType: hard
+
+"@smithy/util-buffer-from@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "@smithy/util-buffer-from@npm:4.2.0"
+ dependencies:
+ "@smithy/is-array-buffer": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/4842d5607240c11400db30762ef6cb4def8d13e3474c5a901a4e2a1783198f5b163ab6011cf24a7f0acbba9a4d7cc79db1d811dc8aa9da446448e52773223997
+ languageName: node
+ linkType: hard
+
+"@smithy/util-config-provider@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "@smithy/util-config-provider@npm:4.2.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/0699b9980ef94eac8f491c2ac557dc47e01c6ae71dabcb4464cc064f8dbf0855797461dbec8ba1925d45f076e968b0df02f0691c636cd1043e560f67541a1d27
+ languageName: node
+ linkType: hard
+
+"@smithy/util-defaults-mode-browser@npm:^4.3.11":
+ version: 4.3.11
+ resolution: "@smithy/util-defaults-mode-browser@npm:4.3.11"
+ dependencies:
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/smithy-client": "npm:^4.9.8"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/ec5601922356a7249448007d03036e9ffc9ddede5f2567f5de2a826a2dc18c1f27c038543eae96a58837a248f412fbb67c965cc43e1029a2519e8440760e790f
+ languageName: node
+ linkType: hard
+
+"@smithy/util-defaults-mode-node@npm:^4.2.14":
+ version: 4.2.14
+ resolution: "@smithy/util-defaults-mode-node@npm:4.2.14"
+ dependencies:
+ "@smithy/config-resolver": "npm:^4.4.3"
+ "@smithy/credential-provider-imds": "npm:^4.2.5"
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/property-provider": "npm:^4.2.5"
+ "@smithy/smithy-client": "npm:^4.9.8"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/965860eddf4f73de7574060bc717a8ca27591456ca0cd36f114ceab2ba5a05cb53931b40088642bc866e3bde9f812bb60b5a12ff04fe1820d059b362a9443a41
+ languageName: node
+ linkType: hard
+
+"@smithy/util-endpoints@npm:^3.2.5":
+ version: 3.2.5
+ resolution: "@smithy/util-endpoints@npm:3.2.5"
+ dependencies:
+ "@smithy/node-config-provider": "npm:^4.3.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/919767b499062d804938471ff02220b74662bf0fc9b7ecf7e7aa6c29f8a23bbc9c68c53718c4bc70c802f7917e4729a37a95c63a3990904047352e36183ddae3
+ languageName: node
+ linkType: hard
+
+"@smithy/util-hex-encoding@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "@smithy/util-hex-encoding@npm:4.2.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/aaa94a69f03d14d3f28125cc915ca421065735e2d05d7305f0958a50021b2fce4fc68a248328e6b5b612dbaa49e471d481ff513bf89554f659f0a49573e97312
+ languageName: node
+ linkType: hard
+
+"@smithy/util-middleware@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/util-middleware@npm:4.2.5"
+ dependencies:
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/6b05a986ec2b992e3dc016148394e812064e33f0d70f30a57c9e2ae419cb7215a16430e2afff683abdf72cb686b06e43d0afa3a86abc72fbaa130976a7e2bbfb
+ languageName: node
+ linkType: hard
+
+"@smithy/util-retry@npm:^4.2.5":
+ version: 4.2.5
+ resolution: "@smithy/util-retry@npm:4.2.5"
+ dependencies:
+ "@smithy/service-error-classification": "npm:^4.2.5"
+ "@smithy/types": "npm:^4.9.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/3b330df346de40bdc49356f3fdf7164adefbd2b45d4beed6fd7d655569c2dcb1f52a7fd77d7a9ace8f6eeed9f5612cb02a60f66463972f934fae347e20c97b14
+ languageName: node
+ linkType: hard
+
+"@smithy/util-stream@npm:^4.5.6":
+ version: 4.5.6
+ resolution: "@smithy/util-stream@npm:4.5.6"
+ dependencies:
+ "@smithy/fetch-http-handler": "npm:^5.3.6"
+ "@smithy/node-http-handler": "npm:^4.4.5"
+ "@smithy/types": "npm:^4.9.0"
+ "@smithy/util-base64": "npm:^4.3.0"
+ "@smithy/util-buffer-from": "npm:^4.2.0"
+ "@smithy/util-hex-encoding": "npm:^4.2.0"
+ "@smithy/util-utf8": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/42bb6f834b3f617cf2e421450cf43f7259c1cc4cd7c7ad230e4c929fed265ef7b9f3610977df497115978f3d7a80d569ea1abbbef8d595e6b2e1a4ccca3a37fa
+ languageName: node
+ linkType: hard
+
+"@smithy/util-uri-escape@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "@smithy/util-uri-escape@npm:4.2.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/1933e8d939dc52e1ee5e7d2397f4c208a9eac0283397a19ee72078d04db997ebe3ad39709b56aac586ffce10d1cf5ab17dfc068ea6ab030098fc06fe3532e085
+ languageName: node
+ linkType: hard
+
+"@smithy/util-utf8@npm:^2.0.0":
+ version: 2.3.0
+ resolution: "@smithy/util-utf8@npm:2.3.0"
+ dependencies:
+ "@smithy/util-buffer-from": "npm:^2.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/e18840c58cc507ca57fdd624302aefd13337ee982754c9aa688463ffcae598c08461e8620e9852a424d662ffa948fc64919e852508028d09e89ced459bd506ab
+ languageName: node
+ linkType: hard
+
+"@smithy/util-utf8@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "@smithy/util-utf8@npm:4.2.0"
+ dependencies:
+ "@smithy/util-buffer-from": "npm:^4.2.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/689a1f2295d52bec0dde7215a075d79ef32ad8b146cb610a529b2cab747d96978401fd31469c225e31f3042830c54403e64d39b28033df013c8de27a84b405a2
+ languageName: node
+ linkType: hard
+
+"@smithy/uuid@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "@smithy/uuid@npm:1.1.0"
+ dependencies:
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/f8a8bfcc0e241457636884e778e261d45d8a3aaad533775111170cac36ac666275b59ec6d86d3d5b8d470ff4b864202d2a1a188b3c0e0ed0c86a0b693acf1ecf
+ languageName: node
+ linkType: hard
+
"@szmarczak/http-timer@npm:^1.1.2":
version: 1.1.2
resolution: "@szmarczak/http-timer@npm:1.1.2"
@@ -217,6 +1251,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/multer@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "@types/multer@npm:2.0.0"
+ dependencies:
+ "@types/express": "npm:*"
+ checksum: 10c0/375b0e77c4675c2ff27d1170e469df48dced928cc9fcd077ead111a20d0f2c01921fd25e20e25426604d6d3e311b37da2bc03ce47523d06adafba5c4b8077b67
+ languageName: node
+ linkType: hard
+
"@types/node@npm:*":
version: 17.0.21
resolution: "@types/node@npm:17.0.21"
@@ -240,6 +1283,16 @@ __metadata:
languageName: node
linkType: hard
+"@types/nodemailer@npm:^7.0.4":
+ version: 7.0.4
+ resolution: "@types/nodemailer@npm:7.0.4"
+ dependencies:
+ "@aws-sdk/client-sesv2": "npm:^3.839.0"
+ "@types/node": "npm:*"
+ checksum: 10c0/8c98d4fc33a84ab0ba82d6f5a79ad9f70ae9cd86da857ef16f7896fa78203ed66c2f9f2440a0eb04ea0ab3d69c03252c8b1e5bab9371871080d223cfbdef41a4
+ languageName: node
+ linkType: hard
+
"@types/passport-strategy@npm:^0.2.35":
version: 0.2.35
resolution: "@types/passport-strategy@npm:0.2.35"
@@ -444,6 +1497,13 @@ __metadata:
languageName: node
linkType: hard
+"append-field@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "append-field@npm:1.0.0"
+ checksum: 10c0/1b5abcc227e5179936a9e4f7e2af4769fa1f00eda85bbaed907f7964b0fd1f7d61f0f332b35337f391389ff13dd5310c2546ba670f8e5a743b23ec85185c73ef
+ languageName: node
+ linkType: hard
+
"arg@npm:^4.1.0":
version: 4.1.3
resolution: "arg@npm:4.1.3"
@@ -538,6 +1598,13 @@ __metadata:
languageName: node
linkType: hard
+"bowser@npm:^2.11.0":
+ version: 2.13.1
+ resolution: "bowser@npm:2.13.1"
+ checksum: 10c0/a57ef440c68e80ce736b95017e13f65d1476cdfa3cae10e0958ab71a8ed3e804aad761c5809b98fbaeaacd8cd1986d46ee7c317937c601897c9b1d17971bc8d1
+ languageName: node
+ linkType: hard
+
"boxen@npm:^5.0.0":
version: 5.1.2
resolution: "boxen@npm:5.1.2"
@@ -589,6 +1656,22 @@ __metadata:
languageName: node
linkType: hard
+"buffer-from@npm:^1.0.0":
+ version: 1.1.2
+ resolution: "buffer-from@npm:1.1.2"
+ checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34
+ languageName: node
+ linkType: hard
+
+"busboy@npm:^1.6.0":
+ version: 1.6.0
+ resolution: "busboy@npm:1.6.0"
+ dependencies:
+ streamsearch: "npm:^1.1.0"
+ checksum: 10c0/fa7e836a2b82699b6e074393428b91ae579d4f9e21f5ac468e1b459a244341d722d2d22d10920cdd849743dbece6dca11d72de939fb75a7448825cf2babfba1f
+ languageName: node
+ linkType: hard
+
"bytes@npm:3.1.2":
version: 3.1.2
resolution: "bytes@npm:3.1.2"
@@ -739,6 +1822,18 @@ __metadata:
languageName: node
linkType: hard
+"concat-stream@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "concat-stream@npm:2.0.0"
+ dependencies:
+ buffer-from: "npm:^1.0.0"
+ inherits: "npm:^2.0.3"
+ readable-stream: "npm:^3.0.2"
+ typedarray: "npm:^0.0.6"
+ checksum: 10c0/29565dd9198fe1d8cf57f6cc71527dbc6ad67e12e4ac9401feb389c53042b2dceedf47034cbe702dfc4fd8df3ae7e6bfeeebe732cc4fa2674e484c13f04c219a
+ languageName: node
+ linkType: hard
+
"configstore@npm:^5.0.1":
version: 5.0.1
resolution: "configstore@npm:5.0.1"
@@ -1191,6 +2286,17 @@ __metadata:
languageName: node
linkType: hard
+"fast-xml-parser@npm:5.2.5":
+ version: 5.2.5
+ resolution: "fast-xml-parser@npm:5.2.5"
+ dependencies:
+ strnum: "npm:^2.1.0"
+ bin:
+ fxparser: src/cli/cli.js
+ checksum: 10c0/d1057d2e790c327ccfc42b872b91786a4912a152d44f9507bf053f800102dfb07ece3da0a86b33ff6a0caa5a5cad86da3326744f6ae5efb0c6c571d754fe48cd
+ languageName: node
+ linkType: hard
+
"fdir@npm:^6.5.0":
version: 6.5.0
resolution: "fdir@npm:6.5.0"
@@ -1581,7 +2687,7 @@ __metadata:
languageName: node
linkType: hard
-"inherits@npm:2.0.4":
+"inherits@npm:2.0.4, inherits@npm:^2.0.3":
version: 2.0.4
resolution: "inherits@npm:2.0.4"
checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2
@@ -1952,6 +3058,13 @@ __metadata:
languageName: node
linkType: hard
+"minimist@npm:^1.2.6":
+ version: 1.2.8
+ resolution: "minimist@npm:1.2.8"
+ checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6
+ languageName: node
+ linkType: hard
+
"minipass-collect@npm:^2.0.1":
version: 2.0.1
resolution: "minipass-collect@npm:2.0.1"
@@ -2028,6 +3141,17 @@ __metadata:
languageName: node
linkType: hard
+"mkdirp@npm:^0.5.6":
+ version: 0.5.6
+ resolution: "mkdirp@npm:0.5.6"
+ dependencies:
+ minimist: "npm:^1.2.6"
+ bin:
+ mkdirp: bin/cmd.js
+ checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01
+ languageName: node
+ linkType: hard
+
"mongodb-connection-string-url@npm:^2.6.0":
version: 2.6.0
resolution: "mongodb-connection-string-url@npm:2.6.0"
@@ -2124,6 +3248,21 @@ __metadata:
languageName: node
linkType: hard
+"multer@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "multer@npm:2.0.2"
+ dependencies:
+ append-field: "npm:^1.0.0"
+ busboy: "npm:^1.6.0"
+ concat-stream: "npm:^2.0.0"
+ mkdirp: "npm:^0.5.6"
+ object-assign: "npm:^4.1.1"
+ type-is: "npm:^1.6.18"
+ xtend: "npm:^4.0.2"
+ checksum: 10c0/d3b99dd0512169bbabf15440e1bbb3ecdc000b761e5a3e4aaca40b5e5e213c6cdcc9b7dffebaa601b7691a84f6876aa87e0173ffcc47139253793cf5657819eb
+ languageName: node
+ linkType: hard
+
"negotiator@npm:0.6.3":
version: 0.6.3
resolution: "negotiator@npm:0.6.3"
@@ -2158,6 +3297,13 @@ __metadata:
languageName: node
linkType: hard
+"nodemailer@npm:^7.0.11":
+ version: 7.0.11
+ resolution: "nodemailer@npm:7.0.11"
+ checksum: 10c0/208f108fdb4c5dd0e3a2f013578d53dad505cf1b9c7a084f6d22fc9d6f3912daafb4a23793ca568ff848afc35f15f4eb24382d3f6f9fb8ede4a8410d4ca63618
+ languageName: node
+ linkType: hard
+
"nodemon@npm:^2.0.15":
version: 2.0.15
resolution: "nodemon@npm:2.0.15"
@@ -2214,7 +3360,7 @@ __metadata:
languageName: node
linkType: hard
-"object-assign@npm:^4":
+"object-assign@npm:^4, object-assign@npm:^4.1.1":
version: 4.1.1
resolution: "object-assign@npm:4.1.1"
checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414
@@ -2490,6 +3636,17 @@ __metadata:
languageName: node
linkType: hard
+"readable-stream@npm:^3.0.2":
+ version: 3.6.2
+ resolution: "readable-stream@npm:3.6.2"
+ dependencies:
+ inherits: "npm:^2.0.3"
+ string_decoder: "npm:^1.1.1"
+ util-deprecate: "npm:^1.0.1"
+ checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7
+ languageName: node
+ linkType: hard
+
"readdirp@npm:~3.6.0":
version: 3.6.0
resolution: "readdirp@npm:3.6.0"
@@ -2533,7 +3690,7 @@ __metadata:
languageName: node
linkType: hard
-"safe-buffer@npm:5.2.1":
+"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3
@@ -2642,7 +3799,9 @@ __metadata:
"@types/cors": "npm:^2.8.12"
"@types/express": "npm:4.17.13"
"@types/express-session": "npm:^1.17.4"
+ "@types/multer": "npm:^2.0.0"
"@types/node": "npm:20"
+ "@types/nodemailer": "npm:^7.0.4"
"@types/passport": "npm:^1.0.7"
"@types/passport-strategy": "npm:^0.2.35"
axios: "npm:^1.13.2"
@@ -2653,6 +3812,8 @@ __metadata:
express: "npm:^4.17.3"
express-session: "npm:^1.17.2"
mongoose: "npm:^8.0.4"
+ multer: "npm:^2.0.2"
+ nodemailer: "npm:^7.0.11"
nodemon: "npm:^2.0.15"
passport: "npm:^0.5.2"
passport-cas: "git+https://github.com/coursetable/passport-cas#79612f1"
@@ -2759,6 +3920,13 @@ __metadata:
languageName: node
linkType: hard
+"streamsearch@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "streamsearch@npm:1.1.0"
+ checksum: 10c0/fbd9aecc2621364384d157f7e59426f4bfd385e8b424b5aaa79c83a6f5a1c8fd2e4e3289e95de1eb3511cb96bb333d6281a9919fafce760e4edb35b2cd2facab
+ languageName: node
+ linkType: hard
+
"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.2":
version: 4.2.3
resolution: "string-width@npm:4.2.3"
@@ -2781,6 +3949,15 @@ __metadata:
languageName: node
linkType: hard
+"string_decoder@npm:^1.1.1":
+ version: 1.3.0
+ resolution: "string_decoder@npm:1.3.0"
+ dependencies:
+ safe-buffer: "npm:~5.2.0"
+ checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d
+ languageName: node
+ linkType: hard
+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
version: 6.0.1
resolution: "strip-ansi@npm:6.0.1"
@@ -2806,6 +3983,13 @@ __metadata:
languageName: node
linkType: hard
+"strnum@npm:^2.1.0":
+ version: 2.1.1
+ resolution: "strnum@npm:2.1.1"
+ checksum: 10c0/1f9bd1f9b4c68333f25c2b1f498ea529189f060cd50aa59f1876139c994d817056de3ce57c12c970f80568d75df2289725e218bd9e3cdf73cd1a876c9c102733
+ languageName: node
+ linkType: hard
+
"supports-color@npm:^5.5.0":
version: 5.5.0
resolution: "supports-color@npm:5.5.0"
@@ -2927,6 +4111,13 @@ __metadata:
languageName: node
linkType: hard
+"tslib@npm:^2.6.2":
+ version: 2.8.1
+ resolution: "tslib@npm:2.8.1"
+ checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62
+ languageName: node
+ linkType: hard
+
"tsscmp@npm:1.0.6":
version: 1.0.6
resolution: "tsscmp@npm:1.0.6"
@@ -2941,7 +4132,7 @@ __metadata:
languageName: node
linkType: hard
-"type-is@npm:~1.6.18":
+"type-is@npm:^1.6.18, type-is@npm:~1.6.18":
version: 1.6.18
resolution: "type-is@npm:1.6.18"
dependencies:
@@ -2960,6 +4151,13 @@ __metadata:
languageName: node
linkType: hard
+"typedarray@npm:^0.0.6":
+ version: 0.0.6
+ resolution: "typedarray@npm:0.0.6"
+ checksum: 10c0/6005cb31df50eef8b1f3c780eb71a17925f3038a100d82f9406ac2ad1de5eb59f8e6decbdc145b3a1f8e5836e17b0c0002fb698b9fe2516b8f9f9ff602d36412
+ languageName: node
+ linkType: hard
+
"typescript@npm:^5.3.0":
version: 5.9.3
resolution: "typescript@npm:5.9.3"
@@ -3075,6 +4273,13 @@ __metadata:
languageName: node
linkType: hard
+"util-deprecate@npm:^1.0.1":
+ version: 1.0.2
+ resolution: "util-deprecate@npm:1.0.2"
+ checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942
+ languageName: node
+ linkType: hard
+
"utils-merge@npm:1.0.1":
version: 1.0.1
resolution: "utils-merge@npm:1.0.1"
@@ -3229,6 +4434,13 @@ __metadata:
languageName: node
linkType: hard
+"xtend@npm:^4.0.2":
+ version: 4.0.2
+ resolution: "xtend@npm:4.0.2"
+ checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e
+ languageName: node
+ linkType: hard
+
"yallist@npm:^4.0.0":
version: 4.0.0
resolution: "yallist@npm:4.0.0"