PageSourceSearch

https://utmax.tech/_next/static/chunks/2055-d1701299de18e8de.js

js utmax.tech collected 2026-09-24 15:12:29 UTC 96,752 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2055],{2204:(e,t,r)=>{r.d(t,{D:()=>o});var a=r(95155),s=r(29722),n=r(5682),l=r(45535);function o({alternatives:e,compact:t,className:r}){return 0===e.length?null:(0,a.jsxs)("div",{className:(0,s.A)("mt-2 space-y-1.5 border-t border-gray-200 pt-2 dark:border-gray-600",r),children:[(0,a.jsx)("p",{className:(0,s.A)("font-semibold uppercase tracking-wide app-muted","text-xs"),children:"Backup options"}),e.map(e=>{let r=(0,l.T)(e),o=!e.hasConflict,i=e.hasConflict&&!e.selectable;return(0,a.jsxs)("div",{className:(0,s.A)("rounded border px-2 py-1.5",o&&"border-green-200/80 bg-green-50/50 dark:border-green-800 dark:bg-green-950/15",!o&&!i&&"border-amber-200/80 bg-amber-50/50 dark:border-amber-800 dark:bg-amber-950/15",i&&"border-red-200/80 bg-red-50/50 dark:border-red-800 dark:bg-red-950/15"),children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-0.5",children:[(0,a.jsx)("span",{className:(0,s.A)("font-mono font-bold",t?"text-xs":"text-sm"),children:e.course.uniqueNumber}),(0,a.jsx)("span",{className:(0,s.A)("app-muted","text-xs"),children:"user"===e.source?"Your pick":"System"}),(0,a.jsx)(l.y,{analysis:r,compact:!0})]}),(0,a.jsx)(n.Aj,{course:e.course,compact:!0,showUnique:!1,className:(0,s.A)("mt-1","text-xs")}),e.hasConflict&&(0,a.jsx)("p",{className:(0,s.A)("mt-1 app-muted","text-xs"),children:e.blockedReason??`Overlaps ${e.conflictsWith.map(e=>`${e.courseCode} #${e.uniqueNumber}`).join(", ")}`})]},e.course.id)})]})}},5682:(e,t,r)=>{r.d(t,{Aj:()=>c,K7:()=>u});var a=r(95155),s=r(12115),n=r(29722),l=r(45911),o=r(53545),i=r(75458);let d={Monday:"Mon",Tuesday:"Tue",Wednesday:"Wed",Thursday:"Thu",Friday:"Fri"};function c({course:e,compact:t,showUnique:r=!0,className:s}){return(0,a.jsxs)("div",{className:(0,n.A)("min-w-0",s),children:[(0,a.jsxs)("p",{className:(0,n.A)("font-semibold text-black dark:text-white",t?"text-xs":"text-sm"),children:[e.courseCode,r&&e.uniqueNumber&&(0,a.jsx)(u,{uniqueNumber:e.uniqueNumber})]}),e.title?.trim()&&(0,a.jsx)("p",{className:(0,n.A)("mt-0.5 text-black dark:text-white","text-xs"),children:e.title.trim()}),(0,a.jsxs)("p",{className:(0,n.A)("mt-1 app-muted","text-xs"),children:[e.professor?.trim()?`Prof. ${e.professor.trim()}`:"Staff"," \xb7 ",function(e){if(!(0,o.Ic)(e))return(0,o.GG)(e);let t=e.meetings.find(e=>e.startMinutes>=0);if(t){let e=t.days.map(e=>d[e]??e.slice(0,3)).join(" ");return`${e} ${(0,i.dp)(t.startMinutes)}–${(0,i.dp)(t.endMinutes)}`}if(e.days?.trim()){let t=e.startTime&&e.endTime?`${e.startTime}–${e.endTime}`:e.startTime||"";return[e.days.trim(),t].filter(Boolean).join(" ")}return"TBA"}(e)]}),e.location?.trim()&&(0,a.jsx)("p",{className:(0,n.A)("mt-0.5 app-muted","text-xs"),children:e.location.trim()})]})}function u({uniqueNumber:e,className:t,hidePrefix:r}){let o=(0,s.useRef)(null),i=r?e:`#${e}`,[d,c]=(0,s.useState)(i),m=(0,s.useRef)(!1);return(0,a.jsx)("span",{ref:o,className:(0,n.A)(t||"ml-1.5 font-mono text-max-primary","cursor-pointer hover:opacity-80 transition-opacity relative inline-block select-none w-20 text-center"),onClick:async t=>{if(t.stopPropagation(),await navigator.clipboard.writeText(e),m.current)return;m.current=!0,o.current&&l.os.fromTo(o.current,{scale:.9,color:"#10b981"},{scale:1,color:"",duration:1.5,ease:"elastic.out(1, 0.3)",clearProps:"all"});let r="COPIED",a="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*",s=0,n=setInterval(()=>{s++;let e="";for(let t=0;t<r.length;t++)s>=15?e+=r[t]:s>2*t?e+=Math.random()>.5?r[t]:a[Math.floor(Math.random()*a.length)]:e+=a[Math.floor(Math.random()*a.length)];c(e),s>=15&&(clearInterval(n),setTimeout(()=>{let e=0,t=setInterval(()=>{e++;let r="";for(let t=0;t<i.length;t++)e>=15?r+=i[t]:e>2*t?r+=Math.random()>.5?i[t]:a[Math.floor(Math.random()*a.length)]:r+=a[Math.floor(Math.random()*a.length)];c(r),e>=15&&(clearInterval(t),c(i),m.current=!1)},25)},800))},25)},title:"Copy unique number",children:d})}},7429:(e,t,r)=>{r.d(t,{S:()=>i});var a=r(95155),s=r(29722),n=r(87221);let l={"Visual and Performing Arts (050)":"bg-purple-100 text-purple-800 border-purple-200 dark:bg-purple-900/30 dark:text-purple-300 dark:border-purple-800","Natural Science and Technology, Part I (030)":"bg-teal-100 text-teal-800 border-teal-200 dark:bg-teal-900/30 dark:text-teal-300 dark:border-teal-800","Natural Science and Technology, Part II (093)":"bg-emerald-100 text-emerald-800 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-300 dark:border-emerald-800","Social and Behavioral Sciences (080)":"bg-blue-100 text-blue-800 border-blue-200 dark:bg-blue-900/30 dark:text-blue-300 dark:border-blue-800","Mathematics (020)":"bg-red-100 text-red-800 border-red-200 dark:bg-red-900/30 dark:text-red-300 dark:border-red-800","American and Texas Government (070)":"bg-orange-100 text-orange-800 border-orange-200 dark:bg-orange-900/30 dark:text-orange-300 dark:border-orange-800","U.S. History (060)":"bg-amber-100 text-amber-800 border-amber-200 dark:bg-amber-900/30 dark:text-amber-300 dark:border-amber-800","Humanities (040)":"bg-yellow-100 text-yellow-800 border-yellow-200 dark:bg-yellow-900/30 dark:text-yellow-300 dark:border-yellow-800","Communication (010)":"bg-indigo-100 text-indigo-800 border-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-300 dark:border-indigo-800","First-Year Signature Course (090)":"bg-pink-100 text-pink-800 border-pink-200 dark:bg-pink-900/30 dark:text-pink-300 dark:border-pink-800"},o={"Visual and Performing Arts (050)":"VAPA(050)","Natural Science and Technology, Part I (030)":"NST Part 1(030)","Natural Science and Technology, Part II (093)":"NST Part 2(093)","Social and Behavioral Sciences (080)":"Social & Behavior Science(080)","Mathematics (020)":"Math(020)","American and Texas Government (070)":"US & TX Govt(070)","U.S. History (060)":"US History(060)","Humanities (040)":"Humanities(040)","Communication (010)":"Communication(010)","First-Year Signature Course (090)":"FIG(090)"};function i({courseCode:e,className:t}){let r=n[e]||[];return 0===r.length?null:(0,a.jsx)("div",{className:(0,s.A)("flex flex-wrap gap-1.5",t),children:r.map(e=>{let t=l[e]||"bg-gray-100 text-gray-800 border-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-700",r=o[e]||e;return(0,a.jsx)("span",{title:e,className:(0,s.A)("inline-flex items-center rounded border px-1.5 py-0.5 text-xs font-bold uppercase tracking-wider",t),children:r},e)})})}},14405:(e,t,r)=>{r.d(t,{H:()=>s}),r(95155),r(12115),r(5682),r(90679),r(52176),r(2204),r(22772);var a=r(53545);function s(e,t){let r=new Map;return e.forEach((e,s)=>{let n=e.courseCode.toUpperCase();r.has(n)||(t&&t[n]?r.set(n,(0,a.tH)(t[n])):r.set(n,(0,a.tH)(a.w[s%a.w.length])))}),r}r(62338),r(91114)},16225:(e,t,r)=>{r.d(t,{b:()=>_});var a=r(95155),s=r(12115),n=r(12363),l=r(2125),o=r(58689),i=r(53018),d=r(80846),c=r(15532),u=r(64577),m=r(9005),x=r(18986),h=r(99314),p=r(65738),f=r(29722),b=r(62338),g=r(97584),y=r(92571),k=r(68562),w=r(44539),v=r(25745),j=r(91161),N=r(56290);function A({compact:e,className:t,activate:r=!0,iconOnly:l,label:o="Import"}){let{importScheduleFromIcs:i,importScheduleFromUrl:d}=(0,b.n)(),c=(0,s.useRef)(null),u=(0,s.useRef)(null),m=(0,s.useRef)(null),[x,h]=(0,s.use
1State)(!1),[p,g]=(0,s.useState)(!1),[C,S]=(0,s.useState)(""),[M,T]=(0,s.useState)(!1),[$,E]=(0,s.useState)(null);async function D(e){if(e){T(!0),E(null);try{let t=await i(e,r);t?.schedule?.id&&window.dispatchEvent(new CustomEvent("utmax:schedule-imported",{detail:t.schedule})),h(!1)}catch(e){E(e instanceof Error?e.message:"Could not import this calendar file.")}finally{T(!1),u.current&&(u.current.value=""),m.current&&(m.current.value="")}}}async function R(e){if(e.preventDefault(),C.trim()){T(!0),E(null);try{let e=await d(C.trim(),r);e?.schedule?.id&&window.dispatchEvent(new CustomEvent("utmax:schedule-imported",{detail:e.schedule})),h(!1),g(!1),S("")}catch(e){E(e instanceof Error?e.message:"Could not fetch or parse schedule from this URL.")}finally{T(!1)}}}return(0,s.useEffect)(()=>{function e(e){c.current&&!c.current.contains(e.target)&&(h(!1),g(!1))}function t(e){let t=e.detail;t?.id!=="import-menu"&&(h(!1),g(!1))}return window.addEventListener("utmax:popover-opened",t),x&&document.addEventListener("mousedown",e),()=>{window.removeEventListener("utmax:popover-opened",t),document.removeEventListener("mousedown",e)}},[x]),(0,a.jsxs)("div",{ref:c,className:(0,f.A)("relative min-w-0 flex items-stretch",t),children:[(0,a.jsx)("input",{ref:u,type:"file",accept:".ics,.cal,text/calendar",className:"hidden",onChange:e=>void D(e.target.files?.[0]??null)}),(0,a.jsx)("input",{ref:m,type:"file",accept:".json,.txt,application/json,text/plain",className:"hidden",onChange:e=>void D(e.target.files?.[0]??null)}),(0,a.jsxs)("button",{type:"button",title:"Import a schedule shared as an .ics, .json, or .txt file",onClick:e=>{let t;e.stopPropagation(),E(null),h(t=!x),t&&window.dispatchEvent(new CustomEvent("utmax:popover-opened",{detail:{id:"import-menu"}})),t||g(!1)},className:(0,f.A)("inline-flex items-center justify-center gap-1.5 font-bold text-xs transition-colors",l?"shrink-0 p-2 text-slate-900 hover:bg-gray-100 dark:text-white dark:hover:bg-gray-800 rounded-lg border-0 bg-transparent":"w-full rounded-lg border-0 bg-transparent px-2.5 py-2 text-slate-900 dark:text-white hover:bg-gray-100 dark:hover:bg-gray-800"),children:[M?(0,a.jsx)(y.A,{className:"h-3.5 w-3.5 shrink-0 animate-spin text-slate-900 dark:text-white"}):(0,a.jsx)(N.$,{icon:k.A,className:"h-3.5 w-3.5 shrink-0 text-slate-900 dark:text-white"}),!l&&(0,a.jsx)("span",{className:"hidden font-bold text-slate-900 dark:text-white sm:inline",children:M?"Importing…":o}),(0,a.jsx)(N.$,{icon:n.A,className:(0,f.A)("h-3 w-3 shrink-0 text-slate-900 dark:text-white transition-transform duration-150",x&&"rotate-180")})]}),x&&(0,a.jsxs)("div",{className:"absolute right-0 top-full mt-1.5 z-[9999] w-72 rounded-xl border border-gray-200 bg-white p-1.5 shadow-2xl dark:border-gray-700 dark:bg-gray-900 animate-in fade-in zoom-in-95 duration-150 select-none",children:[(0,a.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),u.current?.click()},className:"flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-xs font-bold text-slate-800 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-slate-800 transition-colors",children:[(0,a.jsx)(N.$,{icon:w.A,className:"h-4 w-4 text-slate-900 dark:text-white shrink-0"}),(0,a.jsx)("span",{children:"Calendar File (.ics, .cal)"})]}),(0,a.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),m.current?.click()},className:"flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-xs font-bold text-slate-800 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-slate-800 transition-colors",children:[(0,a.jsx)(N.$,{icon:v.A,className:"h-4 w-4 text-slate-900 dark:text-white shrink-0"}),(0,a.jsx)("span",{children:"Schedule Data (.json, .txt)"})]}),(0,a.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),g(!p)},className:"flex w-full items-center justify-between rounded-lg px-3 py-2 text-xs font-bold text-slate-800 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-slate-800 transition-colors",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,a.jsx)(N.$,{icon:j.A,className:"h-4 w-4 text-blue-600 dark:text-blue-400 shrink-0"}),(0,a.jsx)("span",{children:"Import via Feed Link / URL"})]}),(0,a.jsx)(n.A,{className:(0,f.A)("h-3.5 w-3.5 transition-transform",p&&"rotate-180")}
1)]}),p&&(0,a.jsxs)("form",{onSubmit:e=>void R(e),className:"m-1 mt-2 rounded-lg bg-slate-50 p-2.5 border border-slate-200 dark:bg-slate-950 dark:border-slate-800 space-y-2",children:[(0,a.jsx)("label",{htmlFor:"import-url-input",className:"block text-[0.7rem] font-bold text-slate-600 dark:text-slate-400",children:"Paste UTMAX feed URL or .ics link:"}),(0,a.jsx)("input",{id:"import-url-input",type:"url",required:!0,placeholder:"https://utmax.tech/api/schedule/feed/...",value:C,onChange:e=>S(e.target.value),className:"w-full rounded-md border border-slate-300 bg-white px-2 py-1.5 text-xs text-slate-900 placeholder:text-slate-400 focus:border-blue-500 focus:outline-none dark:border-slate-700 dark:bg-slate-900 dark:text-white font-mono"}),(0,a.jsx)("button",{type:"submit",disabled:M||!C.trim(),className:"w-full inline-flex items-center justify-center gap-1 rounded-md bg-black px-3 py-1.5 text-xs font-bold text-white hover:bg-slate-800 dark:bg-white dark:text-slate-900 dark:hover:bg-slate-200 disabled:opacity-50 transition-colors",children:M?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(y.A,{className:"h-3 w-3 animate-spin"}),"Fetching…"]}):"Import Schedule"})]}),$&&(0,a.jsx)("p",{className:"mt-1 px-3 py-1 text-xs font-bold text-red-600 dark:text-red-400",children:$})]})]})}var C=r(50825),S=r(85815),M=r(47753),T=r(65543);let $="America/Chicago",E={Monday:"MO",Tuesday:"TU",Wednesday:"WE",Thursday:"TH",Friday:"FR",Saturday:"SA",Sunday:"SU"},D={Sunday:0,Monday:1,Tuesday:2,Wednesday:3,Thursday:4,Friday:5,Saturday:6};function R(e){return e.toString().padStart(2,"0")}function U(e){return`${e.getFullYear()}${R(e.getMonth()+1)}${R(e.getDate())}T${R(e.getHours())}${R(e.getMinutes())}${R(e.getSeconds())}`}function L(e){return e.toISOString().replace(/[-:]/g,"").replace(/\.\d{3}/,"")}function P(e){return e.replace(/\\/g,"\\\\").replace(/;/g,"\\;").replace(/,/g,"\\,").replace(/\n/g,"\\n")}function I(e,t,r,a){let s=new Date(e,t,1),n=0;for(;s.getMonth()===t;){if(s.getDay()===r&&++n===a)return new Date(s);s.setDate(s.getDate()+1)}return new Date(e,t,1)}function O(e,t,r){let a=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"].indexOf(e);if(a<0)return r;let s=new Date(r);s.setHours(Math.floor(t/60),t%60,0,0);let n=(a-s.getDay()+7)%7;return n>0?s.setDate(s.getDate()+n):s<r&&s.setDate(s.getDate()+7),s}function F(e,t,r){return`${e.uniqueNumber||e.id}-${t}-${r}@utmax.local`}function q(e,t,r,a,s){let n=document.createElement("canvas");!function(e,t,r,a,s=85,n="light"){e.width=2400,e.height=1500;let l=e.getContext("2d");if(!l)return;let o="dark"===n?{background:"#020617",surface:"#0f172a",surfaceMuted:"#1e293b",border:"#334155",grid:"#1e293b",text:"#f8fafc",mutedText:"#cbd5e1"}:{background:"#ffffff",surface:"#ffffff",surfaceMuted:"#f8fafc",border:"#94a3b8",grid:"#cbd5e1",text:"#0f172a",mutedText:"#64748b"},i=1440,d=0;t.forEach(e=>{(0,T.v8)(e).forEach(e=>{e.startMinutes>=0&&e.endMinutes>e.startMinutes&&(e.startMinutes<i&&(i=e.startMinutes),e.endMinutes>d&&(d=e.endMinutes))})});let c=8,u=18;if(i<1440&&d>0){let e=Math.ceil(d/60);c=Math.min(8,Math.max(6,Math.floor(i/60)-1)),u=Math.max(18,Math.min(22,e+1))}l.fillStyle=o.background,l.fillRect(0,0,e.width,e.height),l.fillStyle=o.surface,l.fillRect(0,0,e.width,135),l.strokeStyle=o.border,l.lineWidth=2,l.beginPath(),l.moveTo(0,135),l.lineTo(e.width,135),l.stroke();let m=40,x=Math.min(120,Math.max(40,s));if(a&&a.naturalWidth>0){let e=a.naturalWidth/a.naturalHeight*x,t=Math.max(10,(135-x)/2);l.drawImage(a,40,t,e,x),m=40+e+24}else{let e=Math.max(10,(135-x)/2);l.fillStyle="#4f46e5",l.beginPath(),l.roundRect?l.roundRect(40,e,160,x,14):l.rect(40,e,160,x),l.fill(),l.fillStyle="#ffffff",l.font="bold 32px sans-serif",l.fillText("UTMAX",62,e+x/2+10),m=220}l.fillStyle=o.mutedText,l.font="bold 24px sans-serif",l.fillText("utmax.tech",m,75.5),l.fillStyle=o.text,l.font="bold 36px sans-serif",l.textAlign="center",l.fillText(r||"UTMAX Schedule",e.width/2,77.5);let h=t.reduce((e,t)=>e+(t.creditHours||0),0);l.textAlign="right",l.fillStyle=o.mutedText,l.font="bold 19px sans-serif",l.fillText(`${t.length} ${1===t.length?"Course":"Courses"}${h?` • ${h} Credit Hours`:""}`,e.width-40,75.5),l.textAlign="left";
1let p=["Monday","Tuesday","Wednesday","Thursday","Friday"],f=(e.width-120-20)/5,b=e.height-185-135,g=(u-c)*60;p.forEach((e,t)=>{let r=120+t*f;l.fillStyle=o.surfaceMuted,l.fillRect(r,135,f,50),l.strokeStyle=o.border,l.lineWidth=1.5,l.strokeRect(r,135,f,50),l.fillStyle=o.text,l.font="bold 20px sans-serif",l.textAlign="center",l.fillText(e,r+f/2,167),l.textAlign="left"});for(let t=c;t<=u;t++){let r=185+(t-c)*60/g*b;l.strokeStyle=t===c||t===u?o.border:o.grid,l.lineWidth=t===c||t===u?2:1.5,l.beginPath(),l.moveTo(120,r),l.lineTo(e.width-20,r),l.stroke(),l.fillStyle=o.mutedText,l.font="bold 18px sans-serif";let a=t>=12?"PM":"AM",s=t%12==0?12:t%12;l.fillText(`${s}:00 ${a}`,20,r+6)}p.forEach((e,t)=>{let r=120+t*f;l.strokeStyle=o.border,l.lineWidth=1.5,l.beginPath(),l.moveTo(r,185),l.lineTo(r,185+b),l.stroke()}),l.strokeStyle=o.border,l.lineWidth=1.5,l.beginPath(),l.moveTo(e.width-20,185),l.lineTo(e.width-20,185+b),l.stroke();let y=[{bg:"#1d4ed8",border:"#1e40af"},{bg:"#6d28d9",border:"#5b21b6"},{bg:"#065f46",border:"#044e37"},{bg:"#92400e",border:"#78350f"},{bg:"#be123c",border:"#9f1239"},{bg:"#c2410c",border:"#9a3412"},{bg:"#4338ca",border:"#3730a3"},{bg:"#a21caf",border:"#86198f"},{bg:"#0f766e",border:"#115e59"}];t.forEach((e,t)=>{let r=y[t%y.length];(0,T.v8)(e).forEach(t=>{t.days.forEach(a=>{let s=p.indexOf(a);if(s<0)return;let n=120+s*f+5,o=Math.max(0,t.startMinutes-60*c),i=Math.min(g,t.endMinutes-60*c),d=185+o/g*b+2,u=Math.max(38,(i-o)/g*b-4),m=f-10;l.fillStyle=r.bg,l.beginPath(),l.roundRect?l.roundRect(n,d,m,u,10):l.rect(n,d,m,u),l.fill(),l.strokeStyle=r.border,l.lineWidth=2,l.stroke();let x=n+12,h=m-24;l.fillStyle="#ffffff",l.font="bold 19px sans-serif";let y=e.courseCode.trim(),k=e.professor?.trim()?` - ${e.professor.trim()}`:"",w=`${y}${k}`;if(l.fillText(w,x,d+26,h-80),e.uniqueNumber&&(l.textAlign="right",l.fillStyle="#ffffff",l.font="bold 17px monospace",l.fillText(`#${e.uniqueNumber.replace(/\D/g,"")}`,n+m-12,d+26),l.textAlign="left"),u>45){l.fillStyle="#ffffff",l.font="bold 16px sans-serif";let r=t.location||e.location||"No Room";l.fillText(r,x,d+50,h)}})})});let k=e.height-135;l.fillStyle=o.surfaceMuted,l.fillRect(0,k,e.width,135),l.strokeStyle=o.border,l.lineWidth=2.5,l.beginPath(),l.moveTo(0,k),l.lineTo(e.width,k),l.stroke();let w=[...new Map(t.map(e=>[e.courseCode.trim().toUpperCase(),e])).values()],v=w.length;if(v>0){let t=Math.max(220,(e.width-60-(v-1)*16)/v),r=k+38.5;w.forEach((e,a)=>{let s,n=y[a%y.length],o=e.courseCode.trim().toUpperCase(),i=e.uniqueNumber?` (${e.uniqueNumber.replace(/\D/g,"")})`:"",d=(s=["Monday","Tuesday","Wednesday","Thursday","Friday"],(0,T.v8)(e).some(e=>e.startMinutes>=0&&e.days.some(e=>s.includes(e))))?null:function(e){let t=e.instructionMode?.trim();if(t&&"in person"!==t.toLowerCase())return t;let r=(e.location??"").toLowerCase();return r.includes("async")?"Async":r.includes("online")||r.includes("internet")?"Online":e.days?.trim()&&!e.startTime?.trim()?"TBA":"Virtual"}(e),c=d?`${o}${i}: ${d}`:`${o}${i}`,u=30+a*(t+16);l.fillStyle=n.bg,l.beginPath(),l.roundRect?l.roundRect(u,r,t,58,14):l.rect(u,r,t,58),l.fill(),l.strokeStyle=n.border,l.lineWidth=2,l.stroke(),l.fillStyle="#ffffff",l.font="bold 20px sans-serif",l.textAlign="center",l.fillText(c,u+t/2,r+36,t-20),l.textAlign="left"})}}(n,e,r,a,85,s);let l=n.toDataURL("image/png"),o=document.createElement("a");o.href=l,o.download=t.endsWith(".png")?t:`${t}.png`,o.click(),URL.revokeObjectURL(l)}function B({sections:e,scheduleName:t="UTMAX Schedule",blockedTimes:r=[],compact:l,className:o,iconOnly:i,label:d="Export"}){let[c,u]=(0,s.useState)(!1),m=(0,s.useRef)(null);function x(a){u(!1);let s=t.trim()||"UTMAX Schedule";"ics"===a?function(e,t,r,a=[]){let s=new Blob([function(e,t="UTMAX Schedule",r=[]){let{termStart:a,termEnd:s,holidayDates:n}=function(e,t=new Date){let r=t.getFullYear(),a=9;if(e&&/^\d{5}$/.test(e.trim()))r=Number(e.trim().slice(0,4)),a=Number(e.trim().slice(4,5)||e.trim().slice(4,6));else{let e=t.getMonth();a=e>=0&&e<=4?2:e>=5&&e<=6?6:9}if(2===a){let e=I(r,0,1,3),t=new Date(e);t.setDate(e.getDate()+1);let a=I(r,4,1,1),s=new Date(a);s.setDate(a.getDate()+1);let n=new Date(Date.UTC(s.getFullYear(),s.getMonth(),s.getDate(),6,0,0)),l=[new Date(e)],o=I(r,2,1,3);for(let e=0;e<6;e++){let t=new Date(o);t.setDate(o.getDate()+e),l.push(t)}return{termStart:t,termEnd:n,holidayDates:l}}
1if(6===a){let e=new Date(r,5,1);return{termStart:e,termEnd:new Date(Date.UTC(r,7,15,5,0,0)),holidayDates:[new Date(r,5,19),new Date(r,6,4)]}}let s=I(r,7,1,4),n=I(r,11,1,1),l=new Date(n);l.setDate(n.getDate()+1);let o=new Date(Date.UTC(l.getFullYear(),l.getMonth(),l.getDate(),6,0,0)),i=[new Date(I(r,8,1,1))],d=I(r,10,4,4),c=new Date(d);c.setDate(d.getDate()-3);for(let e=0;e<6;e++){let t=new Date(c);t.setDate(c.getDate()+e),i.push(t)}return{termStart:s,termEnd:o,holidayDates:i}}(e.find(e=>e.termCode)?.termCode),l=new Date,o=["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//UTMAX//Schedule//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${P(t)}`,`NAME:${P(t)}`,`X-WR-CALDESC:${P(t+" - UTMAX Schedule")}`,`X-WR-TIMEZONE:${$}`,"BEGIN:VTIMEZONE","TZID:America/Chicago","BEGIN:DAYLIGHT","TZOFFSETFROM:-0600","TZOFFSETTO:-0500","TZNAME:CDT","DTSTART:19700308T020000","RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU","END:DAYLIGHT","BEGIN:STANDARD","TZOFFSETFROM:-0500","TZOFFSETTO:-0600","TZNAME:CST","DTSTART:19701101T020000","RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU","END:STANDARD","END:VTIMEZONE"];for(let t of e){let e=0;for(let r of(0,T.v8)(t)){if(r.startMinutes<0||r.endMinutes<0)continue;let i=r.days.filter(e=>E[e]);if(!i.length)continue;e++;let d=i[0],c=O(d,r.startMinutes,a),u=new Date(c);u.setMinutes(u.getMinutes()+(r.endMinutes-r.startMinutes));let m=i.map(e=>E[e]).join(","),x=`${t.courseCode}${t.professor?`, ${t.professor}`:""}`,h=[t.title,t.uniqueNumber?`Unique #: ${t.uniqueNumber}`:""].filter(Boolean).join("\n"),p=r.location||t.location,f=[];for(let e of n){let t=e.getDay();if(i.some(e=>D[e]===t)){let t=new Date(e);t.setHours(Math.floor(r.startMinutes/60),r.startMinutes%60,0,0),f.push(`EXDATE;TZID=${$}:${U(t)}`)}}o.push("BEGIN:VEVENT",`UID:${F(t,d,r.startMinutes)}`,`DTSTAMP:${L(l)}`,`DTSTART;TZID=${$}:${U(c)}`,`DTEND;TZID=${$}:${U(u)}`,`RRULE:FREQ=WEEKLY;BYDAY=${m};UNTIL=${L(s)}`,...f,`SUMMARY:${P(x)}`,t.uniqueNumber?`X-UTMAX-UNIQUE-NUMBER:${t.uniqueNumber.replace(/\D/g,"").padStart(5,"0")}`:"",t.courseCode?`X-UTMAX-COURSE-CODE:${P(t.courseCode.trim().toUpperCase())}`:"","X-UTMAX-VERSION:2",`X-UTMAX-APP-VERSION:${M.hl}`,p?`LOCATION:${P(p)}`:"",h?`DESCRIPTION:${P(h)}`:"","END:VEVENT")}if(0===e){let e=`${t.courseCode}${t.professor?`, ${t.professor}`:""}`,r=[t.title,t.uniqueNumber?`Unique #: ${t.uniqueNumber}`:"","Online / Web Course (No scheduled meeting times)"].filter(
1Boolean).join("\n");o.push("BEGIN:VEVENT",`UID:${F(t,"ONLINE",0)}`,`DTSTAMP:${L(l)}`,`DTSTART;VALUE=DATE:${L(a).slice(0,8)}`,`SUMMARY:${P(e)}`,t.uniqueNumber?`X-UTMAX-UNIQUE-NUMBER:${t.uniqueNumber.replace(/\D/g,"").padStart(5,"0")}`:"",t.courseCode?`X-UTMAX-COURSE-CODE:${P(t.courseCode.trim().toUpperCase())}`:"","X-UTMAX-VERSION:2",`X-UTMAX-APP-VERSION:${M.hl}`,"X-UTMAX-ONLINE:TRUE",t.location?`LOCATION:${P(t.location)}`:"LOCATION:Online / Web",r?`DESCRIPTION:${P(r)}`:"","END:VEVENT")}}for(let e of r){if(e.startMinutes<0||e.endMinutes<0)continue;let t=e.day.charAt(0).toUpperCase()+e.day.slice(1),r=E[t];if(!r)continue;let i=O(t,e.startMinutes,a),d=new Date(i);d.setMinutes(d.getMinutes()+(e.endMinutes-e.startMinutes));let c=e.label||"Blocked Time",u=[];for(let r of n)if(r.getDay()===D[t]){let t=new Date(r);t.setHours(Math.floor(e.startMinutes/60),e.startMinutes%60,0,0),u.push(`EXDATE;TZID=${$}:${U(t)}`)}o.push("BEGIN:VEVENT",`UID:${e.id}-blocked@utmax`,`DTSTAMP:${L(l)}`,`DTSTART;TZID=${$}:${U(i)}`,`DTEND;TZID=${$}:${U(d)}`,`RRULE:FREQ=WEEKLY;BYDAY=${r};UNTIL=${L(s)}`,...u,`SUMMARY:${P(c)}`,"TRANSP:OPAQUE","END:VEVENT")}return o.push("END:VCALENDAR"),o.filter(Boolean).map(e=>{if(e.length<=75)return e;let t="",r=0;for(;r<e.length;)0===r?(t+=e.substring(r,r+75),r+=75):(t+="\r\n "+e.substring(r,r+74),r+=74);return t}).join("\r\n")}(e,r,a)],{type:"text/calendar;charset=utf-8"}),n=URL.createObjectURL(s),l=document.createElement("a");l.href=n,l.download=t.endsWith(".ics")?t:`${t}.ics`,l.click(),URL.revokeObjectURL(n)}(e,`${s}.ics`,s,r):"png"===a?function(e,t,r="UTMAX Schedule",a="u">typeof document&&document.documentElement.classList.contains("dark")?"dark":"light"){if("u">typeof Image){let s=new Image;s.crossOrigin="anonymous";let n=!1,l=()=>{n||(n=!0,q(e,t,r,s.complete&&s.naturalWidth>0?s:null,a))};s.onload=l,s.onerror=l,s.src="/utmaxlogo.png",setTimeout(l,150);return}q(e,t,r,null,a)}(e,`${s}.png`,s):"json"===a&&function(e,t,r="UTMAX Schedule"){let a=new Blob([JSON.stringify({app:"UTMAX",version:M.hl,protocolVersion:2,exportedAt:new Date().toISOString(),name:r,sections:e.map(e=>({uniqueNumber:e.uniqueNumber,courseCode:e.courseCode,title:e.title,professor:e.professor,creditHours:e.creditHours,location:e.location,termCode:e.termCode,meetings:(0,T.v8)(e).map(t=>({days:t.days,startMinutes:t.startMinutes,endMinutes:t.endMinutes,location:t.location||e.location}))}))},null,2)],{type:"application/json;charset=utf-8"}),s=URL.createObjectURL(a),n=document.createElement("a");n.href=s,n.download=t.endsWith(".json")?t:`${t}.json`,n.click(),URL.revokeObjectURL(s)}(e,`${s}.json`,s)}return(0,s.useEffect)(()=>{function e(e){m.current&&!m.current.contains(e.target)&&u(!1)}function t(e){let t=e.detail;t?.id!=="export-menu"&&u(!1)}return window.addEventListener("utmax:popover-opened",t),c&&document.addEventListener("mousedown",e),()=>{window.removeEventListener("utmax:popover-opened",t),document.removeEventListener("mousedown",e)}},[c]),(0,a.jsxs)("div",{ref:m,className:(0,f.A)("relative min-w-0 flex items-stretch",o),children:[(0,a.jsxs)("button",{type:"button",title:"Export schedule as .ics, .png, or .json",onClick:e=>{let t;e.stopPropagation(),u(t=!c),t&&window.dispatchEvent(new CustomEvent("utmax:popover-opened",{detail:{id:"export-menu"}}))},className:(0,f.A)("inline-flex items-center justify-center gap-1.5 font-bold text-xs transition-colors",i?"shrink-0 p-2 text-slate-900 hover:bg-gray-100 dark:text-white dark:hover:bg-gray-800 rounded-lg border-0 bg-transparent":"w-full rounded-lg border-0 bg-transparent px-2.5 py-2 text-slate-900 dark:text-white hover:bg-gray-100 dark:hover:bg-gray-800"),children:[(0,a.jsx)(N.$,{icon:C.A,className:"h-3.5 w-3.5 shrink-0 text-slate-900 dark:text-white"}),!i&&(0,a.jsx)("span",{className:"hidden font-bold text-slate-900 dark:text-white sm:inline",children:d}),(0,a.jsx)(N.$,{icon:n.A,className:(0,f.A)("h-3 w-3 shrink-0 text-slate-900 dark:text-white transition-transform duration-150",c&&"rotate-180")})]}),c&&(0,a.jsxs)("div",{className:"absolute right-0 top-full mt-1.5 z-[9999] w-44 rounded-xl border border-gray-200 bg-white p-1 shadow-2xl dark:border-gray-700 dark:bg-gray-900 animate-in fade-in zoom-in-95 duration-150 select-none",children:[(0,a.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),x("ics")},className:"flex w-full items-center justify-between rounded-lg px-3 py-2 text-xs font-bold text-slate-800 hover:bg-slate-100 dar
1k:text-slate-200 dark:hover:bg-slate-800 transition-colors",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,a.jsx)(N.$,{icon:w.A,className:"h-4 w-4 text-slate-900 dark:text-white shrink-0"}),(0,a.jsx)("span",{children:"Calendar (.ics)"})]}),0===e.length&&(0,a.jsx)("span",{className:"text-[0.7rem] text-slate-400 font-normal",children:"(empty)"})]}),(0,a.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),x("png")},className:"flex w-full items-center justify-between rounded-lg px-3 py-2 text-xs font-bold text-slate-800 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-slate-800 transition-colors",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,a.jsx)(N.$,{icon:S.A,className:"h-4 w-4 text-slate-900 dark:text-white shrink-0"}),(0,a.jsx)("span",{children:"Image (.png)"})]}),0===e.length&&(0,a.jsx)("span",{className:"text-[0.7rem] text-slate-400 font-normal",children:"(empty)"})]}),(0,a.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),x("json")},className:"flex w-full items-center justify-between rounded-lg px-3 py-2 text-xs font-bold text-slate-800 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-slate-800 transition-colors",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,a.jsx)(N.$,{icon:v.A,className:"h-4 w-4 text-slate-900 dark:text-white shrink-0"}),(0,a.jsx)("span",{children:"Data (.json)"})]}),0===e.length&&(0,a.jsx)("span",{className:"text-[0.7rem] text-slate-400 font-normal",children:"(empty)"})]})]})]})}function W(e){return e.trim().replace(/\s+/g," ").toLowerCase()}var G=r(61224),H=r(51752),X=r(50626),Y=r(6923),V=r(1275);function z({schedule:e,termCode:t="20269",sectionUniqueNumbers:r=[],onClose:n,onFeedPublished:l}){let[o,i]=(0,s.useState)(!1),[d,x]=(0,s.useState)(!1),[p,b]=(0,s.useState)(!1),[g,y]=(0,s.useState)(null),[k,w]=(0,s.useState)(e.feedId||""),[v,j]=(0,s.useState)(e.feedExpiresAt||""),[A,C]=(0,s.useState)(""),[S,M]=(0,s.useState)(!1),[T,$]=(0,s.useState)(null),E="utmax.tech",D=encodeURIComponent((e.name||"UTMAX Schedule").replace(/[^a-z0-9_\-]/gi,"_").toLowerCase()),R=k?`https://${E}/api/schedule/feed/${k}/${D}.ics`:"",U=k?`webcal://${E}/api/schedule/feed/${k}/${D}.ics`:"",L=[{id:"apple",name:"Apple Calendar",type:"link",icon:H.A,getUrl:()=>U},{id:"google",name:"Google Calendar",type:"link",icon:X.A,getUrl:()=>`https://calendar.google.com/calendar/render?cid=${encodeURIComponent(U)}`},{id:"outlook",name:"Outlook",type:"link",icon:H.A,getUrl:()=>`https://outlook.office.com/calendar/0/addfromweb?name=${encodeURIComponent(e.name)}&url=${encodeURIComponent(U)}`},{id:"yahoo",name:"Yahoo Calendar",type:"link",icon:X.A,getUrl:()=>`https://calendar.yahoo.com/subscribe?icalurl=${encodeURIComponent(R)}`},{id:"proton",name:"Proton Calendar",type:"instructions",icon:H.A,instructions:"Settings > Calendars > Add Calendar from URL"},{id:"fantastical",name:"Fantastical",type:"instructions",icon:H.A,instructions:"File > New Calendar Subscription"},{id:"thunderbird",name:"Thunderbird",type:"instructions",icon:H.A,instructions:"File > New > Calendar > On the Network"},{id:"notion",name:"Notion Calendar",type:"instructions",icon:H.A,instructions:"Syncs via Google Calendar. Add this feed to Google Calendar first."},{id:"other",name:"Other / Generic",type:"instructions",icon:H.A,instructions:"Copy the URL above and find the 'Subscribe from URL' option in your app."}].filter(e=>e.name.toLowerCase().includes(A.toLowerCase()));async function P(){i(!0),y(null);try{let a=await fetch("/api/schedule/feed/publish",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({feedId:k||e.feedId||void 0,termCode:t,sectionUniqueNumbers:r,blockedTimes:e.buildPreferences?.blockedTimes||[],name:e.name})});if(!a.ok)throw Error("Server returned an error publishing feed.");let s=await a.json();w(s.feedId),j(s.expiresAt),x(!0),setTimeout(()=>x(!1),2e3),l?.(s.feedId,s.expiresAt,e.name,r)}catch(e){y(e instanceof Error?e.message:"Failed to generate feed URL")}finally{i(!1)}}let I=v?new Date(v).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}):"",O=e.name!==e.feedLastPublishedName||JSON.stringify(r.slice().sort())!==JSON.stringify((e.feedLastPublishedSections||[]).slice().sort());return(0,a.jsx)("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center bg-black/60 backdrop-blur-xs p-4 animate-in fade-in duration-150",onClick:n,children:(0,a.jsxs)("div",{className:"w-full max-w-lg rounded-none border border-slate-300 bg-white p-6 shadow-2xl dark:border-slate-700 dark:bg-slate-900 animate-in zoom-in-95 duration-150",onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3 pb-4 border-b border-slate-200 dark:border-slate-800 mb-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center bg-max-primary/10 text-max-primary dark:bg-max-primary/20 rounded-none",children:(0,a.jsx)(N.$,{icon:c.A,className:"h-5 w-5"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-base font-bold text-slate-900 dark:text-white",children:"Live Calendar Feed Subscription"}),(0,a.jsx)("p",{className:"text-xs font-medium text-slate-500 dark:text-slate-400",children:"Subscribe in Apple Calendar, Google Calendar, or Outlook"})]})]}),(0,a.jsx)("button",{type:"button",onClick:n,className:"rounded-none p-1.5 text-slate-400 hover:bg-slate-100 hover:text-slate-700 dark:hover:bg-slate-800 dark:hover:text-slate-200 transition-colors",children:(0,a.jsx)(N.$,{icon:m.A,className:"h-5 w-5"})})]}),k?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("label",{className:"text-xs font-bold text-slate-700 dark:text-slate-300",children:"Your 15-Character Subscription URL"}),I&&(0,a.jsxs)("span",{className:"inline-flex items-center gap-1 bg-emerald-100 dark:bg-emerald-950/60 px-2.5 py-0.5 text-[11px] font-bold text-emerald-700 dark:text-emerald-400 rounded-none",children:[(0,a.jsx)(N.$,{icon:Y.A,className:"h-3 w-3"}),"Expires ",I," (180 days)"]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"text",readOnly:!0,value:R,className:"min-w-0 flex-1 border border-slate-300 bg-slate-50 dark:border-slate-700 dark:bg-slate-800 px-3 py-2 text-xs font-mono text-slate-900 dark:text-white focus:outline-none rounded-none"}),(0,a.jsxs)("button",{type:"button",onClick:function(){R&&(navigator.clipboard.writeText(R),b(!0),setTimeout(()=>b(!1),2500))},className:"flex shrink-0 items-center gap-1.5 bg-max-primary px-3.5 py-2 text-xs font-semibold text-white shadow-sm hover:bg-max-primary/90 transition-colors rounded-none",children:[(0,a.jsx)(N.$,{icon:p?u.A:h.A,className:"h-4 w-4"}),(0,a.jsx)("span",{children:p?"Copied!":"Copy"})]})]}),(0,a.jsxs)("div",{className:"pt-2",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>M(!S),className:"flex w-full items-center justify-between border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-800 p-2.5 text-xs font-bold text-slate-800 dark:text-slate-200 hover:bg-slate-50 dark:hover:bg-slate-700 transition-colors rounded-none",children:[(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)(N.$,{icon:H.A,className:"h-4 w-4 text-max-primary"}),"Add to Calendar app..."]}),(0,a.jsx)("span",{className:"text-[10px] opacity-60",children:S?"▲":"▼"})]}),S&&(0,a.jsxs)("div",{className:"mt-2 border border-slate-300 dark:border-slate-700 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-200 rounded-none p-3 shadow-inner animate-in slide-in-from-top-1",children:[(0,a.jsx)("div",{className:"mb-3",children:(0,a.jsx)("input",{type:"text",placeholder:"Search calendar apps...",value:A,onChange:e=>C(e.target.value),className:"w-full border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-800 px-3 py-2 text-xs font-semibold text-slate-900 dark:text-white placeholder-slate-400 focus:outline-none focus:border-max-primary rounded-none"})}),(0,a.jsx)("div",{className:"max-h-[160px] overflow-y-auto pr-1 space-y-1 custom-scrollbar",children:0===L.length?(0,a.jsx)("div",{className:"py-3 text-center text-xs text-slate-500",children:"No calendar apps found."}):L.map(e=>(0,a.jsxs)("div",{children:["link"===e.type?(0,a.jsxs)("a",{href:e.getUrl?.()||"",target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-between bg-white dark:bg-slate-800/50 hover:bg-max-primary/10 dark:hover:bg-max-primary/20 p-2.5 text-xs font-semibold transition-colors rounded-none border border-slate-200 dark:border-transparent hover:border-max-primary/30",children:[(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)(N.$,{icon:e.icon,className:"h-4 w-4"}),e.name]}),(0,a.jsx)(N.$,{icon:V.A,className:"h-3 w-3 opacity-50"})]}):(0,a.jsxs)("button",{type:"button",onClick:()=>$(T===e.id?null:e.id),className:(0,f.A)("w-full flex items-center justify-between p-2.5 text-xs font-semibold transition-colors rounded-none border",T===e.id?"bg-max-primary/10 dark:bg-max-primary/20 border-max-primary/30":"bg-white dark:bg-slate-800/50 hover:bg-slate-50 dark:hover:bg-slate-800 border-slate-200 dark:border-transparent hover:border-slate-300 dark:hover:border-slate-700 text-slate-800 dark:text-slate-200"),children:[(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)(N.$,{icon:e.icon,className:"h-4 w-4"}),e.name]}),(0,a.jsx)("span",{className:"text-[10px] opacity-60",children:T===e.id?"▲":"▼"})]}),"instructions"===e.type&&T===e.id&&(0,a.jsxs)("div",{className:"px-3 py-2.5 bg-slate-50 dark:bg-slate-950 text-[11px] font-mono text-slate-700 dark:text-slate-300 border-x border-b border-max-primary/30",children:[(0,a.jsx)("span",{className:"font-sans font-bold text-slate-900 dark:text-white block mb-1 text-xs",children:"How to add:"}),e.instructions]})]},e.id))})]})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between border-t border-slate-100 dar
1k:border-slate-800 pt-4 mt-4",children:[(0,a.jsx)("div",{children:(0,a.jsxs)("button",{type:"button",disabled:o||d,onClick:()=>void P(),className:(0,f.A)("text-xs font-bold transition-colors flex items-center gap-1.5",d?"text-emerald-600 dark:text-emerald-400":"text-max-primary hover:underline"),children:[d&&(0,a.jsx)(u.A,{className:"h-3.5 w-3.5",strokeWidth:3}),o?"Updating...":d?"Done":O?"Publish Current Changes to URL":"Force Update Feed Data"]})}),(0,a.jsx)("button",{type:"button",onClick:n,className:"border border-slate-300 dark:border-slate-700 px-4 py-1.5 text-xs font-semibold text-slate-700 hover:bg-slate-50 dark:text-slate-200 dark:hover:bg-slate-800 transition-colors rounded-none",children:"Done"})]})]}):(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("p",{className:"text-xs font-semibold text-slate-700 dark:text-slate-300 leading-relaxed",children:["Generate a live 15-character subscription URL for ",(0,a.jsx)("strong",{children:e.name}),". Calendar apps will automatically pull live updates to your class times and room locations."]}),(0,a.jsxs)("div",{className:"flex items-center gap-2 text-xs font-bold text-amber-600 dark:text-amber-400",children:[(0,a.jsx)(N.$,{icon:Y.A,className:"h-4 w-4 shrink-0"}),(0,a.jsx)("span",{children:"Subscription links auto-expire after 180 days (6 months)."})]}),g&&(0,a.jsx)("p",{className:"text-xs font-semibold text-red-600 dark:text-red-400",children:g}),(0,a.jsxs)("div",{className:"flex items-center justify-end gap-2 pt-4 border-t border-slate-100 dark:border-slate-800",children:[(0,a.jsx)("button",{type:"button",onClick:n,className:"rounded-none border border-slate-300 dark:border-slate-700 px-4 py-2 text-xs font-semibold text-slate-700 hover:bg-slate-50 dark:text-slate-200 dark:hover:bg-slate-800 transition-colors",children:"Cancel"}),(0,a.jsxs)("button",{type:"button",disabled:o,onClick:()=>void P(),className:"rounded-none bg-max-primary px-4 py-2 text-xs font-bold text-white shadow-sm hover:bg-max-primary/90 transition-colors disabled:opacity-50 flex items-center gap-2",children:[(0,a.jsx)(N.$,{icon:X.A,className:"h-4 w-4"}),o?"Generating URL...":"Generate Live Subscription URL"]})]})]})]})})}var Z=r(31408);function _({data:e,activeScheduleId:t,activeLabel:r,onActivate:y,onRemove:k,onRemoveAll:w,onRename:v,onDuplicate:j,onRenameEditingChange:C,onCreateEmpty:S,onAddCourse:M,selectedCriteria:T,onToggleCriterion:$,onClearCriteria:E,compact:D,inPanel:R,disabled:U}){let[L,P]=(0,s.useState)(!1),[I,O]=(0,s.useState)(!1),[F,q]=(0,s.useState)(!1),[H,X]=(0,s.useState)(!1),[Y,V]=(0,s.useState)(!1),[Q,K]=(0,s.useState)(""),[J,ee]=(0,s.useState)(null),[et,er]=(0,s.useState)(null),[ea,es]=(0,s.useState)(!1),[en,el]=(0,s.useState)(null),[eo,ei]=(0,s.useState)(""),[ed,ec]=(0,s.useState)(null),eu=(0,s.useRef)(null),{saveSchedule:em}=(0,b.n)(),{advancedView:ex}=(0,Z.H)(),eh=e.savedSchedules.find(e=>e.id===t)??null,ep=eh?(0,g.Ye)(e,eh):[],ef=eh?.name??r??"UTMAX Schedule",eb=(0,s.useCallback)(()=>{el(null),ei(""),ec(null),C?.(!1)},[C]);function eg(t,r){var a;let s,n=(r??eo).trim();if(!n)return void eb();if(a=e.savedSchedules,(s=W(n))&&a.some(e=>e.id!==t&&W(e.name)===s)){ei(n),ec("A schedule with this name already exists.");return}v(t,n),el(null),ei(""),ec(null),C?.(!1)}return(0,s.useEffect)(()=>{function e(e){let t=e.detail,r=t?.id;"schedule-select"!==r&&"add-menu"!==r&&"layout-menu"!==r&&(P(!1),O(!1),q(!1))}return window.addEventListener("utmax:popover-opened",e),()=>{window.removeEventListener("utmax:popover-opened",e)}},[]),(0,s.useEffect)(()=>{if(L||I||F)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e);function e(e){let t=e.target;!t||!eu.current?.contains(t)&&document.body.contains(t)&&(P(!1),O(!1),q(!1),en&&eb())}},[L,I,F,en,eb]),(0,a.jsxs)("div",{ref:eu,className:(0,f.A)("relative min-w-0 overflow-visible border border-slate-200 dark:border-slate-700",R?"w-full":"w-auto",!R&&"bg-white dark:bg-slate-900/50"),children:[(0,a.jsxs)("div",{className:"flex w-auto min-w-0 items-stretch",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>{let e=!L;
1P(e),e&&window.dispatchEvent(new CustomEvent("utmax:popover-opened",{detail:{id:"schedule-select"}})),O(!1),q(!1)},className:(0,f.A)("flex min-w-0 items-center justify-between gap-2 px-3 py-2 text-left font-semibold text-slate-900 transition-colors hover:bg-slate-100 dark:text-slate-100 dark:hover:bg-slate-800",D?"w-[9.5rem] text-xs sm:w-[11rem]":"min-w-0 flex-1 text-sm",R?"bg-slate-50 dark:bg-slate-900/50":"bg-transparent"),"aria-expanded":L,children:[(0,a.jsx)("span",{className:"min-w-0 truncate",children:eh?.name??r??"Choose a schedule"}),(0,a.jsx)(N.$,{icon:n.A,className:(0,f.A)("h-4 w-4 shrink-0 opacity-60 transition-transform",L&&"rotate-180")})]}),(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsxs)("button",{type:"button","data-demo-target":"toolbar-add",onClick:()=>{let e=!I;O(e),e&&window.dispatchEvent(new CustomEvent("utmax:popover-opened",{detail:{id:"add-menu"}})),P(!1),q(!1)},className:(0,f.A)("flex h-full shrink-0 items-center gap-1 border-l border-slate-200 px-2.5 py-2 text-slate-900 font-bold transition-colors hover:bg-slate-100 dark:border-slate-700 dark:text-white dark:hover:bg-slate-800",I&&"bg-slate-100 dark:bg-slate-800"),title:"Add course or create new schedule","aria-label":"Add course or create new schedule",children:[(0,a.jsx)(N.$,{icon:l.A,className:"h-4 w-4 stroke-[2.5]"}),(0,a.jsx)("span",{className:"hidden text-xs font-bold sm:inline",children:"Add"})]}),I&&(0,a.jsxs)("div",{className:"absolute left-0 top-full mt-1.5 z-[9999] w-48 rounded-xl border border-gray-200 bg-white p-1 shadow-2xl dark:border-gray-700 dark:bg-gray-900 animate-in fade-in zoom-in-95 duration-150",children:[(0,a.jsxs)("button",{type:"button","data-demo-target":"add-course-menu",onClick:()=>{O(!1),M?.(),window.dispatchEvent(new CustomEvent("utmax:open-add-course"))},className:"flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-xs font-semibold text-slate-800 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-slate-800 transition-colors",children:[(0,a.jsx)(N.$,{icon:o.A,className:"h-4 w-4 text-slate-900 dark:text-white shrink-0"}),(0,a.jsx)("span",{children:"Add Course"})]}),(0,a.jsxs)("button",{type:"button",onClick:()=>{O(!1),X(!0)},className:"flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-xs font-semibold text-slate-800 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-slate-800 transition-colors",children:[(0,a.jsx)(N.$,{icon:i.A,className:"h-4 w-4 text-slate-900 dark:text-white shrink-0"}),(0,a.jsx)("span",{children:"Add Schedule"})]})]})]}),ex&&$&&(0,a.jsxs)("button",{type:"button",disabled:U,"data-demo-target":"toolbar-layout",onClick:()=>{let e=!F;q(e),e&&window.dispatchEvent(new CustomEvent("utmax:popover-opened",{detail:{id:"layout-menu"}})),P(!1),O(!1)},className:(0,f.A)("flex shrink-0 items-center gap-1.5 border-l border-slate-200 px-2.5 py-2 text-xs font-semibold transition-colors hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",(T?.length??0)>0?"text-slate-900 font-bold dark:text-white":"text-slate-900 dark:text-slate-200",F&&"bg-slate-100 dark:bg-slate-800",U&&"opacity-50 cursor-not-allowed"),title:"Layout options","aria-label":"Layout options",children:[(0,a.jsx)(N.$,{icon:d.A,className:"h-3.5 w-3.5"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:"Layout"}),(T?.length??0)>0&&(0,a.jsx)("span",{className:"ml-0.5 rounded-full bg-slate-900 px-1.5 text-xs font-bold text-white dark:bg-white dark:text-slate-900",children:T?.length})]}),(0,a.jsxs)("div",{className:"flex shrink-0 items-stretch border-l border-slate-200 dark:border-slate-700",children:[ex&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("button",{type:"button","data-demo-target":"toolbar-sync-button",onClick:()=>{V(!0),P(!1),O(!1),q(!1)},className:"flex shrink-0 items-center gap-1 border-r border-slate-200 px-2.5 py-2 text-xs font-semibold text-slate-800 transition-colors hover:bg-slate-100 dark:border-slate-700 dark:text-slate-200 dark:hover:bg-slate-800",title:eh?.feedId?"View live calendar URL feed":"Sync to calendar application","aria-label":eh?.feedId?"View live calendar URL feed":"Sync to calendar application",children:[(0,a.jsx)(N.$,{icon:c.A,className:"h-3.5 w-3.5 text-max-primary"}),(0,a.jsx)("span",{className:"hidden sm:inline",children:eh?.feedId?"Live URL":"Sync"})]}),(0,a.jsx)(A,{compact:!0,iconOnly:!1,label:"Upload",activate:!0})]}),(0,a.jsx)(B,{sections:ep,scheduleName:ef,blockedTimes:eh?.buildPreferences?.blockedTimes??[],label:"Export"})]})]}),ex&&F&&(0,a.jsxs)("div",{"data-demo-target":"layout-criteria",className:"absolute right-8 top-full mt-1.5 z-[9999] w-64 roun
1ded-xl border border-gray-200 bg-white p-3 shadow-2xl dark:border-gray-700 dark:bg-gray-900 animate-in fade-in zoom-in-95 duration-150",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between pb-2 border-b border-gray-100 dark:border-gray-800 mb-2",children:[(0,a.jsx)("span",{className:"text-xs font-bold text-slate-900 dark:text-white",children:"Layout Options (Multi-Select)"}),(T?.length??0)>0&&E&&(0,a.jsx)("button",{type:"button",onClick:E,className:"text-xs text-max-primary hover:underline font-medium",children:"Clear all"})]}),(0,a.jsx)("div",{className:"space-y-1",children:G.ms.map(e=>{let t=T?.includes(e.id)??!1;return(0,a.jsxs)("label",{className:"flex items-start gap-2 p-1.5 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800/80 cursor-pointer transition-colors",children:[(0,a.jsx)("input",{type:"checkbox",checked:t,onChange:()=>$?.(e.id),className:"mt-0.5 accent-max-primary rounded"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("div",{className:"text-xs font-semibold text-slate-800 dark:text-slate-200",children:e.label}),(0,a.jsx)("div",{className:"text-xs text-gray-500 dark:text-gray-400 leading-snug",children:e.description})]})]},e.id)})})]}),L&&(0,a.jsxs)("div",{className:(0,f.A)("absolute left-0 z-50 max-h-64 overflow-y-auto overflow-x-hidden border border-t-0 border-gray-200 bg-white shadow-lg dark:border-gray-700 dark:bg-gray-900",D?"w-[min(100vw-2rem,22rem)] text-xs":"right-0 min-w-[18rem] w-full text-xs"),children:[(0,a.jsx)("ul",{className:"divide-y divide-gray-100 dark:divide-gray-800",children:e.savedSchedules.map(e=>{let r=e.id===t,s=en===e.id;return(0,a.jsxs)("li",{className:"px-2 py-1.5",children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-1.5",children:[s?(0,a.jsxs)("form",{onSubmit:t=>{t.preventDefault(),t.stopPropagation(),eg(e.id)},onClick:e=>e.stopPropagation(),onMouseDown:e=>e.stopPropagation(),className:"flex min-w-0 flex-1 items-center gap-1",children:[(0,a.jsx)("input",{type:"text",value:eo,onChange:e=>{ei(e.target.value),ec(null)},onKeyDown:t=>{t.stopPropagation(),"Enter"===t.key?(t.preventDefault(),eg(e.id,t.currentTarget.value)):"Escape"===t.key&&(t.preventDefault(),eb())},autoFocus:!0,onFocus:e=>e.currentTarget.select(),className:"min-w-0 flex-1 rounded-md border border-max-primary bg-white px-2 py-1.5 text-xs font-bold text-slate-900 focus:outline-none dark:bg-slate-900 dark:text-white",placeholder:"Schedule name","aria-label":"Schedule name","aria-describedby":ed?"schedule-name-error":void 0}),(0,a.jsx)("button",{type:"submit",onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-emerald-300 bg-emerald-50 text-emerald-700 transition-colors hover:bg-emerald-100 dark:border-emerald-800 dark:bg-emerald-950/40 dark:text-emerald-400 dark:hover:bg-emerald-950/70",title:"Save schedule name","aria-label":"Save name",children:(0,a.jsx)(u.A,{className:"h-4 w-4",strokeWidth:2.5})}),(0,a.jsx)("button",{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),eb()},onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-slate-200 text-slate-500 transition-colors hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",title:"Cancel rename","aria-label":"Cancel rename",children:(0,a.jsx)(m.A,{className:"h-4 w-4",strokeWidth:2.5})})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{type:"button",onClick:()=>{y(e.id)},className:(0,f.A)("min-w-0 flex-1 truncate rounded-md border px-2.5 py-1.5 text-left text-xs font-semibold transition-colors",r?"border-max-primary/60 bg-max-primary/10 font-bold text-max-primary dark:bg-max-primary/20 dark:text-max-primary":"border-gray-200 bg-white text-slate-800 hover:bg-slate-50 dark:border-gray-700 dark:bg-gray-900 dark:text-slate-200 dark:hover:bg-slate-800"),title:e.name,children:e.name}),(0,a.jsx)("button",{type:"button",onClick:t=>{t.stopPropagation(),t.preventDefault(),el(e.id),ei(e.name),ec(null),C?.(!0)},onMouseDown:e=>e.stopPropagation(),className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-slate-200 bg-white text-slate-700 transition-colors hover:border-max-primary/40 hover:bg-max-glow hover:text-max-primary dark:border-slate-700 dark:bg-slate-900 dark:text-slate-200 dark:hover:bg-slate-800",title:"Rename schedule","aria-label":`Rename ${e.name}
1`,children:(0,a.jsx)(x.A,{className:"h-3.5 w-3.5",strokeWidth:2.25})}),j&&(0,a.jsx)("button",{type:"button",onClick:t=>{t.stopPropagation(),j(e.id)},className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-slate-200 bg-white text-slate-700 transition-colors hover:border-max-primary/40 hover:bg-max-glow hover:text-max-primary dark:border-slate-700 dark:bg-slate-900 dark:text-slate-200 dark:hover:bg-slate-800",title:"Duplicate schedule (create unlinked staging copy)","aria-label":`Duplicate ${e.name}`,children:(0,a.jsx)(h.A,{className:"h-3.5 w-3.5",strokeWidth:2.25})})]}),(0,a.jsx)("button",{type:"button",title:"Delete",onClick:t=>{t.stopPropagation(),et===e.id?(k(e.id),er(null)):(er(e.id),setTimeout(()=>er(null),3e3))},className:(0,f.A)("inline-flex h-8 shrink-0 items-center justify-center rounded-md border px-2 dark:border-gray-600",et===e.id?"bg-red-600 text-white hover:bg-red-700":"w-8 text-red-600 hover:bg-red-50 dark:hover:bg-red-950/30"),children:et===e.id?(0,a.jsx)("span",{className:"text-xs font-bold",children:"Confirm?"}):(0,a.jsx)(p.A,{className:"h-3.5 w-3.5",strokeWidth:2.25})})]}),s&&ed&&(0,a.jsx)("p",{id:"schedule-name-error",role:"alert",className:"mt-1 text-xs text-red-600 dark:text-red-400",children:ed})]},e.id)})}),S&&(0,a.jsx)("div",{className:"border-t border-gray-100 p-2 dark:border-gray-800",children:(0,a.jsxs)("button",{type:"button",onClick:()=>{P(!1),X(!0)},className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-gray-300 px-2 py-1.5 text-xs font-semibold text-gray-700 hover:bg-gray-50 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800 transition-colors",children:[(0,a.jsx)(N.$,{icon:l.A,className:"h-3.5 w-3.5 text-max-primary"}),"New schedule"]})}),e.savedSchedules.length>2&&(0,a.jsx)("div",{className:"border-t p-2 dark:border-gray-700",children:(0,a.jsx)("button",{type:"button",onClick:()=>{w&&(ea?(w(),es(!1)):(es(!0),setTimeout(()=>es(!1),3e3)))},className:(0,f.A)("w-full rounded border px-2 py-1.5 text-xs font-medium transition",ea?"bg-red-600 border-red-600 text-white shadow-sm hover:bg-red-700":"border-red-200 text-red-600 hover:bg-red-50 dark:border-red-900/50 dark:text-red-400 dark:hover:bg-red-950/30"),children:ea?"Are you sure? Delete ALL":"Delete all schedules"})})]}),H&&(0,a.jsx)("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center bg-black/50 backdrop-blur-xs p-4 animate-in fade-in duration-150",children:(0,a.jsxs)("div",{className:"w-full max-w-sm rounded-xl border border-gray-200 bg-white p-5 shadow-2xl dark:border-gray-700 dark:bg-gray-900 animate-in zoom-in-95 duration-150",onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3 mb-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,a.jsx)("div",{className:"flex h-9 w-9 items-center justify-center rounded-lg bg-max-primary/10 text-max-primary dark:bg-max-primary/20",children:(0,a.jsx)(N.$,{icon:i.A,className:"h-5 w-5"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-sm font-bold text-slate-900 dark:text-white",children:"Create New Schedule"}),(0,a.jsx)("p",{className:"text-xs text-slate-500 dark:text-slate-400",children:"Enter a name for your new calendar schedule."})]})]}),(0,a.jsx)("button",{type:"button",onClick:()=>{X(!1),K(""),ee(null)},className:"rounded-lg p-1 text-slate-400 hover:bg-slate-100 hover:text-slate-700 dark:hover:bg-slate-800 dark:hover:text-slate-200",children:(0,a.jsx)(N.$,{icon:m.A,className:"h-4 w-4"})})]}),(0,a.jsxs)("form",{onSubmit:t=>{let r,a;t.preventDefault(),r=`Schedule ${e.savedSchedules.length+1}`,a=Q.trim()||r,e.savedSchedules.some(e=>e.name.trim().toLowerCase()===a.toLowerCase())?ee("A schedule with this name already exists."):(S&&S(a),X(!1),K(""),ee(null))},className:"space-y-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("input",{type:"text",value:Q,onChange:e=>{K(e.target.value),ee(null)},placeholder:`e.g. Schedule ${e.savedSchedules.length+1}`,className:"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-3 py-2 text-xs font-semibold text-slate-900 focus:border-max-primary focus:outline-none dark:text-white",autoFocus:!0}),J&&(0,a.jsx)("p",{className:"mt-1 text-xs font-semibold text-amber-600 dar
1k:text-amber-400",children:J})]}),(0,a.jsxs)("div",{className:"flex items-center justify-end gap-2 pt-1",children:[(0,a.jsx)("button",{type:"button",onClick:()=>{X(!1),K(""),ee(null)},className:"rounded-lg border border-gray-300 dark:border-gray-600 px-3 py-1.5 text-xs font-semibold text-slate-700 hover:bg-slate-50 dark:text-slate-200 dark:hover:bg-slate-800",children:"Cancel"}),(0,a.jsx)("button",{type:"submit",className:"rounded-lg bg-max-primary px-3.5 py-1.5 text-xs font-semibold text-white shadow-sm hover:bg-max-primary/90 transition-colors",children:"Create Schedule"})]})]})]})}),Y&&eh&&(0,a.jsx)(z,{schedule:eh,termCode:ep[0]?.termCode||"20269",sectionUniqueNumbers:eh.sectionUniqueNumbers||ep.map(e=>e.uniqueNumber),onClose:()=>V(!1),onFeedPublished:(e,t,r,a)=>{em({...eh,feedId:e,feedExpiresAt:t,feedLastPublishedName:r,feedLastPublishedSections:a},!1)}})]})}},22772:(e,t,r)=>{r.d(t,{R:()=>d});var a=r(95155),s=r(12115),n=r(29722),l=r(1872),o=r(53545),i=r(62338);function d({courseCode:e,currentColor:t}){let{setCourseColor:r}=(0,i.n)(),[c,u]=(0,s.useState)(!1),m=(0,s.useRef)(null);return(0,s.useEffect)(()=>{if(c)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e);function e(e){m.current&&!m.current.contains(e.target)&&u(!1)}},[c]),(0,a.jsxs)("div",{className:"relative flex",ref:m,children:[(0,a.jsx)("button",{type:"button",onClick:()=>u(e=>!e),className:(0,n.A)("w-1.5 shrink-0 self-stretch rounded-full hover:ring-2 hover:ring-gray-400 dark:hover:ring-gray-500 transition-all cursor-pointer",!t.startsWith("#")&&t),style:t.startsWith("#")?{backgroundColor:t}:void 0,"aria-label":`Change color for ${e}`,title:"Change course color"}),c&&(0,a.jsxs)("div",{className:"absolute left-0 top-full z-[100] mt-2 flex w-[140px] flex-wrap gap-1.5 rounded-lg border border-gray-200 bg-white p-2 shadow-lg dark:border-gray-700 dark:bg-gray-800",children:[(0,a.jsxs)("p",{className:"w-full text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400",children:[e," Color"]}),o.w.map(t=>(0,a.jsx)("button",{type:"button",onClick:()=>{r(e,t),u(!1)},className:(0,n.A)("h-5 w-5 rounded-full hover:scale-110 hover:ring-2 ring-gray-300 dark:ring-gray-500 transition-all",(0,o.tH)(t)),"aria-label":`Select ${t}`},t)),(0,a.jsxs)("div",{className:"mt-2 flex w-full flex-col gap-2 border-t border-gray-100 pt-2 dark:border-gray-700",children:[(0,a.jsx)("p",{className:"text-xs font-medium text-gray-500 dark:text-gray-400",children:"Custom Color"}),(0,a.jsx)("div",{className:"w-full overflow-hidden rounded",children:(0,a.jsx)(l.jI,{color:t.startsWith("#")?t:"#3b82f6",onChange:t=>{r(e,t)},style:{width:"100%",height:"100px"}})}),(0,a.jsx)("button",{type:"button",onClick:()=>{r(e,null),u(!1)},className:"w-full rounded py-1 text-center text-xs font-medium text-gray-600 transition-colors hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700",children:"Reset to Auto"})]})]})]})}},38297:(e,t,r)=>{r.d(t,{p:()=>s});let a="utmax-scroll",s={mainTab:e=>`${a}:main:${e}`,page:e=>`${a}:page:${e||"/"}`,overlay:`${a}:overlay`,extensionEmbed:`${a}:extension-embed`,sidePanel:e=>`${a}:side-panel${e?":compact":""}`}},45535:(e,t,r)=>{r.d(t,{T:()=>o,y:()=>l});var a=r(95155),s=r(29722),n=r(40240);function l({analysis:e,compact:t,className:r}){let o=!e.hasConflict,i=e.hasConflict&&!e.selectable,d=(0,n.A)(e);return(0,a.jsx)("span",{title:d,className:(0,s.A)("inline-flex shrink-0 items-center rounded-full border font-semibold",t?"px-1.5 py-0.5 text-xs":"px-2 py-0.5 text-xs",o&&"border-green-300 bg-green-50 text-green-800 dark:border-green-700 dark:bg-green-950/50 dark:text-green-200",!o&&!i&&"border-amber-300 bg-amber-50 text-amber-900 dark:border-amber-700 dark:bg-amber-950/50 dark:text-amber-200",i&&"border-red-300 bg-red-50 text-red-800 dark:border-red-700 dark:bg-red-950/50 dark:text-red-200",r),children:o?"No conflict":i?"Blocked":"Conflict"})}function o(e){return{hasConflict:e.hasConflict,conflictsWith:e.conflictsWith,selectable:e.selectable,blockedReason:e.blockedReason}}},52176:(e,t,r)=>{r.d(t,{d:()=>m});var a=r(95155),s=r(12115),n=r(14577),l=r(82749),o=r(51834),i=r(19707),d=r(65738),c=r(29722),u=r(56290);function m({compact:e,className:t,onDetails:r,onReplaceSection:x,onReplaceCourse:h,onCustomBackups:p,onRemove:f,backupCount:b}
1){let[g,y]=(0,s.useState)(!1),k=(0,s.useRef)(null);(0,s.useEffect)(()=>()=>{k.current&&clearTimeout(k.current)},[]);let w=(0,c.A)("inline-flex items-center gap-1 rounded border font-medium transition hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-800",e?"px-1.5 py-0.5 text-xs":"px-2 py-1 text-xs");return(0,a.jsxs)("div",{className:(0,c.A)("flex flex-wrap items-center gap-1",t),children:[r&&(0,a.jsxs)("button",{type:"button",onClick:r,className:w,title:"Section details",children:[(0,a.jsx)(u.$,{icon:n.A,className:e?"h-3 w-3":"h-3.5 w-3.5"}),"Details"]}),x&&(0,a.jsxs)("button",{type:"button",onClick:x,className:w,title:"Pick a different section for this course",children:[(0,a.jsx)(u.$,{icon:l.A,className:e?"h-3 w-3":"h-3.5 w-3.5"}),e?"Section":"Replace section"]}),h&&(0,a.jsxs)("button",{type:"button",onClick:h,className:w,title:"Swap this course for a different one",children:[(0,a.jsx)(u.$,{icon:o.A,className:e?"h-3 w-3":"h-3.5 w-3.5"}),e?"Course":"Replace course"]}),p&&(0,a.jsxs)("button",{type:"button",onClick:p,className:w,title:"Add and reorder custom backup sections",children:[(0,a.jsx)(u.$,{icon:i.A,className:e?"h-3 w-3":"h-3.5 w-3.5"}),e?"Backups":"Custom backups",null!=b&&b>0&&(0,a.jsx)("span",{className:"rounded-full bg-max-primary/15 px-1.5 text-xs font-bold text-max-primary",children:b})]}),f&&(0,a.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),f&&(g?(k.current&&(clearTimeout(k.current),k.current=null),y(!1),f()):(y(!0),k.current=setTimeout(()=>{y(!1)},3e3)))},className:(0,c.A)(w,g?"bg-red-600 text-white border-red-600 hover:bg-red-700 dark:bg-red-700 dark:border-red-700 dark:hover:bg-red-800":"border-red-200 text-red-700 hover:bg-red-50 dark:border-red-900 dark:text-red-400 dark:hover:bg-red-950/40"),title:g?"Click again to confirm removal":"Remove this course from the schedule",children:[(0,a.jsx)(u.$,{icon:d.A,className:e?"h-3 w-3":"h-3.5 w-3.5"}),g?"Confirm?":"Remove"]})]})}},53383:(e,t,r)=>{r.d(t,{O:()=>o,c:()=>l});var a=r(12115);function s(e){try{let t=sessionStorage.getItem(e);if(!t)return null;let r=Number(t);return Number.isFinite(r)?r:null}catch{return null}}function n(e,t){try{sessionStorage.setItem(e,String(t))}catch{}}function l(e,t=!0){let r=(0,a.useRef)(null);return(0,a.useEffect)(()=>{if(!t)return;let a=r.current;if(!a)return;let l=s(e);null!=l&&(a.scrollTop=l);let o=0,i=()=>{window.cancelAnimationFrame(o),o=window.requestAnimationFrame(()=>{n(e,a.scrollTop)})};return a.addEventListener("scroll",i,{passive:!0}),()=>{window.cancelAnimationFrame(o),a.removeEventListener("scroll",i)}},[t,e]),r}function o(e,t=!0){(0,a.useEffect)(()=>{if(!t)return;let r=s(e);null!=r&&window.scrollTo(0,r);let a=0,l=()=>{window.cancelAnimationFrame(a),a=window.requestAnimationFrame(()=>{n(e,window.scrollY)})};return window.addEventListener("scroll",l,{passive:!0}),()=>{window.cancelAnimationFrame(a),window.removeEventListener("scroll",l)}},[t,e])}},61224:(e,t,r)=>{r.d(t,{Hk:()=>y,b:()=>b,dh:()=>m,dp:()=>k,ms:()=>g,yw:()=>u});var a=r(68880),s=r(74510),n=r(84290),l=r(53545),o=r(87221),i=r(65543);let d=["Monday","Tuesday","Wednesday","Thursday","Friday"];function c(e){return e.trim().toUpperCase()}function u(e,t){let r=c(t);if(r.startsWith("CORE:")){let t=r.substring(5).trim();return(o[e.courseCode]||[]).some(e=>e.toUpperCase()===t)}let a=c(e.courseCode);if(a===r)return!0;let s=e.uniqueNumber?.replace(/\D/g,"").padStart(5,"0");return s===r.replace(/\D/g,"").padStart(5,"0")&&5===s.length||a.replace(/\s+/g,"")===r.replace(/\s+/g,"")}function m(e,t){let r=t.uniqueNumber?t.uniqueNumber.replace(/\D/g,"").padStart(5,"0"):"";if(r)return e.find(e=>e.uniqueNumber.replace(/\D/g,"").padStart(5,"0")===r)??null;let s=t.codeKey?.trim().toUpperCase();if(s){let t=e.find(e=>u(e,s)&&!(0,a.oM)(e.status));if(t)return t}return"number"==typeof t.sectionId?e.find(e=>e.id===t.sectionId)??null:null}function x(e,t){if(e.length!==t.length)return!1;let r=new Set;for(let a of t){let t=e.find(e=>!r.has(e.id)&&u(e,a));if(!t)return!1;r.add(t.id)}return!0}function h(e){let t=new Set;for(let r of e)for(let e of(0,i.v8)(r))if(!(e.startMinutes<0))for(let r of(0,l.rr)(e.days))d.includes(r)&&t.add(r);return t.size}function p(e){let t=[];for(let r of e)for(let e of(0,i.v8)(r))if(!(e.startMinutes<0))for(let r of(0,l.rr)(e.days))t.push({day:r,startMinutes:e.startMinutes,endMinutes:e.endMinutes});return t}function f(e){let t=new Map;for(let r of p(e)){let e=t.get(r.day)??[];e.push(r),t.set(r.day,e)}let r=0,a=0;for(let e of t.values())if(!(e.length<2)){e.sort((e,t)=>
1e.startMinutes-t.startMinutes);for(let t=0;t<e.length-1;t++){let s=e[t+1].startMinutes-e[t].endMinutes;s<=0||(a++,s<=20?r+=1:s<=60?r+=1-(s-20)/40*.5:r+=Math.max(.1,.5-(s-60)/120*.4))}}return a>0?r/a:.45}function b(e,t,r,o,d={}){let m=[...new Set(e.map(c).filter(Boolean))];if(0===m.length)return[];let g=function(e,t){let r=new Map;for(let s of t){let t=c(s);r.set(t,function(e,t){return t.filter(t=>u(t,e)&&!(0,a.oM)(t.status))}(s,e))}return r}(t,m);return(function(e,t,r,a,o,d={}){let m=function(e,t,r){let a=new Map(t.map(e=>[e.id,e])),s=new Map;for(let t of e){let e=c(t),n=r[e];if(null==n)continue;let l=a.get(n);l&&u(l,e)?s.set(e,l):s.set(e,null)}return s}(e,r,d);if([...m.values()].some(e=>null===e))return[];let b=e.map(e=>{var r;let s,l,o=c(e),i=m.get(o);return i?[i]:(r=t.get(o)??[],(l=(s=r.filter(t=>u(t,e))).map(e=>({...e,score:(0,n.lP)(e,a,s)}))).sort((e,t)=>(t.score??0)-(e.score??0)),l.slice(0,14))});if(b.some(e=>0===e.length))return[];let g=e.every(e=>null!=m.get(c(e))),y=[];function k(e,t,r){if(null==t&&null==r)return!0;let a=(t??8)*60,s=(r??18)*60;for(let t of e)for(let e of(0,i.v8)(t))if(!(e.startMinutes<0)&&(e.startMinutes<a||e.endMinutes>s))return!1;return!0}!function t(r,d){if(!(y.length>=240)){if(r===e.length){if(!x(d,e))return;let t=g?5:o.maxDaysOnCampus??5;if(h(d)>t)return;y.push({sections:[...d],score:function(e,t,r){var a;let s=0;for(let r of e){let a=e.filter(e=>c(e.courseCode)===c(r.courseCode));s+=(0,n.lP)(r,t,a.length?a:e)}let l=e.length?s/e.length:0,o=f(e),i=(a=h(e))<=0?.5:Math.max(0,1-(a-1)/4),d=r.gapWeight+r.minimizeDaysWeight||1,u=r.gapWeight/d,m=r.minimizeDaysWeight/d;return l*Math.max(.35,1-(u+m)*.45)+o*u+i*m}(d,a,o)});return}for(let e of b[r])if(!(0,s.kd)(e,d)){if(o.blockedTimes&&o.blockedTimes.length>0&&function(e,t){if(!t||0===t.length)return 0;let r=0;for(let a of(0,i.v8)(e)){if(a.startMinutes<0||a.endMinutes<=a.startMinutes)continue;let e=(0,l.rr)(a.days);for(let s of t){if(!e.includes(s.day))continue;let t=Math.max(a.startMinutes,s.startMinutes),n=Math.max(0,Math.min(a.endMinutes,s.endMinutes)-t);n>r&&(r=n)}}return r}(e,o.blockedTimes)>15)continue;d.push(e),function(e,t){if(t<=0)return!0;let r=new Map;for(let t of p(e)){let e=r.get(t.day)??[];e.push(t),r.set(t.day,e)}for(let e of r.values())if(!(e.length<2)){e.sort((e,t)=>e.startMinutes-t.startMinutes);for(let r=0;r<e.length-1;r++){let a=e[r+1].startMinutes-e[r].endMinutes;if(a>=0&&a<t)return!1}}return!0}(d,g?0:o.minGapMinutes??0)&&t(r+1,d),d.pop()}}}(0,[]);let w=y.filter(e=>k(e.sections,8,void 0)),v=w.filter(e=>k(e.sections,o.earliestStartHour,o.latestEndHour)),j=null!=o.earliestStartHour&&o.earliestStartHour>8||null!=o.latestEndHour&&o.latestEndHour<18?v:w;j.sort((e,t)=>t.score-e.score);let N=[],A=new Set;for(let t of j){if(!x(t.sections,e))continue;let r=t.sections.map(e=>e.id).sort((e,t)=>e-t).join(",");if(!A.has(r)&&(A.add(r),N.push(t),N.length>=80))break}return N})(m,g,t,r,o,d).map(e=>({sections:e.sections,courseCodes:m,score:e.score,daysOnCampus:h(e.sections)}))}let g=[{id:"earliest",label:"Earliest classes",description:"Prefer earlier morning start times"},{id:"latest",label:"Latest classes",description:"Prefer later afternoon start times"},{id:"closest",label:"Closest together",description:"Minimize wait time gaps between classes"},{id:"shortest_walk",label:"Shortest walk",description:"Minimize walking distance between buildings"},{id:"best_professor",label:"Best professor",description:"Highest rated professors on RMP"},{id:"best_grades",label:"Best grade average",description:"Highest class GPA & A-rate"}];function y(e,t){if(!t||0===t.length||0===e.length)return e;let r=e.map(e=>{let r=0;for(let a of t)r+=function(e,t){let r=e.sections;if(!r||0===r.length)return .5;let a=r.flatMap(e=>(0,i.v8)(e).filter(e=>e.startMinutes>=0));switch(t){case"earliest":if(0===a.length)return .5;return Math.max(0,Math.min(1,1-(a.reduce((e,t)=>e+t.startMinutes,0)/a.length-480)/540));case"latest":if(0===a.length)return .5;return Math.max(0,Math.min(1,(a.reduce((e,t)=>e+t.startMinutes,0)/a.length-480)/420));case"closest":return f(r);case"shortest_walk":{let e=p(r),t=new Map;for(let r of e){let e=t.get(r.day)??[];e.push(r),t.set(r.day,e)}let a=0,s=0;for(let e of t.values())if(!(e.length<2)){e.sort((e,t)=>
1e.startMinutes-t.startMinutes);for(let t=0;t<e.length-1;t++){a++;let r=e[t+1].startMinutes-e[t].endMinutes;r<=30?s+=1:r<=60?s+=.5:s+=.2}}return a>0?s/a:.5}case"best_professor":{let e=0,t=0;for(let a of r)null!=a.rmpRating&&a.rmpRating>0&&(e+=a.rmpRating/5,t++);return t>0?e/t:.5}case"best_grades":{let e=0,t=0;for(let a of r){let r=a.avgGrade??a.gradeGpa;null!=r&&r>0&&(e+=r/4,t++)}return t>0?e/t:.5}default:return .5}}(e,a);return{alt:e,score:r/t.length}});return r.sort((e,t)=>t.score-e.score),r.map(e=>e.alt)}function k(e,t,r,a,s={}){if(0===e.length)return null;let n=[];for(let l of e){let i=e.filter(e=>e!==l),d={...s};if(delete d[c(l)],b(i,t,r,a,d).length>0){let e=0,r=c(l);(r.startsWith("CORE:")||o[l]&&o[l].length>0)&&(e+=1e3),null!=s[r]&&(e+=500);let a=t.filter(e=>u(e,l));e+=10*(a[0]?.creditHours||3),e-=Math.min(a.length,20),n.push({code:l,destructiveness:e})}}return 0===n.length?null:(n.sort((e,t)=>e.destructiveness-t.destructiveness),n[0].code)}},76503:(e,t,r)=>{r.d(t,{Q:()=>l});var a=r(95155),s=r(29722),n=r(53383);function l({storageKey:e,enabled:t=!0,className:r,children:o,...i}){let d=(0,n.c)(e,t);return(0,a.jsx)("div",{ref:d,className:(0,s.A)(r),...i,children:o})}},90679:(e,t,r)=>{r.d(t,{F:()=>W});var a=r(95155),s=r(12115),n=r(9005),l=r(28180),o=r(7429),i=r(45911),d=r(62818),c=r(70105),u=r(76721),m=r(1275),x=r(29722),h=r(56290),p=r(48723),f=r(23540),b=r(47170);let g=new Map;function y(e){return`${e.professor||""}|${e.department||""}`}function k(e){let t=e.professor?.trim();return!!t&&t?.toLowerCase()!=="staff"}function w(e){return null==e||""===e?"-":String(e)}function v(e){return null==e?"-":e?"Yes":"No"}function j(e){return[e.professor?.firstName??"",e.professor?.lastName??""].filter(Boolean).join(" ")||e.query.normalizedName}function N({children:e}){return(0,a.jsx)("div",{className:"rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-900 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100",children:e})}function A({label:e,value:t}){return(0,a.jsxs)("div",{className:"rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 dark:border-gray-800 dark:bg-gray-950/30",children:[(0,a.jsx)("dt",{className:"text-xs font-medium uppercase tracking-wide app-muted",children:e}),(0,a.jsx)("dd",{className:"mt-1 text-sm font-semibold text-black dark:text-white",children:t})]})}function C({distribution:e}){let[t,r]=(0,s.useState)(!1);if((0,s.useEffect)(()=>{let e=setTimeout(()=>r(!0),50);return()=>clearTimeout(e)},[]),!e)return null;let n=[["5",e.r5],["4",e.r4],["3",e.r3],["2",e.r2],["1",e.r1]],l=e.total??n.reduce((e,[,t])=>e+(t??0),0);return l?(0,a.jsxs)("section",{className:"border-t border-gray-200 pt-3 dark:border-gray-800",children:[(0,a.jsx)("h4",{className:"text-xs font-semibold uppercase tracking-wide app-muted",children:"Ratings distribution"}),(0,a.jsx)("div",{className:"mt-2 space-y-1.5",children:n.map(([e,r])=>{let s=`${Math.round((r??0)/l*100)}%`;return(0,a.jsxs)("div",{className:"grid grid-cols-[1.5rem_1fr_2rem] items-center gap-2 text-xs",children:[(0,a.jsx)("span",{className:"font-medium text-black dark:text-white",children:e}),(0,a.jsx)("div",{className:"h-1.5 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-800",children:(0,a.jsx)("div",{className:"h-full rounded-full bg-max-primary transition-all duration-[800ms] ease-out",style:{width:t?s:"0%"}})}),(0,a.jsx)("span",{className:"text-right app-muted",children:r??0})]},e)})})]}):null}function S({rating:e,title:t}){return(0,a.jsxs)("article",{className:"rounded-lg border border-gray-200 bg-white p-3 dark:border-gray-800 dark:bg-gray-950/30",children:[t&&(0,a.jsx)("h4",{className:"mb-2 text-xs font-semibold uppercase tracking-wide app-muted",children:t}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs app-muted",children:[(0,a.jsx)("span",{className:"font-semibold text-black dark:text-white",children:w(e.class)}),(0,a.jsx)("span",{children:function(e){if(!e)return"-";try{let t=new Date(e);if(isNaN(t.getTime()))return e;let r=t.getDate(),a=["th","st","nd","rd"][r%10>
13||1===Math.floor(r%100/10)?0:r%10],s=t.toLocaleString("en-US",{month:"long"}),n=t.getFullYear();return`${s} ${r}${a}, ${n}`}catch(t){return e}}(e.date)}),(0,a.jsxs)("span",{children:["Quality ",w(e.quality)]}),(0,a.jsxs)("span",{children:["Difficulty ",w(e.difficulty)]})]}),(0,a.jsxs)("div",{className:"mt-2 grid grid-cols-2 gap-2 text-xs sm:grid-cols-3",children:[(0,a.jsx)(A,{label:"Clarity",value:w(e.clarity)}),(0,a.jsx)(A,{label:"Helpful",value:w(e.helpfulness)}),(0,a.jsx)(A,{label:"Again",value:v(e.wouldTakeAgain)}),(0,a.jsx)(A,{label:"Grade",value:w(e.grade)}),(0,a.jsx)(A,{label:"Online",value:v(e.isForOnlineClass)}),(0,a.jsx)(A,{label:"Textbook",value:v(e.textbookIsUsed)})]}),e.ratingTags.length>0&&(0,a.jsx)("div",{className:"mt-2 flex flex-wrap gap-1",children:e.ratingTags.map(e=>(0,a.jsx)("span",{className:"rounded-md bg-max-primary/10 px-2 py-0.5 text-xs font-medium text-max-primary",children:e},e))}),e.comment&&(0,a.jsx)("p",{className:"mt-2 whitespace-pre-wrap text-xs leading-relaxed text-black dark:text-white",children:e.comment}),(0,a.jsxs)("div",{className:"mt-2 flex items-center gap-3 text-xs app-muted",children:[(0,a.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,a.jsx)(h.$,{icon:d.A,className:"h-3.5 w-3.5"}),w(e.thumbsUp)]}),(0,a.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,a.jsx)(h.$,{icon:c.A,className:"h-3.5 w-3.5"}),w(e.thumbsDown)]})]})]})}function M({course:e}){let[t,r]=(0,s.useState)({status:"idle"}
1),[l,o]=(0,s.useState)(!1),[d,c]=(0,s.useState)(0),[v,$]=(0,s.useState)({}),E=y(e);(0,s.useEffect)(()=>{o(!1),c(0),$({})},[E]),(0,s.useEffect)(()=>{if(!k(e))return void r({status:"idle"});let t=!1;return r({status:"loading"}),(function(e){let t=y(e),r=g.get(t);if(!r){if(g.size>=60){let e=g.keys().next().value;void 0!==e&&g.delete(e)}r=(async()=>{let t=new URLSearchParams({name:e.professor||""});e.department?.trim()&&t.set("department",e.department.trim());let r=await fetch(`/api/professor-ratings?${t.toString()}`),a=await r.json();if(!r.ok)throw Error(a.error||`RMP HTTP ${r.status}`);if(!Array.isArray(a.results))throw console.error("Malformed professor ratings response",a),Error("Professor ratings response was malformed.");return a.results})(),g.set(t,r),r.catch(()=>{g.get(t)===r&&g.delete(t)})}return r})(e).then(e=>{t||r({status:"loaded",results:e})}).catch(e=>{t||(console.error("Professor ratings lookup failed",e),r({status:"failed",message:e instanceof Error?e.message:"Professor lookup failed"}))}),()=>{t=!0}},[e,E]);let{matched:D,ambiguous:R,notFound:U}=(0,s.useMemo)(()=>{if("loaded"!==t.status)return{matched:[],ambiguous:[],notFound:[]};let e=t.results.filter(e=>"matched"===e.status),r=t.results.filter(e=>"ambiguous"===e.status),a=[...e],s=[];for(let e of r){let t=v[e.query.originalName];t?a.push(t):s.push(e)}return{matched:a,ambiguous:s,notFound:t.results.filter(e=>"not_found"===e.status)}},[t,v]),[L,P]=(0,s.useState)("ratings"),[I,O]=(0,s.useState)([]),[F,q]=(0,s.useState)(!0),B=(0,s.useRef)(null),W=(0,s.useRef)(!0);(0,s.useLayoutEffect)(()=>{if(W.current){l&&i.os.set(B.current,{width:40}),W.current=!1;return}let e=i.os.context(()=>{if(l)i.os.to(B.current,{width:40,duration:.5,ease:"power3.inOut"});else{i.os.set(B.current,{width:""});let e=B.current?.getBoundingClientRect().width||448;i.os.set(B.current,{width:40}),i.os.to(B.current,{width:e,duration:.5,ease:"power3.inOut",onComplete:()=>i.os.set(B.current,{clearProps:"width"})})}});return()=>e.revert()},[l]);let[G,H]=(0,s.useState)(!1),[X,Y]=(0,s.useState)("Aggregate");(0,s.useEffect)(()=>{if("grades"===L&&e.courseCode&&0===I.length){let t=e.courseCode.match(/^([A-Z\s]+?)\s*(\d[A-Z0-9]*)$/i);if(t){let e=t[1].trim(),r=t[2].trim();H(!0),(0,b.Y3)(e,r).then(e=>{e&&O(e)}).catch(e=>console.error("Historical grades error:",e)).finally(()=>H(!1))}}},[L,e,I.length]);let V=(0,s.useMemo)(()=>I.some(e=>!!e.professor),[I]),z=(0,s.useMemo)(()=>{if(0===I.length)return[];let t=I;if(k(e)&&e.professor&&F){let r=e.professor.toLowerCase().split(",")[0].trim();t=t.filter(e=>e.professor?.toLowerCase().includes(r))}let r=new Map;for(let e of t){let t=e.semester.trim(),a=t.match(/^(\d{4})\s*(Spring|Summer|Fall)$/i);if(a)t=`${a[2].charAt(0).toUpperCase()+a[2].slice(1).toLowerCase()} ${a[1]}`;else{let e=t.match(/^(Spring|Summer|Fall)\s*(\d{4})$/i);e&&(t=`${e[1].charAt(0).toUpperCase()+e[1].slice(1).toLowerCase()} ${e[2]}`)}let s=r.get(t);if(s)for(let[t,r]of Object.entries(e.grades))s.grades[t]+=r;else s={...e,semester:t,grades:{...e.grades}},r.set(t,s)}let a=Array.from(r.values()).map(e=>{let t=(0,f.MM)(e.grades);return{...e,...t}});return a.sort((e,t)=>(0,f.Od)(t.semester)-(0,f.Od)(e.semester)),a},[I,e,F]);(0,s.useEffect)(()=>{"Aggregate"===X||z.find(e=>e.semester===X)||Y("Aggregate")},[z,X]);let Z=(0,s.useMemo)(()=>{if(0===z.length)return null;let e={...z[0],grades:{...z[0].grades},semester:"Aggregate"};for(let t=1;t<z.length;t++)for(let[r,a]of Object.entries(z[t].grades))e.grades[r]+=a;let t=(0,f.MM)(e.grades);return{...e,...t}},[z]),_="Aggregate"===X?Z:z.find(e=>e.semester===X),Q=k(e),K=!!e.courseCode;if(!Q&&!K)return null;let J=v[D[d]?.query?.originalName]||D[Math.min(d,Math.max(D.length-1,0))],ee=J?.rating,et=ee?.ratings??[];return(0,a.jsxs)("aside",{ref:B,className:"relative z-10 flex h-[40rem] max-h-[92vh] shrink-0 flex-row overflow-hidden rounded-none border border-gray-200 bg-white shadow-2xl dark:border-gray-700 dark:bg-gray-900 w-full max-w-lg lg:max-w-md",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>o(!l),className:"flex shrink-0 h-full w-10 flex-col items-center justify-center gap-4 border-r border-gray-200 bg-gray-50 hover:bg-gray-100 dark:border-gray-800 dark:bg-gray-950/30 dark:hover:bg-gray-800","aria-label":l?"Expand extra info":"Collapse extra info",children:[(0,a.jsx)(h.$,{icon:u.A,className:(0,x.A)("h-5 w-5 text-gray-500 transition-transform duration-500",!l&&"rotate-180")}
1),(0,a.jsx)("span",{className:"text-xs font-bold tracking-widest text-gray-500",style:{writingMode:"vertical-rl",textOrientation:"upright"},children:"EXTRA INFO"})]}),(0,a.jsxs)("div",{className:(0,x.A)("flex shrink-0 h-full w-[calc(100vw-2.5rem)] sm:w-[calc(32rem-2.5rem)] lg:w-[calc(28rem-2.5rem)] flex-col transition-opacity duration-300",l?"pointer-events-none opacity-0":"opacity-100 delay-100"),children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-start justify-between gap-3 border-b border-gray-200 px-4 py-3 dark:border-gray-700",children:[(0,a.jsxs)("div",{className:"flex gap-4",children:[Q&&(0,a.jsx)("button",{onClick:()=>P("ratings"),className:(0,x.A)("text-base font-semibold transition-colors","ratings"===L?"text-max-primary dark:text-max-primary":"text-gray-400 hover:text-black dark:text-gray-500 dark:hover:text-white"),children:"Rate My Professor"}),K&&(0,a.jsx)("button",{onClick:()=>P("grades"),className:(0,x.A)("text-base font-semibold transition-colors","grades"===L?"text-max-primary dark:text-max-primary":"text-gray-400 hover:text-black dark:text-gray-500 dark:hover:text-white"),children:"Grade Distributions"})]}),(0,a.jsx)("button",{type:"button",onClick:()=>o(!0),className:"shrink-0 rounded-lg p-1.5 text-black hover:bg-gray-100 dark:text-white dark:hover:bg-gray-800","aria-label":"Collapse panel",children:(0,a.jsx)(h.$,{icon:n.A,className:"h-4 w-4"})})]}),(0,a.jsxs)("div",{className:"scrollbar-none min-h-0 flex-1 overflow-y-auto",children:["ratings"===L&&(0,a.jsxs)("div",{className:"p-3 space-y-3",children:["loading"===t.status&&(0,a.jsx)("div",{className:"rounded-lg border border-gray-200 bg-gray-50 px-3 py-3 text-sm app-muted dark:border-gray-800 dark:bg-gray-950/30",children:"Loading professor ratings..."}),"failed"===t.status&&(0,a.jsx)(N,{children:t.message}),U.map(e=>(0,a.jsxs)(N,{children:["No RMP match found for ",e.query.normalizedName,"."]},e.query.originalName)),R.map(e=>(0,a.jsxs)("div",{className:"text-xs text-amber-900 dark:text-amber-100 space-y-2",children:[(0,a.jsxs)("p",{className:"font-medium",children:['Multiple matches found for "',e.query.normalizedName,'". Choose an option:']}),(0,a.jsx)("div",{className:"flex flex-col gap-1.5",children:e.candidatesList?.map((t,r)=>(0,a.jsxs)("button",{type:"button",onClick:()=>{$(r=>({...r,[e.query.originalName]:t}))},className:"w-full text-left rounded-none border border-amber-200 bg-white px-2 py-1.5 hover:bg-amber-50 dark:border-amber-800 dark:bg-gray-900 dark:hover:bg-gray-800 transition-colors",children:[(0,a.jsx)("span",{className:"font-semibold text-amber-950 dark:text-amber-200",children:j(t)}),t.professor?.department&&(0,a.jsx)("span",{className:"text-xs text-gray-500 dark:text-gray-400 block mt-0.5",children:t.professor.department})]},r))})]},e.query.originalName)),D.length>1&&(0,a.jsx)("div",{className:"flex flex-wrap gap-1 rounded-lg border border-gray-200 bg-gray-50 p-1 dark:border-gray-800 dark:bg-gray-950/30",children:D.map((e,t)=>(0,a.jsx)("button",{type:"button",onClick:()=>c(t),className:(0,x.A)("rounded-md px-2.5 py-1.5 text-xs font-semibold transition-colors",t===d?"bg-max-primary text-white":"text-black hover:bg-white dark:text-white dark:hover:bg-gray-800"),children:j(e)},e.query.originalName))}),J&&J.professor&&ee&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("section",{className:"space-y-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsx)("p",{className:"text-sm font-semibold text-black dark:text-white",children:j(J)}),v[J.query.originalName]&&(0,a.jsx)("button",{type:"button",onClick:()=>{$(e=>{let t={...e};return delete t[J.query.originalName],t})},className:"text-xs font-semibold text-max-primary hover:underline",children:"Change Option"})]}),(0,a.jsx)("p",{className:"text-xs app-muted",children:J.professor.department||"Department unavailable"}),J.profileUrl&&(0,a.jsxs)("a",{href:J.profileUrl,target:"_blank",rel:"noreferrer",className:"mt-2 inline-flex items-center gap-1.5 text-xs font-semibold text-max-primary hover:underline",children:["View RMP profile",(0,a.jsx)(h.$,{icon:m.A,className:"h-3.5 w-3.5"})]})]}),(0,a.jsxs)("dl",{className:"grid grid-cols-2 gap-2",children:[(0,a.jsx)(A,{label:"Overall",value:`${w(ee.average)} / 5`}),(0,a.jsx)(A,{label:"Difficulty",value:`${w(ee.difficulty)} / 5`}),(0,a.jsx)(A,{label:"Take again",value:`${w(ee.wouldTakeAgainPercent)}%`}),(0,a.jsx)(A,{label:"Ratings",value:w(ee.count)})]}
1),ee.mandatoryAttendance&&(0,a.jsx)(A,{label:"Mandatory attendance",value:ee.mandatoryAttendance})]}),(0,a.jsx)(C,{distribution:ee.ratingsDistribution??null}),ee.mostUsefulRating&&(0,a.jsx)("section",{className:"border-t border-gray-200 pt-3 dark:border-gray-800",children:(0,a.jsx)(S,{rating:ee.mostUsefulRating,title:"Most useful rating"})}),et.length>0&&(0,a.jsxs)("section",{className:"space-y-2 border-t border-gray-200 pt-3 dark:border-gray-800",children:[(0,a.jsx)("h4",{className:"text-xs font-semibold uppercase tracking-wide app-muted",children:"Recent ratings"}),et.map((e,t)=>(0,a.jsx)(S,{rating:e},`${e.date??"rating"}-${e.class??"class"}-${t}`))]})]})]}),"grades"===L&&(0,a.jsxs)("div",{className:"p-4 space-y-4",children:[G&&(0,a.jsx)("div",{className:"rounded-lg border border-gray-200 bg-gray-50 px-3 py-3 text-sm app-muted dark:border-gray-800 dark:bg-gray-950/30",children:"Loading grade distributions..."}),!G&&0===z.length&&(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsx)(N,{children:"No historical grades found for this specific Professor or Course."}),F&&(0,a.jsx)("button",{type:"button",onClick:()=>q(!1),className:"inline-flex w-fit items-center justify-center gap-1.5 rounded-lg border border-slate-200 bg-white px-3 py-2 text-xs font-semibold text-slate-700 hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-200 dark:hover:bg-slate-700",children:"Clear Filter"})]}),!G&&z.length>0&&_&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex flex-col",children:[(0,a.jsx)("span",{className:"text-sm font-semibold text-black dark:text-white",children:"Official Grades"}),(0,a.jsxs)("span",{className:"text-xs app-muted",children:[e.department," ",e.courseCode.match(/^([A-Z\s]+?)\s*(\d[A-Z0-9]*)$/i)?.[2]?.trim(),Q&&e.professor&&F&&` • ${e.professor.split(",")[0]}`]})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[Q&&e.professor&&V&&(0,a.jsxs)("label",{className:"flex items-center gap-2 text-xs font-medium text-black dark:text-white",children:[(0,a.jsx)("input",{type:"checkbox",checked:F,onChange:e=>q(e.target.checked),className:"rounded border-gray-300 text-max-primary focus:ring-max-primary dark:border-gray-600 dark:bg-gray-800"}),"Only ",e.professor.split(",")[0]]}),(0,a.jsx)(p.A,{value:X,onChange:e=>Y(e),options:[{value:"Aggregate",label:"All Semesters"},...z.map(e=>({value:e.semester,label:e.semester}))],className:"ml-auto w-44"})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-2",children:[(0,a.jsx)(A,{label:"Average GPA",value:_.gradeGpa.toFixed(2)}),(0,a.jsx)(A,{label:"A-Rate",value:`${(100*_.aRate).toFixed(1)}%`}),(0,a.jsx)(A,{label:"Students",value:_.totalStudents.toString()})]}),(0,a.jsx)(T,{grades:_.grades}),"Aggregate"===X&&(0,a.jsxs)("section",{className:"space-y-3 border-t border-gray-200 pt-4 dark:border-gray-800",children:[(0,a.jsx)("h4",{className:"text-xs font-semibold uppercase tracking-wide app-muted",children:"Semester History"}),(0,a.jsx)("div",{className:"space-y-2",children:z.slice(0,15).map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-gray-50 px-3 py-2 text-sm dark:bg-gray-950/30",children:[(0,a.jsx)("span",{className:"font-medium text-black dark:text-white",children:e.semester}),(0,a.jsxs)("div",{className:"flex gap-4 app-muted",children:[(0,a.jsxs)("span",{className:"w-20 text-right",children:["GPA: ",e.gradeGpa.toFixed(2)]}),(0,a.jsxs)("span",{className:"w-24 text-right",children:[(100*e.aRate).toFixed(1),"% A's"]})]})]},e.semester))})]})]})]})]})]})]})}function T({grades:e}){let t=["A","A-","B+","B","B-","C+","C","C-","D+","D","D-","F","Other"],[r,n]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let e=setTimeout(()=>n(!0),50);return()=>clearTimeout(e)},[]);let l=Math.max(...t.map(t=>Number(e[t])||0));return(0,a.jsxs)("div",{className:"mt-4",children:[(0,a.jsx)("div",{className:"flex h-40 items-end justify-between gap-1 border-b border-gray-200 pb-2 dark:border-gray-700",children:t.map((s,n)=>{let o=Number(e[s])||0,i=l>0&&r?o/l*100:0;return(0,a.jsxs)("div",{className:"group relative flex h-full w-full flex-col items-center justify-end",children:[(0,a.jsx)("div",{className:(0,x.A)("w-full max-w-[1.5rem] rounded-t-sm transition-all duration-[800ms] ease-out","Other"===s?"bg-gray-400 dark:bg-gray-600":"bg-max-primary"),style:{height:`${Math.max(i,2*!!r)}%`}}),(0,a.jsxs)("div",{className:(0,x.A)("absolute -top-8 hidden whitespace-nowrap rounded bg-gray-900 px-2 py-1 text-xs font-medium text-white shadow-lg group-hover:block dark:bg-gray-100 dark:text-black z-20",0===n?"left-0":n===t.length-1?"right-0":"left-1/2 -translate-x-1/2"),children:[o," Students"]})]},s)})}),(0,a.jsx)("div",{className:"mt-2 flex justify-between px-1",children:t.map(e=>(0,a.jsx)("div",{className:"flex w-full justify-center text-[0.65rem] font-medium text-gray-500 dark:text-gray-400",children:e},e))})]})}var $=r(1961),E=r(95997),D=r(75458),R=r(87221);function U(e){return null==e||""===e?"-":String(e)}function L(e){return null==e?"-":`${(100*e).toFixed(1)}%`}
1function P(e){if(0===e.meetings.length){let t=e.days?.trim(),r=e.startTime?.trim(),a=e.endTime?.trim();return t||r?[t,r&&a?`${r}–${a}`:r].filter(Boolean).join(" "):"-"}return e.meetings.map(e=>{let t=e.days.join(", ");return e.startMinutes<0?t||"TBA":`${t} ${(0,D.dp)(e.startMinutes)}–${(0,D.dp)(e.endMinutes)}`}).join("\n")}function I({label:e,value:t,mono:r,copyValue:s}){return(0,a.jsxs)("div",{className:"grid grid-cols-[7.5rem_1fr] gap-x-3 gap-y-0.5 border-b border-gray-100 py-2 last:border-b-0 dark:border-gray-800 sm:grid-cols-[9rem_1fr]",children:[(0,a.jsx)("dt",{className:"text-xs font-medium app-muted",children:e}),(0,a.jsxs)("dd",{className:(0,x.A)("min-w-0 text-sm text-black dark:text-white whitespace-pre-wrap",r&&"font-mono"),children:[(0,a.jsx)("span",{className:"break-words",children:t}),s&&(0,a.jsx)(E.CopyButton,{text:s,label:`Copy ${e.toLowerCase()}`,className:"ml-2 !px-2 !py-0.5 !text-xs"})]})]})}function O({course:e,className:t}){let r,n=(0,s.useRef)(null),l=(r=(0,$.KB)(e),[`Course code: ${e.courseCode}`,`Unique #: ${e.uniqueNumber}`,`Title: ${e.title?.trim()||"-"}`,`Credit hours: ${(0,$.Vy)(r)}`,R[e.courseCode]?.length?`Core Requirements: ${R[e.courseCode].join(", ")}`:null,`Professor: ${e.professor?.trim()||"Staff"}`,null!=e.rmpRating?`Prof Rating: ${e.rmpRating.toFixed(1)}/5.0`:null,null!=e.wouldTakeAgainPercent?`Would Take Again: ${Math.round(e.wouldTakeAgainPercent)}%`:null,`Schedule: ${P(e)}`,`Location: ${e.location?.trim()||"-"}`,e.instructionMode?`Mode: ${e.instructionMode}`:null,e.statusLabel||e.status?`Status: ${e.statusLabel||e.status}`:null,e.department?`Department: ${e.department}`:null,e.catalogLevel?`Level: ${e.catalogLevel}`:null,null!=e.gradeGpa?`Avg GPA: ${e.gradeGpa.toFixed(2)}`:null,null!=e.aRate?`A-rate: ${L(e.aRate)}`:null,null!=e.gradeSampleSize?`Grade sample: ${e.gradeSampleSize}`:null,e.gradeSemester?`Grade term: ${e.gradeSemester}`:null,"course"===e.gradeSource?"Grades: course average (no section-specific data)":null,e.flags?.length?`Flags: ${e.flags.join(", ")}`:null,e.termCode?`Term: ${e.termCode}`:null,e.bundledSections?.length?`Bundled: ${e.bundledSections.map(e=>`${e.courseCode} (#${e.uniqueNumber})`).join(", ")}`:null].filter(Boolean).join("\n")),o=(0,$.KB)(e);return(0,s.useEffect)(()=>{if(!n.current)return;let e=Array.from(n.current.children);e.forEach(e=>{e.style.opacity="0"}),i.os.fromTo(e,{opacity:0,x:-20},{opacity:1,x:0,stagger:.04,ease:"power2.out",duration:.3,clearProps:"all"})},[e]),(0,a.jsxs)("div",{className:(0,x.A)("rounded-lg border border-gray-200 bg-white dark:border-gray-700 dark:bg-gray-900/50",t),children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3 border-b border-gray-200 px-4 py-3 dark:border-gray-700",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("h3",{className:"text-base font-semibold text-black dark:text-white",children:[e.courseCode,(0,a.jsxs)("span",{className:"ml-2 font-mono text-max-primary",children:["#",e.uniqueNumber]})]}),e.title?.trim()&&(0,a.jsx)("p",{className:"mt-0.5 text-sm app-muted",children:e.title.trim()})]}),(0,a.jsx)(E.CopyButton,{text:l,label:"Copy all",className:"!text-xs"})]}),(0,a.jsxs)("dl",{className:"px-4 py-1",ref:n,children:[(0,a.jsx)(I,{label:"Unique #",value:U(e.uniqueNumber),mono:!0,copyValue:e.uniqueNumber}),(0,a.jsx)(I,{label:"Professor",value:U(e.professor?.trim()||"Staff")}),null!=e.rmpRating&&(0,a.jsx)(I,{label:"Prof Rating",value:`${e.rmpRating.toFixed(1)} / 5.0`}),null!=e.wouldTakeAgainPercent&&(0,a.jsx)(I,{label:"Take Again",value:`${Math.round(e.wouldTakeAgainPercent)}%`}),(0,a.jsx)(I,{label:"Credit hours",value:(0,$.Vy)(o)}),R[e.courseCode]?.length>0&&(0,a.jsx)(I,{label:"Core Reqs",value:R[e.courseCode].join("\n")}),(0,a.jsx)(I,{label:"Schedule",value:P(e)}),(0,a.jsx)(I,{label:"Location",value:U(e.location?.trim())}),(0,a.jsx)(I,{label:"Mode",value:U(e.instructionMode?.trim())}),(0,a.jsx)(I,{label:"Status",value:U(e.statusLabel?.trim()||e.status?.trim())}),(0,a.jsx)(I,{label:"Department",value:U(e.department?.trim())}),(0,a.jsx)(I,{label:"Level",value:U(e.catalogLevel)}),(null!=e.avgGrade||null!=e.gradeGpa)&&(0,a.jsx)(I,{label:"Avg GPA",value:(e.avgGrade??e.gradeGpa??0).toFixed(2)}),null!=e.aRate&&(0,a.jsx)(I,{label:"A-rate",value:L(e.aRate)}),e.flags&&e.flags.length>0&&(0,a.jsx)(I,{label:"Flags",value:e.flags.join(", ")}),e.bundledSections&&e.bundledSections.length>0&&(0,a.jsx)(I,{label:"Bundled",value:e.bundledSections.map(e=>`${e.courseCode} (#${e.uniqueNumber})`).join("\n")})]})]})}var F=r(71899),q=r(91114),B=r(62338);function W({course:e,open:t,onClose:r,onExited:d,footer:c,headerExtra:u,elevated:m}){(0,s.useId)();
1let[x,h]=(0,s.useState)(null),{authStatus:p}=(0,B.n)(),f=p?.loggedIn===!0;(0,s.useEffect)(()=>{t?f||window.dispatchEvent(new CustomEvent("utmax:open-live-sync")):h(null)},[t,e?.uniqueNumber,f]);let b=(0,s.useRef)(null),g=(0,s.useRef)(null),y=(0,s.useRef)(null),k=(0,F.g)(t,b,g,()=>{t||d?.()}),w=(0,s.useCallback)(e=>{e?.stopPropagation(),r()},[r]);(0,s.useEffect)(()=>{if(y.current)if(i.os.killTweensOf(y.current),t){i.os.set(y.current,{width:""});let e=y.current.getBoundingClientRect().width||448;i.os.set(y.current,{width:0,opacity:0}),i.os.to(y.current,{width:e,opacity:1,duration:.5,ease:"power3.inOut",onComplete:()=>{y.current&&i.os.set(y.current,{clearProps:"width"})}})}else i.os.to(y.current,{width:0,opacity:0,duration:.5,ease:"power3.inOut"})},[t,k]),(0,s.useEffect)(()=>{if(!t)return;function e(e){"Escape"===e.key&&w()}document.addEventListener("keydown",e);let r=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",e),document.body.style.overflow=r}},[t,w]);let[v,j]=(0,s.useState)(!1),[N,A]=(0,s.useState)(null),[C,S]=(0,s.useState)(null);(0,s.useEffect)(()=>{if(!t||!e)return;let r=!0;return j(!1),S(null),(async()=>{try{let t=e.termCode||await (0,q.Lb)(),a=await (0,q.zp)(t,e.uniqueNumber,e.courseCode,{silent:!0});if(!r||!a)return;h({...e,...a,id:e.id,score:e.score,importedAt:e.importedAt,meetings:a.meetings?.length?a.meetings:e.meetings,catalogSource:"utdirect-live"}),j(!0),A(new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}))}catch(e){if(!r)return;S(e instanceof Error?e.message:"Live UT Direct refresh failed")}})(),()=>{r=!1}},[t,e?.id,e?.uniqueNumber,e?.courseCode,e?.termCode]);let T=x&&(x.uniqueNumber===e?.uniqueNumber||x.id===e?.id)?x:e;return k&&T?(0,a.jsxs)("div",{ref:b,className:`fixed inset-0 flex items-end justify-center p-3 sm:items-center sm:p-4 opacity-0 ${m?"z-[330]":"z-[300]"}`,role:"presentation",onMouseDown:e=>{e.target===e.currentTarget&&(e.stopPropagation(),w(e))},children:[(0,a.jsx)("div",{className:"absolute inset-0 bg-black/50 backdrop-blur-[1px]","aria-hidden":!0,onMouseDown:e=>{e.stopPropagation(),w(e)}}),(0,a.jsxs)("div",{className:"relative z-10 flex w-full max-w-[70rem] flex-col items-center gap-3 lg:flex-row lg:items-stretch lg:justify-center",children:[(0,a.jsxs)("div",{ref:g,role:"dialog","aria-modal":"true",className:"flex h-[40rem] max-h-[92vh] w-full max-w-lg flex-col overflow-hidden rounded-none border border-gray-200 bg-white shadow-2xl dark:border-gray-700 dark:bg-gray-900",children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-start justify-between gap-3 border-b border-gray-200 px-4 py-3 dark:border-gray-700",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("h2",{className:"line-clamp-2 text-xl font-bold leading-tight text-slate-900 dark:text-white flex items-center flex-wrap gap-2",children:[(0,l.Xz)(T.courseCode,T.title),(0,a.jsx)(o.S,{courseCode:T.courseCode})]}),(0,a.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-2 font-mono text-xs",children:[(0,a.jsxs)("span",{className:"text-max-primary font-bold",children:["#",T.uniqueNumber]}),v?(0,a.jsxs)("span",{className:"font-mono text-xs font-semibold text-slate-700 dark:text-slate-300",children:["Live",N?` (${N})`:""]}):(0,a.jsx)("span",{className:"font-mono text-xs text-slate-600 dark:text-slate-400",children:C?`Live unavailable — ${C}`:"Supabase catalog data"})]})]}),(0,a.jsx)("button",{type:"button",onClick:e=>w(e),className:"shrink-0 p-1.5 text-black hover:bg-gray-100 dark:text-white dark:hover:bg-gray-800","aria-label":"Close",children:(0,a.jsx)(n.A,{className:"h-4 w-4"})})]}),u&&(0,a.jsx)("div",{className:"shrink-0 px-3 pt-2",children:u}),(0,a.jsx)("div",{className:"scrollbar-none min-h-0 flex-1 overflow-y-auto p-3",children:(0,a.jsx)(O,{course:T,className:"border-0 shadow-none"})}),c&&(0,a.jsx)("div",{className:"shrink-0 border-t border-gray-200 px-4 py-3 dark:border-gray-700",children:c})]}),(0,a.jsx)("div",{ref:y,className:"flex flex-col lg:flex-row lg:items-stretch w-full max-w-lg lg:max-w-md opacity-0 overflow-hidden",children:(0,a.jsx)(M,{course:T})})]})]}):null}},95997:(e,t,r)=>{r.d(t,{CopyButton:()=>d});
1var a=r(95155),s=r(12115),n=r(64577),l=r(99314),o=r(29722),i=r(56290);function d({text:e,label:t,className:r}){let[c,u]=(0,s.useState)(!1);async function m(t){t?.stopPropagation(),await navigator.clipboard.writeText(e),u(!0),setTimeout(()=>u(!1),1500)}return(0,a.jsxs)("button",{type:"button",onClick:m,className:(0,o.A)("inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors",c?"bg-green-100 text-green-800":"bg-max-primary text-white hover:opacity-90",r),children:[c?(0,a.jsx)(i.$,{icon:n.A,className:"h-3.5 w-3.5"}):(0,a.jsx)(i.$,{icon:l.A,className:"h-3.5 w-3.5"}),c?"Copied!":t||e]})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.