PageSourceSearch

https://naemo.ai/_next/static/chunks/9325.cc1180dbb6b96db8.js

js naemo.ai collected 2026-10-02 01:15:56 UTC 134,598 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9325,5306],{16011:function(e,t,n){n.d(t,{Od:function(){return r},W:function(){return c},Y6:function(){return i},f9:function(){return a},getStudentMockExams:function(){return l},ln:function(){return d}}),n(83079);var s=n(12119),a=(0,s.$)("6f79f3df6ace84ec5011c9606d5126a283f0ce00"),r=(0,s.$)("fca6dd844ba9770f5af8e9b00b684ad694adaa4a");(0,s.$)("a23c7989ead4c3f0bbc34ab968897e577d69c34e");var i=(0,s.$)("25b3af908b23b7a432042fc7fc768d9a77983d41");(0,s.$)("6b3568d6b307d0ad395124e72ce56f40a95ffa5e");var l=(0,s.$)("8909e13eb61723a8c65f1da87ec810139ad46edd"),c=(0,s.$)("610035678b1f5c2ab1d276b66f1f6b8d7da99c5b"),d=(0,s.$)("fc5f94b04a0542d499822142b7b4f64c39012342")},84200:function(e,t,n){n.d(t,{Z:function(){return u}});var s=n(57437),a=n(2265),r=n(7888),i=n(93448),l=n(45007),c=n(13100),d=n(92846),o=n(54292),x=n(17829);function u(e){let{students:t,selectedStudentId:n,onSelectStudent:a,onOpenDashboard:l,totalStudentsCount:u,searchQuery:m,onSearchChange:p,isAdmin:f,error:b,isLoading:g=!1,onRetry:v}=e;return(0,s.jsx)("div",{className:"flex flex-col h-full min-h-0 flex-1 bg-[#FBFBF9] dark:bg-zinc-950",children:(0,s.jsx)(x.Z,{children:(0,s.jsx)("div",{className:"flex-1 overflow-y-auto px-4 mobile-scroll-with-floating","data-pull-scroll":!0,children:g&&0===t.length&&!b?(0,s.jsx)(o.r,{variant:"students",label:"학생 명단을 불러오고 있어요"}):0===t.length?(0,s.jsx)("div",{className:"text-center py-16 flex flex-col items-center justify-center",children:b?(0,s.jsxs)("div",{className:"flex flex-col items-center gap-3 px-6",children:[(0,s.jsx)("div",{className:"text-red-600 dark:text-red-400 text-sm font-semibold",children:"학생 명단을 불러오지 못했습니다"}),(0,s.jsx)("div",{className:"text-zinc-600 dark:text-zinc-300 text-xs break-keep max-w-[260px]",children:(0,r.q)(b,"잠시 후 다시 시도해 주세요. 계속 안 되면 네트워크 상태를 확인해 주세요.")}),v&&(0,s.jsx)("button",{type:"button",onClick:v,className:"min-h-[44px] px-4 rounded-xl text-[13px] font-semibold bg-zinc-100 dark:bg-zinc-800 text-zinc-800 dark:text-zinc-100 active:scale-[0.97] transition",children:"다시 시도"})]}):(0,s.jsx)(h,{})}):(0,s.jsxs)("div",{className:"space-y-[2px]",children:[!m&&l&&(0,s.jsxs)(c.E.button,{type:"button",whileTap:{scale:.98},transition:{type:"spring",stiffness:500,damping:30},onClick:l,className:(0,i.cn)("w-full flex items-center gap-3 px-3 py-[10px] rounded-2xl transition mt-1.5","text-left active:bg-zinc-100/60 dark:active:bg-zinc-800/60"),children:[(0,s.jsx)("span",{className:"w-5 h-5 rounded-md flex items-center justify-center text-[10.5px] font-semibold shrink-0 bg-zinc-100 text-zinc-500 dark:bg-zinc-800 dark:text-zinc-400",children:"0"}),(0,s.jsx)("div",{className:"flex-1 min-w-0 flex flex-col justify-center",children:(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"text-[14px] font-medium truncate text-zinc-900 dark:text-zinc-100",children:"전체 학생"}),(0,s.jsxs)("span",{className:"text-[11px] whitespace-nowrap shrink-0 font-medium text-zinc-400 dark:text-zinc-500",children:[null!=u?u:t.length,"명"]})]})})]}),t.map(e=>(0,s.jsxs)(c.E.button,{whileTap:{scale:.98},transition:{type:"spring",stiffness:500,damping:30},onClick:()=>{d.MU.tap(),a(e.id)},className:(0,i.cn)("w-full flex items-center gap-3 px-3 py-[10px] rounded-2xl transition","text-left",n===e.id?"bg-zinc-800 text-white dark:bg-zinc-200 dark:text-zinc-900 shadow-md dark:shadow-none":"active:bg-zinc-100/60 dark:active:bg-zinc-800/60"),children:[(0,s.jsx)("span",{className:(0,i.cn)("w-5 h-5 rounded-md flex items-center justify-center text-[10.5px] font-semibold shrink-0",n===e.id?"bg-white/10 text-white dark:bg-black/10 dark:text-zinc-900":"bg-zinc-100 text-zinc-500 dark:bg-zinc-800 dark:text-zinc-400"),children:e.number}),(0,s.jsx)("div",{className:"flex-1 min-w-0 flex flex-col justify-center",children:(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:(0,i.cn)("text-[14px] font-medium truncate",n===e.id?"text-white dark:text-zinc-900 font-semibold":"text-zinc-900 dark:text-zinc-100"),children:e.name}),f&&(0,s.jsxs)("span",{className:(0,i.cn)("text-[11px] whitespace-nowrap shrink-0 font-medium",n===e.id?"text-white/70 dark:text-zinc-500":"text-zinc-400 dark:text-zinc-500"),children:[e.grade,"학년 ",e.classNum,"반"]})]})}),n===e.id&&(0,s.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-400 shadow-[0_0_8px_rgba(96,165,250,0.8)] shrink-0"})]},e.id))]})})})})}let m="naemo.studentEmptyGhostPlayed";function h(){let[e,t]=(0,a.useState)(!1);return(0,a.useEffect)(()=>
1{if(!window.matchMedia("(prefers-reduced-motion: reduce)").matches){try{if(sessionStorage.getItem(m))return;sessionStorage.setItem(m,"1")}catch(e){}t(!0)}},[]),(0,s.jsxs)("div",{className:"flex flex-col items-center justify-center text-center",children:[(0,s.jsx)("div",{className:"w-14 h-14 bg-zinc-100 dark:bg-white/[0.05] rounded-full flex items-center justify-center mb-3 text-zinc-400 dark:text-zinc-500 pointer-events-none",children:(0,s.jsx)(l.w,{src:"/lordicons/ghost-angry-pinch.json",size:32,trigger:"morph",playOnMount:e,originalColors:!0,className:"text-zinc-400"})}),(0,s.jsx)("p",{className:"text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1",children:"등록된 학생이 없습니다"}),(0,s.jsx)("p",{className:"text-xs text-zinc-400 dark:text-zinc-500 max-w-[200px] leading-relaxed",children:"설정에서 학생 명렬표를 등록하면 출결, 상담, 성적을 관리할 수 있습니다."})]})}},43232:function(e,t,n){n.d(t,{O:function(){return a}});var s=n(57437);let a=e=>{let{size:t=32,className:n="",strokeWidth:a=1.9}=e;return(0,s.jsx)("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:a,strokeLinecap:"square",strokeLinejoin:"miter",className:n,children:(0,s.jsx)("path",{d:"M12 7 L17 12 L12 17 L7 12 Z"})})}},53834:function(e,t,n){n.d(t,{W:function(){return c}});var s=n(57437),a=n(29),r=n.n(a),i=n(93448),l=n(43232);let c=e=>{let{size:t=32,speed:n=1.5,className:a="",withPulse:c=!1}=e;return(0,s.jsxs)("div",{style:{animation:"spin ".concat(n,"s linear infinite").concat(c?", pulse 2s ease-in-out infinite":"")},className:"jsx-ba9b38e61bef3f8b "+((0,i.cn)("brand-logo-loader inline-flex items-center justify-center",a)||""),children:[(0,s.jsx)(l.O,{size:t}),(0,s.jsx)(r(),{id:"ba9b38e61bef3f8b",children:"@-webkit-keyframes spin{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes spin{from{-moz-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes spin{from{-o-transform:rotate(0deg);transform:rotate(0deg)}to{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}@-moz-keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}@-o-keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}"})]})}},91455:function(e,t,n){n.d(t,{s:function(){return i}});var s=n(57437),a=n(2265),r=n(93448);function i(e){let{options:t,value:n,onChange:i,className:l,itemClassName:c,activeItemClassName:d,inactiveItemClassName:o,indicatorClassName:x,variant:u="pill",underlineThickness:m=2,disabled:h=!1,equalWidth:p=!1,"aria-label":f}=e,b=(0,a.useRef)(null),g=(0,a.useRef)({}),[v,j]=(0,a.useState)(null),[k,z]=(0,a.useState)(!1),y=t.map(e=>e.key).join("\0"),w=(0,a.useCallback)(()=>{let e=b.current,t=g.current[n];if(!e||!t||0===t.offsetWidth){j(e=>null===e?e:null);return}let s={left:t.offsetLeft,top:t.offsetTop,width:t.offsetWidth,height:t.offsetHeight};j(e=>e&&e.left===s.left&&e.top===s.top&&e.width===s.width&&e.height===s.height?e:s)},[n]);(0,a.useLayoutEffect)(()=>{w()},[w,y,u]),(0,a.useEffect)(()=>{if(!v||k)return;let e=requestAnimationFrame(()=>z(!0));return()=>cancelAnimationFrame(e)},[v,k]),(0,a.useEffect)(()=>{let e=b.current;if(!e||"undefined"==typeof ResizeObserver)return;let t=new ResizeObserver(()=>w());return t.observe(e),Object.values(g.current).forEach(e=>{e&&t.observe(e)}),()=>t.disconnect()},[w,y]),(0,a.useEffect)(()=>{let e=document.fonts;if(!(null==e?void 0:e.ready))return;let t=!1;return e.ready.then(()=>{t||w()}).catch(()=>{}),()=>{t=!0}},[w]);let N=!!v&&!h;return(0,s.jsxs)("div",{ref:b,role:"group","aria-label":f,className:(0,r.cn)("relative flex items-center",l),children:[(0,s.jsx)("div",{"aria-hidden":!0,
1className:(0,r.cn)("absolute left-0 top-0 pointer-events-none","pill"===u?"rounded-lg":"rounded-full",k&&"transition-[transform,width,opacity] duration-300 ease-out motion-reduce:transition-none",N?"opacity-100":"opacity-0",x),style:v?{transform:"translate3d(".concat(v.left,"px, ").concat("underline"===u?v.top+v.height-m:v.top,"px, 0)"),width:v.width,height:"underline"===u?m:v.height}:void 0}),t.map(e=>{let t=e.key===n;return(0,s.jsx)("button",{ref:t=>{g.current[e.key]=t},type:"button","aria-pressed":t,title:e.title,"aria-label":e.ariaLabel,disabled:h,onClick:()=>i(e.key),className:(0,r.cn)("relative z-10 flex items-center justify-center transition-colors duration-200 motion-reduce:transition-none",p&&"flex-1",c,t?d:o,e.className),children:e.label},e.key)})]})}},72183:function(e,t,n){n.r(t),n.d(t,{default:function(){return R}});var s=n(57437),a=n(90982),r=n(21235),i=n(34687),l=n(2265),c=n(22135),d=n(40875),o=n(44743),x=n(93448);function u(e){let{options:t,value:n,onChange:a,className:r,textClassName:i,gradientClassName:c,label:d="값 선택"}=e,o=(0,l.useId)(),u=(0,l.useRef)(null),m=(0,l.useRef)([]),h=(0,l.useRef)([]),p=(0,l.useRef)(-1),f=(0,l.useRef)(0),b=(0,l.useRef)(0),g=(0,l.useRef)(!1),v=(0,l.useRef)(null),j=(0,l.useRef)(0),k=(0,l.useRef)(0),z=(0,l.useRef)(null),y=(0,l.useRef)(null),w=(0,l.useRef)(!1),N=(0,l.useRef)(null),C=(0,l.useRef)(t),S=(0,l.useRef)(n),E=(0,l.useRef)(a);C.current=t,S.current=n,E.current=a;let M=()=>(C.current.length-1)*36,R=e=>Math.min(Math.max(e,0),M()),_=e=>{C.current.forEach((t,n)=>{let s=m.current[n],a=h.current[n];if(!s||!a)return;let r=36*n-e;s.style.transform="translateY(".concat(44+r,"px)"),a.style.transform="rotateX(".concat(-(r/36*55),"deg) translateZ(").concat(45*Math.cos(r/36*(Math.PI/4))-45,"px)"),a.style.opacity=String(Math.max(.1,1-Math.abs(r/64.8)))});let t=Math.round(e/36);if(t!==p.current){var n,s;null===(n=h.current[p.current])||void 0===n||n.classList.remove("font-bold"),null===(s=h.current[t])||void 0===s||s.classList.add("font-bold"),p.current=t}},A=()=>{y.current&&clearTimeout(y.current),y.current=setTimeout(()=>{let e=Math.round(f.current/36);f.current=36*e;let t=C.current;void 0!==t[e]&&t[e]!==S.current&&E.current(t[e])},150)};(0,l.useEffect)(()=>{let e;let t=n=>{var s;let a=null!==(s=z.current)&&void 0!==s?s:n;if(z.current=n,g.current)N.current=null,b.current=f.current,_(b.current);else if(N.current){let e=N.current;null===e.startTime&&(e.startTime=n);let t=Math.min(1,(n-e.startTime)/e.duration);b.current=e.startValue+(f.current-e.startValue)*(1-Math.pow(1-t,3)),_(b.current),t>=1&&(N.current=null)}else{let e=f.current-b.current;Math.abs(e)>.05?(b.current+=e*(1-Math.pow(.72,(n-a)/16.6667)),_(b.current)):b.current!==f.current&&(b.current=f.current,_(b.current))}e=requestAnimationFrame(t)};return e=requestAnimationFrame(t),()=>cancelAnimationFrame(e)},[]),(0,l.useEffect)(()=>{let e=u.current;if(!e)return;let t=e=>1===e.deltaMode?16*e.deltaY:2===e.deltaMode?144*e.deltaY:e.deltaY,n=e=>{e.preventDefault(),N.current=null,f.current=R(f.current+t(e)),A()},s=e=>{v.current=e.pointerId,j.current=e.clientY,k.current=b.current,y.current&&clearTimeout(y.current)},a=t=>{if(v.current!==t.pointerId)return;let n=t.clientY-j.current;if(!g.current){if(4>Math.abs(n))return;g.current=!0,N.current=null,e.setPointerCapture(t.pointerId)}f.current=R(k.current-n)},r=e=>{v.current===e.pointerId&&(v.current=null,g.current&&(g.current=!1,A()))};return e.addEventListener("wheel",n,{passive:!1}),e.addEventListener("pointerdown",s),e.addEventListener("pointermove",a),e.addEventListener("pointerup",r),e.addEventListener("pointercancel",r),()=>{e.removeEventListener("wheel",n),e.removeEventListener("pointerdown",s),e.removeEventListener("pointermove",a),e.removeEventListener("pointerup",r),e.removeEventListener("pointercancel",r),y.current&&clearTimeout(y.current)}},[]),(0,l.useEffect)(()=>{let e=t.indexOf(n);if(-1===e)return;let s=36*e;f.current=s,w.current||(b.current=s,_(s),w.current=!0)},[n,t]);let D=(e,t)=>{y.current&&clearTimeout(y.current);let n=36*t,s=Math.abs(n-b.current);f.current=n,N.current={startTime:null,startValue:b.current,duration:Math.min(500,Math.max(180,2.2*s))},a(e)};return(0,s.jsxs)("div",{className:(0,x.cn)("relative h-[124px] w-12 overflow-hidden bg-transparent select-none",r),style:{perspective:"800px"},children:[(0,s.jsxs)("div",{className:"absolute inset-0 pointer-events-none z-10",children:[(0,s.jsx)("div",{className:(0,x.cn)("absolute top-0 w-full h-[44px] bg-gradient-to-b from-white dark:from-[#191919] to-transparent",c)}),(0,s.jsx)("div",{className:(0,x.cn)("absolute bottom-0 w-full h-[44px] bg-gradient-to-t from-white dark:from-[#191919] to-transparent",c)})]}),(0,s.jsx)("div",{ref:u,role:"listbox",tabIndex:0,"aria-label":d,"aria-activedescendant":"".concat(o,"-opt-").concat(t.indexOf(n)),onKeyDown:e=>{let s=t.indexOf(n);if(s<0)return;let a=s;if("ArrowDown"===e.key||"ArrowRight"===e.key)a=Math.min(t.length-1,s+1);else if("ArrowUp"===e.key||"ArrowLeft"===e.key)a=Math.max(0,s-1);else if("Home"===e.key)a=0;else if("End"===e.key)a=t.length-1;else if("PageDown"===e.key)a=Math.min(t.length-1,s+5);else{if("PageUp"!==e.key)return;a=Math.max(0,s-5)}e.preventDefault(),a!==s&&D(t[a],a)},className:"relative h-full w-full cursor-grab active:cursor-grabbing focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 rounded-lg",style:{touchAction:"none"},children:t.map((e,t)=>(0,s.jsx)("div",{ref:e=>{m.current[t]=e},onClick:()=>D(e,t),id:"".concat(o,"-opt-").concat(t),role:"option","aria-selected":e===n,className:"absolute top-0 left-0 w-full h-[36px] cursor-pointer",style:{transformStyle:"preserve-3d"},children:(0,s.jsx)("div",{ref:e=>{h.current[t]=e},className:"w-full h-full flex items-center justify-center pointer-events-none",style:{transformOrigin:"center center",backfaceVisibility:"hidden"},children:(0,s.jsx)("span",{className:(0,x.cn)("text-base text-zinc-900 dark:text-zinc-200",i),children:e})})},t))})]})}var m=n(25997),h=n(37456),p=n(30166),f=n(64954),b=n(76865),g=n(82431),v=n(7888),j=n(92804);function k(e){let{isLoading:t=!1,error:n=null,onRetry:a,isEmpty:r=!1,emptyTitle:i="아직 아무것도 없습니다",emptyDescription:l,emptyAction:c,skeleton:d,subject:o,size:u="md",className:m,children:h}=e;return n?(0,s.jsxs)("div",{role:"alert",className:(0,x.cn)("flex flex-col items-center justify-center text-center px-6 py-14 gap-3",m),children:[(0,s.jsx)(b.Z,{size:22,className:"text-red-600 dark:text-red-400","aria-hidden":"true"}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-[14px] font-semibold text-zinc-900 dark:text-zinc-100 break-keep",children:o?"".concat(o).concat((0,j.Ge)(o,"을","를")," 불러오지 못했습니다"):"내용을 불러오지 못했습니다"}),(0,s.jsx)("p",{className:"mt-1 text-[13px] text-zinc-600 dark:text-zinc-300 break-keep max-w-[320px]",children:(0,v.q)(n,"잠시 후 다시 시도해 주세요. 계속 안 되면 네트워크 상태를 확인해 주세요.")})]}),a&&(0,s.jsxs)("button",{type:"button",onClick:a,className:"inline-flex items-center gap-1.5 min-h-[44px] px-4 roun
1ded-xl text-[13px] font-semibold bg-zinc-100 dark:bg-zinc-800 text-zinc-800 dark:text-zinc-100 hover:bg-zinc-200 dark:hover:bg-zinc-700 active:scale-[0.97] transition",children:[(0,s.jsx)(g.Z,{size:14,"aria-hidden":"true"}),"다시 시도"]})]}):t?(0,s.jsxs)("div",{className:m,"aria-busy":"true","aria-live":"polite",children:[null!=d?d:(0,s.jsx)(z,{}),(0,s.jsx)("span",{className:"sr-only",children:"불러오는 중"})]}):r?(0,s.jsx)(f.Z,{title:i,description:l,action:c,size:u,className:m}):(0,s.jsx)(s.Fragment,{children:h})}function z(e){let{rows:t=5,className:n}=e;return(0,s.jsx)("div",{className:(0,x.cn)("space-y-2 py-2",n),"aria-hidden":"true",children:Array.from({length:t}).map((e,t)=>(0,s.jsxs)("div",{className:"flex items-center gap-2.5 px-2 py-1",children:[(0,s.jsx)("div",{className:"w-24 h-3 rounded bg-zinc-200/80 dark:bg-zinc-800 animate-shimmer"}),(0,s.jsx)("div",{className:"flex-1 h-2 rounded-full bg-zinc-200/80 dark:bg-zinc-800 animate-shimmer",style:{maxWidth:"".concat(70-8*t,"%")}})]},t))})}let y=(0,p.default)(()=>Promise.all([n.e(5398),n.e(5268)]).then(n.bind(n,45268)),{loadableGenerated:{webpack:()=>[45268]},ssr:!1}),w=["#5b7fa6","#9b7ba8","#d97760","#d4a574","#6ba58a"];function N(e){return(0,h.k_)(e).map(e=>{var t,n;return null!==(n=null===(t=h.FT.find(t=>t.id===e))||void 0===t?void 0:t.label)&&void 0!==n?n:e}).join(" \xb7 ")}function C(e){let{title:t,action:n,children:r,flush:i=!1,className:l,contentClassName:c,icon:d,loading:o=!1,error:u,onRetry:m,isMobile:h=!1}=e;return(0,s.jsxs)("div",{className:(0,x.cn)("flex flex-col",h?"bg-white dark:bg-[#1C1C1E]":"bg-white dark:bg-[#191919] rounded-lg overflow-hidden shadow-sm dark:shadow-none",l),children:[(0,s.jsxs)("div",{className:(0,x.cn)("flex justify-between items-center shrink-0",h?"gap-3 px-5 pt-3.5 pb-2":"px-4 py-3"),children:[(0,s.jsxs)("h3",{className:(0,x.cn)("flex items-center gap-2",h?"font-semibold text-sm text-zinc-800 dark:text-zinc-200":"font-bold text-zinc-900 dark:text-zinc-200 text-[15px]"),children:[d&&(0,s.jsx)("span",{className:"text-zinc-400 dark:text-zinc-500",children:d}),t]}),n]}),(0,s.jsx)("div",{className:(0,x.cn)("flex-1 min-h-0 flex flex-col",i?"":(0,x.cn)(h?"px-5 pb-4":"px-4 pb-4",c)),children:(0,s.jsx)(k,{isLoading:o,error:u,onRetry:m,subject:"성적",skeleton:(0,s.jsx)(a.ContentLoadingState,{variant:"list",rows:3,label:"성적을 불러오고 있어요",className:"p-0 md:p-0"}),children:r})})]})}let S=[1,2,3,4],E=[2,3,4,5,6,7,8,9,10,11,12,13,14,15],M=["1개","평균"];function R(e){let{students:t,isAdmin:n,isSystemAdmin:a=!1,onSelectStudent:p,studentGradeAverages:b={},studentGradeRecords:g={},studentMockAverages:v={},latestMockExams:j={},studentRoles:z={},isLoading:R=!1,gradesLoading:_=!1,gradesError:A,error:D=null,onRetry:L,isMobile:G=!1}=e,[I,F]=(0,l.useState)(n?"class":"number"),[Z,T]=(0,l.useState)("asc"),{openSettings:O}=(0,m.Y)(),[B,P]=(0,l.useState)(!1),[W,X]=(0,l.useState)(2),[Y,q]=(0,l.useState)(8),[K,H]=(0,l.useState)("1개"),[$,U]=(0,l.useState)(!1),[V,Q]=(0,l.useState)(null),[J,ee]=(0,l.useState)(null),et=(0,l.useRef)(null),en=(0,l.useRef)(null),es=(0,l.useRef)(null),ea=(0,l.useRef)(null),[er,ei]=(0,l.useState)(!1),el=(0,l.useCallback)(()=>{ei(!1),Q(null),ee(null),U(!1)},[]),ec=(0,l.useCallback)((e,t)=>{let n=e.getBoundingClientRect();ea.current={clientX:n.left+Math.min(n.width/2,160),clientY:n.bottom-6},t(),ei(!0)},[]),ed=(0,l.useCallback)((e,t)=>{let n=t||ea.current;t&&(ea.current={clientX:t.clientX,clientY:t.clientY});let s=e.current,a=es.current;if(!s||!a||!n)return;let r=a.getBoundingClientRect(),i=n.clientX-r.left,l=n.clientY-r.top+a.scrollTop,c=s.offsetWidth||240,d=s.offsetHeight||80,o=i+12;i+12+c>a.clientWidth-12&&(o=Math.max(12,i-c-12)),o=Math.max(12,Math.min(o,a.clientWidth-c-12));let x=l+14;window.innerHeight-n.clientY<d+25&&(x=Math.max(a.scrollTop+10,l-d-12)),s.style.left="".concat(o,"px"),s.style.top="".concat(x,"px"),s.style.opacity="1"},[]);(0,l.useEffect)(()=>{(V||J)&&ed(et)},[V,J,ed]),(0,l.useEffect)(()=>{$&&ed(en)},[$,ed]),(0,l.useEffect)(()=>{if(!er)return;let e=e=>{let t=e.target;null!=t&&t.closest("[data-chart-detail-trigger]")||el()},t=e=>{"Escape"===e.key&&el()};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)}},[er,el]);let eo=t.length,ex=(0,l.useMemo)(()=>t.filter(e=>void 0!==b[e.id]&&null!==b[e.id]).map(e=>({id:e.id,name:e.name,avg:b[e.id]})).sort((e,t)=>
1e.avg-t.avg).slice(0,5),[t,b]),eu=(0,l.useMemo)(()=>{let e=[];return t.forEach(t=>{let n=g[t.id]||[],s=Array.from(new Set(n.map(e=>"".concat(e.year,"-").concat(e.semester)))).sort().reverse();if(s.length>=2){let a=s[0],r=s[1],i=n.filter(e=>"".concat(e.year,"-").concat(e.semester)===a),l=n.filter(e=>"".concat(e.year,"-").concat(e.semester)===r);if(0===i.length||0===l.length)return;let c=i.reduce((e,t)=>e+(t.gradeLevel||0),0)/i.length,d=l.reduce((e,t)=>e+(t.gradeLevel||0),0)/l.length-c;Math.abs(d)>.001&&e.push({id:t.id,name:t.name,change:d>0?"up":"down",delta:Math.abs(d)})}}),e.sort((e,t)=>t.delta-e.delta)},[t,g]),em=(0,l.useMemo)(()=>{let e={};t.forEach(t=>{for(let n of(0,h.k_)(t.careerCategory))e[n]=(e[n]||0)+1});let n=Object.entries(e).map(e=>{var n;let[s,a]=e,r=t.filter(e=>(0,h.k_)(e.careerCategory).includes(s));return{id:s,label:(null===(n=h.FT.find(e=>e.id===s))||void 0===n?void 0:n.label)||"기타",count:a,studentNames:r.map(e=>e.name)}}).sort((e,t)=>t.count-e.count);if(n.length<=4)return n;let s=n.slice(0,4),a=n.slice(4);return[...s,{id:"__others__",label:"ê·¸ 외",count:a.reduce((e,t)=>e+t.count,0),studentNames:a.flatMap(e=>e.studentNames),groupedNames:a.map(e=>({label:e.label,names:e.studentNames}))}]},[t]);(0,l.useMemo)(()=>{let e={};return t.forEach(t=>{let n=t.grade&&t.classNum?"".concat(t.grade,"학년 ").concat(t.classNum,"반"):"미분류";e[n]=(e[n]||0)+1}),Object.entries(e).sort((e,t)=>e[0].localeCompare(t[0])).map(e=>{let[t,n]=e;return{label:t,count:n}})},[t]);let eh=(0,l.useMemo)(()=>{let e=Array.from(new Set(t.map(e=>e.grade).filter(Boolean))),n=e.length>1,s=e.includes(3);return(s||n&&e.some(e=>3===e)?[{label:"1등급",minGrade:1,maxGrade:1.999},{label:"2~3등급",minGrade:2,maxGrade:3.999},{label:"4~5등급",minGrade:4,maxGrade:5.999},{label:"6~7등급",minGrade:6,maxGrade:7.999},{label:"8~9등급",minGrade:8,maxGrade:10}]:[{label:"1등급대",minGrade:1,maxGrade:1.999},{label:"2등급대",minGrade:2,maxGrade:2.999},{label:"3등급대",minGrade:3,maxGrade:3.999},{label:"4등급대",minGrade:4,maxGrade:4.999},{label:"5등급대",minGrade:5,maxGrade:10}]).map(e=>{let n=t.filter(t=>{let n=b[t.id];return null!=n&&n>=e.minGrade&&n<=e.maxGrade}).sort((e,t)=>(e.number||0)-(t.number||0));return{label:e.label,count:n.length,studentNames:n.map(e=>"".concat(e.number,". ").concat(e.name))}})},[t,b]),ep=(0,l.useMemo)(()=>t.filter(e=>{let t=j[e.id]||[];if(0===t.length)return!1;let n={};t.forEach(e=>{e.gradeLevel&&(n[e.subject]=e.gradeLevel)});let s=[];n["국어"]&&s.push(n["국어"]),n["수학"]&&s.push(n["수학"]),n["영어"]&&s.push(n["영어"]);let a=[];if((n["탐구1"]||n["사회"])&&a.push(n["탐구1"]||n["사회"]),(n["탐구2"]||n["과학"])&&a.push(n["탐구2"]||n["과학"]),a.length>0){if("1개"===K)s.push(Math.min(...a));else{let e=a.reduce((e,t)=>e+t,0)/a.length;s.push(e)}}return!(s.length<W)&&[...s].sort((e,t)=>e-t).slice(0,W).reduce((e,t)=>e+t,0)<=Y}).sort((e,t)=>e.number-t.number),[t,j,W,Y,K]),ef=(0,l.useMemo)(()=>[...t].sort((e,t)=>{var s,a,r,i,l,c,d,o,x,u,m,h;let p,f;switch(I){case"number":p=e.number,f=t.number;break;case"name":p=e.name,f=t.name;break;case"class":p="".concat(String(null!==(s=e.grade)&&void 0!==s?s:0).padStart(2,"0"),"-").concat(String(null!==(a=e.classNum)&&void 0!==a?a:0).padStart(2,"0"),"-").concat(String(e.number).padStart(3,"0")),f="".concat(String(null!==(r=t.grade)&&void 0!==r?r:0).padStart(2,"0"),"-").concat(String(null!==(i=t.classNum)&&void 0!==i?i:0).padStart(2,"0"),"-").concat(String(t.number).padStart(3,"0"));break;case"career":p=N(e.careerCategory),f=N(t.careerCategory);break;case"grade":p=null!==(l=b[e.id])&&void 0!==l?l:10,f=null!==(c=b[t.id])&&void 0!==c?c:10;break;case"mock":p=null!==(d=v[e.id])&&void 0!==d?d:10,f=null!==(o=v[t.id])&&void 0!==o?o:10;break;case"role":{let n=e=>Object.values(z[e]||{}).filter(e=>"string"==typeof e&&""!==e.trim()).join(", "),s=n(e.id),a=n(t.id);p=s,f=a,s||a||(p=e.number,f=t.number);break}default:n?(p="".concat(String(null!==(x=e.grade)&&void 0!==x?x:0).padStart(2,"0"),"-").concat(String(null!==(u=e.classNum)&&void 0!==u?u:0).padStart(2,"0"),"-").concat(String(e.number).padStart(3,"0")),f="".concat(String(null!==(m=t.grade)&&void 0!==m?m:0).padStart(2,"0"),"-").concat(String(null!==(h=t.classNum)&&void 0!==h?h:0).padStart(2,"0"),"-").concat(String(t.number).padStart(3,"0"))):(p=e.number,f=t.number)}return p<f?"asc"===Z?-1:1:p>f?"asc"===Z?1:-1:0}),[t,I,Z,b,v,z]),eb=e=>{I===e?"asc"===Z?T("desc"):(F(n?"class":"number"),T("asc")):(F(e),T("asc"))},eg=e=>{let{field:t,always:n}=e,a=I===t;return n||a?a?"asc"===Z?(0,s.jsx)(c.Z,{size:12,className:"text-zinc-600 dark:text-zinc-200"}):(0,s.jsx)(d.Z,{size:12,className:"text-zinc-600 dark:text-zinc-200"}):(0,s.jsx)(c.Z,{size:12,className:"text-zinc-300 dark:text-zinc-500"}):null};return D?(0,s.jsx)("div",{className:"flex-1 flex items-center justify-center p-8",children:(0,s.jsx)(k,{error:D,onRetry:L,subject:"학급 현황",children:null})}):R&&0===eo?(0,s.jsx)(i.V$,{label:"학급 현황을 불러오고 있어요"}):0===eo?(0,s.jsx)("div",{className:"flex-1 flex items-center justify-center p-8",children:(0,s.jsx)(f.Z,{size:"lg",title:"학생 데이터가 없습니다",description:"학생을 등록하여 학급 현황 분석과 ë
1Œ€ì‹œë³´ë“œë¥¼ 확인하세요.",action:(0,s.jsx)("button",{onClick:()=>O("student-list"),className:"px-6 py-2.5 bg-zinc-900 hover:bg-black dark:bg-white dark:hover:bg-zinc-100 text-white dark:text-zinc-900 rounded-xl text-sm font-semibold transition-all shadow-sm active:scale-95",children:"학생 명단 등록하기"})})}):(0,s.jsxs)("div",{ref:e=>{e&&(es.current=e)},className:(0,x.cn)("flex-1 overflow-y-auto custom-scrollbar relative",G?"pb-24":"bg-[#fafaf9] dark:bg-[#09090b]"),children:[(0,s.jsxs)("div",{className:(0,x.cn)("max-w-[1600px] mx-auto",G?"flex flex-col mobile-scroll-bottom [&>*+*]:border-t-8 [&>*+*]:border-[#f2f2ef] dark:[&>*+*]:border-black":"p-4 space-y-4"),children:[(0,s.jsxs)("div",{className:G?"flex flex-col [&>*+*]:border-t-8 [&>*+*]:border-[#f2f2ef] dark:[&>*+*]:border-black":"grid grid-cols-1 lg:grid-cols-2 2xl:grid-cols-3 gap-4",children:[(0,s.jsx)(C,{isMobile:G,title:"희망 진로 분포",action:(0,s.jsx)("div",{className:"text-xs text-zinc-400 shrink-0",children:"복수 응답 포함"}),className:"lg:order-1 2xl:order-1",children:0===em.length?(0,s.jsx)(f.Z,{size:"sm",title:"아직 진로를 적은 학생이 없습니다",description:"학생 상세의 '희망 진로 분야'에서 고르면 여기에 분포가 나타납니다."}):(0,s.jsx)("div",{className:"space-y-1.5 pt-1",children:em.map((e,t)=>{let n=eo>0?Math.max(4,e.count/eo*100):4,a="__none__"===e.id;return(0,s.jsx)("div",{className:"flex items-center",children:(0,s.jsxs)("button",{type:"button","data-chart-detail-trigger":!0,"aria-label":"".concat(e.label," ").concat(e.count,"명 — 학생 명단 보기"),className:"flex-1 text-left flex items-center gap-2.5 px-2 py-1 -mx-2 rounded-lg transition-colors duration-150 hover:bg-zinc-100/80 dark:hover:bg-zinc-800/60 group/career-row relative cursor-pointer",onClick:t=>ec(t.currentTarget,()=>{Q(null),ee(e)}),onMouseEnter:t=>{er||(ea.current={clientX:t.clientX,clientY:t.clientY},ee(e))},onMouseLeave:()=>{er||ee(null)},onMouseMove:e=>{er||ed(et,e)},children:[(0,s.jsx)("div",{className:"w-32 text-xs text-zinc-500 dark:text-zinc-400 group-hover/career-row:text-zinc-800 dark:group-hover/career-row:text-zinc-200 transition-colors truncate text-left shrink-0",children:e.label}),(0,s.jsx)("div",{className:"flex-1 bg-zinc-100 dark:bg-zinc-800 group-hover/career-row:bg-zinc-200/70 dark:group-hover/career-row:bg-zinc-700/60 rounded-full h-2 overflow-hidden transition-colors",children:(0,s.jsx)("div",{className:"h-full rounded-full transition-all duration-500 group-hover/career-row:brightness-110",style:{width:"".concat(n,"%"),backgroundColor:a?"#d4d4d8":w[t%w.length]}})}),(0,s.jsxs)("div",{className:"text-xs tabular-nums font-medium text-zinc-600 dark:text-zinc-300 group-hover/career-row:text-zinc-900 dark:group-hover/career-row:text-zinc-100 transition-colors w-10 text-right shrink-0",children:[e.count,"명"]})]})},e.id)})})}),(0,s.jsx)(C,{isMobile:G,title:"성적 구간별 분포",loading:_,error:A,onRetry:L,className:"lg:order-2 2xl:order-2",action:(0,s.jsx)("div",{className:"text-xs text-zinc-400",children:"내신 기준"}),children:0===eh.length?(0,s.jsx)(f.Z,{size:"sm",title:"내신 성적이 아직 없습니다",description:"성적 파일을 올리면 등급 구간별 분포를 ë³¼ 수 있습니다."}):(0,s.jsx)("div",{className:"space-y-1.5 pt-1",children:eh.map(e=>{let t=Math.max(...eh.map(e=>e.count),1),n=Math.max(4,e.count/t*100);return(0,s.jsx)("div",{className:"flex items-center",children:(0,s.jsxs)("button",{type:"button","data-chart-detail-trigger":!0,"aria-label":"".concat(e.label," ").concat(e.count,"명 — 학생 명단 보기"),className:"flex-1 text-left flex items-center gap-2.5 px-2 py-1 -mx-2 rounded-lg transition-colors duration-150 hover:bg-zinc-100/80 dark:hover:bg-zinc-800/60 group/grade-row relative cursor-pointer",onClick:t=>ec(t.currentTarget,()=>{ee(null),Q(e)}),onMouseEnter:t=>{er||(ea.current={clientX:t.clientX,clientY:t.clientY},Q(e))},onMouseLeave:()=>{er||Q(null)},onMouseMove:e=>{er||ed(et,e)},children:[(0,s.jsx)("div",{className:"w-16 text-xs text-zinc-500 dark:text-zinc-400 group-hover/grade-row:text-zinc-800 dark:group-hover/grade-row:text-zinc-200 transition-colors truncate text-left shrink-0",children:e.label}),(0,s.jsx)("div",{className:"flex-1 bg-zinc-100 dark:bg-zinc-800 group-hover/grade-row:bg-zinc-200/70 dark:group-hover/grade-row:bg-zinc-700/60 rounded-full h-2 overflow-hidden transition-colors",children:(0,s.jsx)("div",{className:"h-full rounded-full transition-all duration-500 bg-[#d4d4d8] dark:bg-[#52525b]",style:{width:"".concat(n,"%")}})}),(0,s.jsxs)("div",{className:"text-xs tabular-nums font-medium text-zinc-600 dark:text-zinc-300 group-hover/grade-row:text-zinc-900 dark:group-hover/grade-row:text-zinc-100 transition-colors w-10 text-right shrink-0",children:[e.count,"명"]})]})},e.label)})})}),(0,s.jsx)(C,{isMobile:G,title:"수능 최저 등급",loading:_,error:A,onRetry:L,className:"lg:order-3 2xl:order-3",contentClassName:"px-1",action:(0,s.jsx)("div",{className:"text-xs text-zinc-400",children:"최근 모의고사 기준"}),children:(0,s.jsxs)("div",{className:"flex flex-col h-full",children:[(0,s.jsxs)("div",{className:"w-full flex-1 flex items-center justify-center gap-1 sm:gap-1.5 lg:gap-[2px] xl:gap-1.5 whitespace-nowrap overflow-hidden select-none",children:[(0,s.jsx)(u,{label:"과목 수",options:S,value:W,onChange:e=>X(Number(e)),className:"w-10 sm:w-11 lg:w-7 xl:w-10 2xl:w-11 shrink-0",textClassName:"text-base lg:text-[13px] xl:text-base 2xl:text-[17px] font-semibold"}),(0,s.jsx)("span",{className:"text-[13px] lg:text-xs xl:text-[13px] 2xl:text-sm font-medium text-zinc-600 dark:text-zinc-400 px-0.5 xl:px-1 2xl:px-[3px] shrink-0",children:"개 과목 합"}),(0,s.jsx)(u,{label:"등급 합",options:E,value:Y,onChange:e=>q(Number(e)),className:"w-10 sm:w-11 lg:w-7 xl:w-10 2xl:w-11 shrink-0",textClassName:"text-base lg:text-[13px] xl:text-base 2xl:text-[17px] font-semibold"}),(0,s.jsx)("span",{className:"text-[13px] lg:text-xs xl:text-[13px] 2xl:text-sm font-medium text-zinc-600 dark:text-zinc-400 px-0.5 xl:px-1 2xl:px-[3px] shrink-0",children:"등급 이내, 탐구"}),(0,s.jsx)(u,{label:"탐구 반영 방식",options:M,value:K,onChange:e=>H(String(e)),className:"w-14 sm:w-[60px] lg:w-10 xl:w-14 2xl:w-[60px] shrink-0",textClassName:"text-base lg:text-[13px] xl:text-base 2xl:text-[17px] font-semibold"}),(0,s.jsx)("span",{className:"text-[13px] lg:text-xs xl:text-[13px] 2xl:text-sm font-medium text-zinc-600 dark:text-zinc-400 ml-0.5 xl:ml-1 2xl:ml-[3px] shrink-0",children:"반영"})]}),(0,s.jsx)("div",{className:(0,x.cn)("relative mt-auto pt-2.5",G?"mx-4":"mx-3"),children:(0,s.jsxs)("button",{type:"button","data-chart-detail-trigger":!0,"aria-label":"ì¡°ê±´ 충족 학생 ".concat(ep.length,"명 — 명단 보기"),className:"w-full flex items-center justify-between gap-2 cursor-pointer group text-left",onClick:e=>ec(e.currentTarget,()=>U(!0)),onMouseEnter:e=>{er||(ea.current={clientX:e.clientX,clientY:e.clientY},U(!0))},onMouseMove:e=>{er||ed(en,e)},onMouseLeave:()=>{er||U(!1)},children:[(0,s.jsx)("span",{className:"text-[13px] font-medium text-zinc-500",children:"ì¡°ê±´ 충족 학생"}),(0,s.jsxs)("span",{className:"flex items-baseline gap-0.5",children:[(0,s.jsx)("span",{className:"text-[15px] font-bold tabular-nums text-blue-600 dar
1k:text-blue-400 group-hover:text-blue-500 transition-colors",children:ep.length}),(0,s.jsx)("span",{className:"text-xs text-zinc-400",children:"명"})]})]})})]})}),(0,s.jsx)(C,{isMobile:G,title:"내신 성적 TOP5",loading:_,error:A,onRetry:L,className:"lg:order-4 2xl:order-4",children:0===ex.length?(0,s.jsx)(f.Z,{size:"sm",className:"flex-1 min-h-[160px]",title:"내신 성적이 아직 없습니다"}):(0,s.jsx)("div",{className:"flex flex-col",children:ex.map((e,t)=>(0,s.jsxs)("div",{role:"button",tabIndex:p?0:void 0,"aria-label":"".concat(e.name," 학생 상세 보기"),onKeyDown:t=>{t.target===t.currentTarget&&("Enter"===t.key||" "===t.key)&&(t.preventDefault(),null==p||p(e.id))},onClick:()=>null==p?void 0:p(e.id),className:"-mx-2 px-2 py-2 flex justify-between items-center rounded-md border-b border-zinc-100 dark:border-white/[0.06] last:border-b-0 transition-colors cursor-pointer hover:bg-zinc-50 dark:hover:bg-white/[0.04]",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"w-5 text-center text-xs tabular-nums text-zinc-400 dark:text-zinc-500 shrink-0",children:t+1}),(0,s.jsx)("span",{className:"text-[13px] text-zinc-700 dark:text-zinc-300",children:e.name})]}),(0,s.jsxs)("span",{className:"text-[13px] font-bold tabular-nums text-zinc-800 dark:text-zinc-200",children:[e.avg.toFixed(1),(0,s.jsx)("span",{className:"ml-px text-xs font-normal text-zinc-400 dark:text-zinc-500",children:"등급"})]})]},e.id))})}),(0,s.jsx)(C,{isMobile:G,title:"성적 상승 TOP5",loading:_,error:A,onRetry:L,className:"lg:order-5 2xl:order-5",children:0===eu.filter(e=>"up"===e.change).length?(0,s.jsxs)("div",{className:"flex-1 min-h-[160px] flex flex-col items-center justify-center text-center p-4 select-none",children:[(0,s.jsx)("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 font-normal",children:"비교할 학기가 없습니다"}),(0,s.jsx)("p",{className:"text-xs text-zinc-400 dark:text-zinc-500 mt-1 font-normal",children:"두 학기 이상 쌓이면 성적 변화를 보여드립니다."})]}):(0,s.jsx)("div",{className:"flex flex-col",children:eu.filter(e=>"up"===e.change).slice(0,5).map((e,t)=>(0,s.jsxs)("div",{role:"button",tabIndex:p?0:void 0,"aria-label":"".concat(e.name," 학생 상세 보기"),onKeyDown:t=>{t.target===t.currentTarget&&("Enter"===t.key||" "===t.key)&&(t.preventDefault(),null==p||p(e.id))},onClick:()=>null==p?void 0:p(e.id),className:"-mx-2 px-2 py-2 flex justify-between items-center rounded-md border-b border-zinc-100 dark:border-white/[0.06] last:border-b-0 transition-colors cursor-pointer hover:bg-zinc-50 dark:hover:bg-white/[0.04]",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"w-5 text-center text-xs tabular-nums text-zinc-400 dark:text-zinc-500 shrink-0",children:t+1}),(0,s.jsx)("span",{className:"text-[13px] text-zinc-700 dark:text-zinc-300",children:e.name})]}),(0,s.jsxs)("span",{className:"text-[13px] font-bold tabular-nums text-zinc-800 dark:text-zinc-200 flex items-baseline gap-0.5",children:[(0,s.jsx)("span",{className:"text-emerald-500",children:"+"}),e.delta.toFixed(2),(0,s.jsx)("span",{className:"ml-px text-xs font-normal text-zinc-400 dark:text-zinc-500",children:"등급"})]})]},e.id))})}),(0,s.jsx)(C,{isMobile:G,title:"성적 하락 TOP5",loading:_,error:A,onRetry:L,className:"lg:order-6 2xl:order-6",children:0===eu.filter(e=>"down"===e.change).length?(0,s.jsxs)("div",{className:"flex-1 min-h-[160px] flex flex-col items-center justify-center text-center p-4 select-none",children:[(0,s.jsx)("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 font-normal",children:"비교할 학기가 없습니다"}),(0,s.jsx)("p",{className:"text-xs text-zinc-400 dark:text-zinc-500 mt-1 font-normal",children:"두 학기 이상 쌓이면 성적 변화를 보여드립니다."})]}):(0,s.jsx)("div",{className:"flex flex-col",children:eu.filter(e=>"down"===e.change).slice(0,5).map((e,t)=>(0,s.jsxs)("div",{role:"button",tabIndex:p?0:void 0,"aria-label":"".concat(e.name," 학생 상세 보기"),onKeyDown:t=>{t.target===t.currentTarget&&("Enter"===t.key||" "===t.key)&&(t.preventDefault(),null==p||p(e.id))},onClick:()=>null==p?void 0:p(e.id),className:"-mx-2 px-2 py-2 flex justify-between items-center rounded-md border-b border-zinc-100 dark:border-white/[0.06] last:border-b-0 transition-colors cursor-pointer hover:bg-zinc-50 dark:hover:bg-white/[0.04]",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"w-5 text-center text-xs tabular-nums text-zinc-400 dark:text-zinc-500 shrink-0",children:t+1}),(0,s.jsx)("span",{className:"text-[13px] text-zinc-700 dark:text-zinc-300",children:e.name})]}),(0,s.jsxs)("span",{className:"text-[13px] font-bold tabular-nums text-zinc-800 dark:text-zinc-200 flex items-baseline gap-0.5",children:[(0,s.jsx)("span",{className:"text-rose-500",children:"-"}),e.delta.toFixed(2),(0,s.jsx)("span",{className:"ml-px text-xs font-normal text-zinc-400 dark:text-zinc-500",children:"등급"})]})]},e.id))})})]}),(0,s.jsx)(C,{isMobile:G,title:(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("span",{children:"전체 학생 목록"}),(0,s.jsxs)("span",{className:"text-[13px] text-zinc-400 font-normal",children:[eo,"명"]})]}),action:t.length>0?(0,s.jsxs)("button",{onClick:()=>P(!0),className:"flex items-center gap-1.5 text-xs px-2.5 py-1.5 rounded-lg bg-[#EEEEE8] hover:bg-[#
1E0E0D8] dark:bg-zinc-800 dark:hover:bg-zinc-700 text-zinc-700 dark:text-zinc-300 font-medium transition-colors whitespace-nowrap shrink-0",children:[(0,s.jsx)(o.Z,{size:11,className:"shrink-0"}),(0,s.jsx)("span",{className:"whitespace-nowrap",children:"모바일 성적표 배부"})]}):void 0,flush:!0,children:G?(0,s.jsxs)("table",{className:"w-full text-[13px] table-fixed",children:[(0,s.jsxs)("colgroup",{children:[n&&(0,s.jsx)("col",{style:{width:52}}),n&&(0,s.jsx)("col",{style:{width:30}}),(0,s.jsx)("col",{style:{width:n?36:46}}),(0,s.jsx)("col",{style:{width:n?56:54}}),(0,s.jsx)("col",{style:{width:48}}),(0,s.jsx)("col",{style:{width:48}}),(0,s.jsx)("col",{}),!n&&(0,s.jsx)("col",{style:{width:66}})]}),(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{className:"bg-zinc-50 dark:bg-zinc-800/50 text-[12px]",children:[n&&(0,s.jsx)("th",{className:"pl-5 pr-1 py-2.5 text-left font-medium text-zinc-400 whitespace-nowrap",children:"학년"}),n&&(0,s.jsx)("th",{className:"px-1 py-2.5 text-center font-medium text-zinc-400",children:"반"}),(0,s.jsx)("th",{className:(0,x.cn)("pr-0.5 py-2.5 font-medium text-zinc-400 whitespace-nowrap",n?"pl-0.5 text-center":"pl-5 text-left"),children:"번호"}),(0,s.jsx)("th",{className:"px-1 py-2.5 text-center font-medium text-zinc-400",children:"이름"}),["grade","mock"].map(e=>(0,s.jsx)("th",{"aria-sort":I===e?"asc"===Z?"ascending":"descending":void 0,className:"p-0 font-medium text-zinc-400",children:(0,s.jsxs)("button",{type:"button",onClick:()=>eb(e),className:"w-full min-h-[40px] flex items-center justify-center gap-0.5 pl-1 select-none",children:[(0,s.jsx)("span",{children:"grade"===e?"내신":"모의"}),(0,s.jsx)(eg,{field:e,always:!0})]})},e)),(0,s.jsx)("th",{className:(0,x.cn)("pl-1.5 py-2.5 text-center font-medium text-zinc-400",n?"pr-5":"pr-1.5"),children:"희망 진로"}),!n&&(0,s.jsx)("th",{className:"pl-1.5 pr-5 py-2.5 text-center font-medium text-zinc-400",children:"역할"})]})}),(0,s.jsx)("tbody",{children:ef.map((e,t)=>{var a,i;let l=N(e.careerCategory),c=Object.values(z[e.id]||{}).filter(e=>"string"==typeof e&&""!==e.trim()).join(", ");return(0,s.jsxs)("tr",{tabIndex:p?0:void 0,"aria-label":"".concat(e.name," 학생 상세 보기"),onKeyDown:t=>{t.target===t.currentTarget&&("Enter"===t.key||" "===t.key)&&(t.preventDefault(),null==p||p(e.id))},onClick:()=>null==p?void 0:p(e.id),className:(0,x.cn)("border-t border-zinc-100 dark:border-white/[0.04] cursor-pointer active:bg-blue-50/60 dark:active:bg-blue-900/10",t%2==1?"bg-zinc-50/50 dark:bg-white/[0.01]":""),children:[n&&(0,s.jsx)("td",{className:"pl-5 pr-1 py-3 text-left tabular-nums text-zinc-700 dark:text-zinc-300",children:null!==(a=e.grade)&&void 0!==a?a:"-"}),n&&(0,s.jsx)("td",{className:"px-1 py-3 text-center tabular-nums text-zinc-700 dark:text-zinc-300",children:null!==(i=e.classNum)&&void 0!==i?i:"-"}),(0,s.jsx)("td",{className:(0,x.cn)("pr-1 py-3 tabular-nums text-zinc-500 dark:text-zinc-400",n?"pl-1 text-center":"pl-5 text-left"),children:e.number}),(0,s.jsx)("td",{className:"px-1 py-3 text-center font-medium text-zinc-800 dark:text-zinc-200 truncate",children:e.name}),[b,v].map((t,n)=>{var a;return(0,s.jsx)("td",{className:"px-1 py-3 text-center tabular-nums",children:_?(0,s.jsx)(r.Od,{width:28,height:14,className:"mx-auto"}):A?(0,s.jsx)("span",{className:"text-[11px] text-zinc-500",children:"실패"}):void 0!==t[e.id]&&null!==t[e.id]?(0,s.jsx)("span",{className:"font-medium text-zinc-700 dark:text-zinc-300",children:null===(a=t[e.id])||void 0===a?void 0:a.toFixed(1)}):(0,s.jsx)("span",{className:"text-zinc-300 dark:text-zinc-500",children:"-"})},n)}),(0,s.jsx)("td",{className:(0,x.cn)("pl-1.5 py-2 text-center text-[12px] leading-snug break-keep",n?"pr-5":"pr-1.5"),children:l?(0,s.jsx)("span",{className:"line-clamp-2 text-zinc-700 dark:text-zinc-300",children:l}):(0,s.jsx)("span",{className:"text-zinc-300 dark:text-zinc-500",children:"-"})}),!n&&(0,s.jsx)("td",{className:"pl-1.5 pr-5 py-2 text-center text-[12px] leading-snug break-keep",children:c?(0,s.jsx)("span",{className:"line-clamp-2 text-zinc-700 dark:text-zinc-300",children:c}):(0,s.jsx)("span",{className:"text-zinc-300 dark:text-zinc-500",children:"-"})})]},e.id)})})]}):(0,s.jsx)("div",{className:"overflow-x-auto",children:(0,s.jsxs)("table",{className:"w-full text-[13px] table-fixed min-w-[600px]",children:[n?(0,s.jsxs)("colgroup",{children:[(0,s.jsx)("col",{style:{width:"8%"}}),(0,s.jsx)("col",{style:{width:"8%"}}),(0,s.jsx)("col",{style:{width:"8%"}}),(0,s.jsx)("col",{style:{width:"16%"}}),(0,s.jsx)("col",{style:{width:"15%"}}),(0,s.jsx)("col",{style:{width:"15%"}}),(0,s.jsx)("col",{style:{width:"30%"}})]}):(0,s.jsxs)("colgroup",{children:[(0,s.jsx)("col",{style:{width:"10%"}}),(0,s.jsx)("col",{style:{width:"18%"}}),(0,s.jsx)("col",{style:{width:"18%"}}),(0,s.jsx)("col",{style:{width:"18%"}}),(0,s.jsx)("col",{style:{width:"18%"}}),(0,s.jsx)("col",{style:{width:"18%"}})]}),(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{className:"bg-zinc-50 dark:bg-zinc-800/50",children:[n&&(0,s.jsx)("th",{className:"px-4 py-2.5 text-center font-medium text-zinc-400",children:"학년"}),n&&(0,s.jsx)("th",{className:"px-4 py-2.5 text-center font-medium text-zinc-400",children:"반"}),(0,s.jsx)("th",{className:"px-4 py-2.5 text-center font-medium text-zinc-400 select-none",children:"번호"}),(0,s.jsx)("th",{className:"px-4 py-2.5 text-center font-medium text-zinc-400",children:"이름"}),(0,s.jsx)("th",{className:"px-4 py-2.5 font-medium text-zinc-400 cursor-pointer hover:text-zinc-600 dark:hover:text-zinc-200 select-none",onClick:()=>eb("grade"),children:(0,s.jsxs)("div",{className:"flex items-center justify-center gap-1",children:[(0,s.jsx)(c.Z,{size:12,className:"invisible shrink-0"}),(0,s.jsx)("span",{children:"내신 등급"}),(0,s.jsx)(eg,{field:"grade",always:!0})]})}),(0,s.jsx)("th",{className:"px-4 py-2.5 font-medium text-zinc-400 cursor-pointer hover:text-zinc-600 dark:hover:text-zinc-200 select-none",onClick:()=>eb("mock"),children:(0,s.jsxs)("div",{className:"flex items-center justify-center gap-1",children:[(0,s.jsx)(c.Z,{size:12,className:"invisible shrink-0"}),(0,s.jsx)("span",{children:"모의고사 등급"}),(0,s.jsx)(eg,{field:"mock",always:!0})]})}),!n&&(0,s.jsx)("th",{className:"px-4 py-2.5 text-center font-medium text-zinc-400",children:"역할"}),(0,s.jsx)("th",{className:"px-4 py-2.5 text-center font-medium text-zinc-400",children:"희망 진로"})]})}),(0,s.jsx)("tbody",{children:ef.map((e,t)=>{var a,i,l,c;return(0,s.jsxs)("tr",{tabIndex:p?0:void 0,"aria-label":"".concat(e.name," 학생 상세 보기"),onKeyDown:t=>{t.target===t.currentTarget&&("Enter"===t.key||" "===t.key)&&(t.preventDefault(),null==p||p(e.id))},onClick:()=>null==p?void 0:p(e.id),className:(0,x.cn)("border-t border-zinc-100 dark:border-white/[0.04] group cursor-pointer","hover:bg-blue-50/50 dark:hover:bg-blue-900/10",t%2==1?"bg-zinc-50/50 dark:bg-white/[0.01]":""),children:[n&&(0,s.jsx)("td",{className:"px-4 py-2.5 text-center font-medium text-zinc-700 dark:text-zinc-300",children:null!==(l=e.grade)&&void 0!==l?l:"-"}),n&&(0,s.jsx)("td",{className:"px-4 py-2.5 text-center font-medium text-zinc-700 dark:text-zinc-300",children:null!==(c=e.classNum)&&void 0!==c?c:"-"}),(0,s.jsx)("td",{className:"px-4 py-2.5 text-center font-medium text-zinc-700 dark:text-zinc-300",children:e.number}),(0,s.jsx)("td",{className:"px-4 py-2.5 text-center font-medium text-zinc-800 dark:text-zinc-200",children:e.name}),(0,s.jsx)("td",{className:"px-4 py-2.5 text-center",children:_?(0,s.jsx)(r.Od,{width:36,height:14,className:"mx-auto"}):A?(0,s.jsx)("span",{className:"text-zinc-500",children:"조회 실패"}):void 0!==b[e.id]&&null!==b[e.id]?(0,s.jsx)("span",{className:"font-medium text-zinc-700 dark:text-zinc-300",children:null===(a=b[e.id])||void 0===a?void 0:a.toFixed(1)}):(0,s.jsx)("span",{className:"text-zinc-300 dark:text-zinc-500",children:"-"})}),(0,s.jsx)("td",{className:"px-4 py-2.5 text-center",children:_?(0,s.jsx)(r.Od,{width:36,height:14,className:"mx-auto"}):A?(0,s.jsx)("span",{className:"text-zinc-500",children:"조회 실패"}):void 0!==v[e.id]&&null!==v[e.id]?(0,s.jsx)("span",{className:"font-medium text-zinc-700 dark:text-zinc-300",children:null===(i=v[e.id])||void 0===i?void 0:i.toFixed(1)}):(0,s.jsx)("span",{className:"text-zinc-300 dark:text-zinc-500",children:"-"})}),!n&&(0,s.jsx)("td",{className:"px-4 py-2.5 text-center",children:(()=>{let t=Object.values(z[e.id]||{}).filter(e=>"string"==typeof e&&""!==e.trim()).join(", ");return t?(0,s.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300",children:t}):(0,s.jsx)("span",{className:"text-zinc-300 dark:text-zinc-500",children:"-"})})()}),(0,s.jsx)("td",{className:"px-4 py-2.5 text-center",children:N(e.careerCategory)?(0,s.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300",children:N(e.careerCategory)}):(0,s.jsx)("span",{className:"text-zinc-300 dark:text-zinc-500",children:"-"})})]},e.id)})})]})})})]}),(V||J)&&(V||J).studentNames.length>0&&(0,s.jsx)("div",{ref:et,className:"absolute p-2.5 bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-white/10 rounded-xl shadow-2xl z-[9999] pointer-events-none transition-opacity duration-150",style:{left:"-9999px",to
1p:"-9999px",opacity:0,maxWidth:"240px"},children:(V||J).groupedNames?(0,s.jsx)("div",{className:"space-y-1.5 px-0.5",children:(V||J).groupedNames.map((e,t)=>(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"text-xs text-zinc-400 dark:text-zinc-500 font-medium",children:e.label}),(0,s.jsx)("span",{className:"text-xs text-zinc-400 dark:text-zinc-500 font-medium",children:": "}),(0,s.jsx)("span",{className:"text-[13px] text-zinc-700 dark:text-zinc-200 font-semibold",children:e.names.join(", ")})]},t))}):(0,s.jsx)("div",{className:"flex flex-wrap gap-x-2.5 gap-y-1.5 px-0.5",children:(V||J).studentNames.map((e,t)=>(0,s.jsx)("span",{className:"text-[13px] text-zinc-700 dark:text-zinc-200 whitespace-nowrap font-semibold",children:e},t))})}),$&&ep.length>0&&(0,s.jsx)("div",{ref:en,className:"absolute p-2.5 bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-white/10 rounded-xl shadow-2xl z-[9999] pointer-events-none transition-opacity duration-150",style:{left:"-9999px",top:"-9999px",opacity:0,maxWidth:"240px"},children:(0,s.jsx)("div",{className:"flex flex-wrap gap-x-2.5 gap-y-1.5 px-0.5",children:ep.map((e,t)=>(0,s.jsxs)("span",{className:"text-[13px] text-zinc-700 dark:text-zinc-200 whitespace-nowrap font-semibold",children:[e.number,". ",e.name]},e.id))})}),B&&(0,s.jsx)(y,{students:t.map(e=>{var t,n;return{id:e.id,name:e.name,number:e.number,grade:null!==(t=e.grade)&&void 0!==t?t:null,classNum:null!==(n=e.classNum)&&void 0!==n?n:null}}),onClose:()=>P(!1),isSystemAdmin:a})]})}},59325:function(e,t,n){n.r(t),n.d(t,{default:function(){return ez}});var s=n(57437),a=n(90982),r=n(34687),i=n(98319),l=n(10136),c=n(2265),d=n(30166),o=n(29827),x=n(71632),u=n(73247),m=n(32660),h=n(45675),p=n(33245),f=n(99397),b=n(18930),g=n(17689),v=n(32489),j=n(30401),k=n(63714),z=n(64954),y=n(35596),w=n(33145),N=n(21751),C=n(84200),S=n(6856),E=n(67920),M=n(25997),R=n(65854),_=n(31930);function A(e){var t,n;let{studentId:a,studentGrade:r,isGuest:i=!1,desktop:l=!1,mobile:d=!1,api:o,onGradesChanged:x}=e,u=(0,E.XC)(),m=(0,c.useMemo)(()=>null!=o?o:(0,_.u)(a,u),[o,a,u]),{openSettings:h}=(0,M.Y)(),p=(0,c.useCallback)(e=>h("grade-file",void 0,{onClose:()=>{var t;null===(t=m.invalidateGradeRecords)||void 0===t||t.call(m),null==x||x(),e()}}),[m,x,h]);return(0,s.jsx)(R.default,{api:m,studentGrade:r,variant:"teacher",isGuest:i,onUploadGrades:l?p:void 0,flat:d},"".concat(null!==(n=null===(t=u.user)||void 0===t?void 0:t.id)&&void 0!==n?n:"",":").concat(a))}var D=n(92846),L=n(13100),G=n(21652),I=n(54292),F=n(93448),Z=n(25450),T=n(99388),O=n(37456);let B=(0,d.default)(()=>Promise.all([n.e(1042),n.e(2957),n.e(7017),n.e(7444),n.e(2840),n.e(5851)]).then(n.bind(n,22840)),{loadableGenerated:{webpack:()=>[22840]},ssr:!1,loading:()=>(0,s.jsx)(I.r,{variant:"grades",label:"성적 화면을 준비하고 있어요"})}),P=(0,d.default)(()=>Promise.all([n.e(1042),n.e(2957),n.e(7017),n.e(7444),n.e(1405),n.e(1655)]).then(n.bind(n,81405)),{loadableGenerated:{webpack:()=>[81405]},ssr:!1,loading:()=>(0,s.jsx)(I.r,{variant:"grades",label:"성적 화면을 준비하고 있어요"})}),W=(0,d.default)(()=>Promise.resolve().then(n.bind(n,72183)),{loadableGenerated:{webpack:()=>[72183]},ssr:!1,loading:()=>(0,s.jsx)("div",{className:"flex-1 p-6 flex flex-col items-center justify-center",children:(0,s.jsx)(I.r,{variant:"grades",label:"성적 화면을 준비하고 있어요"})})});function X(e){var t,n,a,r,i,l,d;let{students:o,selectedStudentId:x,onSelectStudent:m,attendanceRecords:h,isAttendanceLoading:f=!1,attendanceError:b=!1,onRetryAttendance:g,counselingRecords:v,activityRecords:j,seteukRecords:k,gradeRecords:z,admissionApi:y,mockExams:E,isAdmin:M,isGuest:R,grades:_,statistics:L,gradingSystem:Z,chartConfig:X,studentMemo:K,surveyRecords:H,selectedCareerCategories:$,onToggleCareerCategory:U,isCareerReadOnly:V=!1,rolesData:Q,studentError:J,onRetryStudents:ee,studentGradeAverages:et={},studentGradeRecords:en={},studentMockAverages:es={},latestMockExams:ea={},isDashboardLoading:er=!1,isStudentsLoading:ei=!1,isGradesLoading:el=!1,isMockLoading:ec=!1,dashboardError:ed=null,onRetryDashboard:eo,isSystemAdmin:ex=!1}=e,[eu,em]=(0,c.useState)(""),[eh,ep]=(0,c.useState)(!1),[ef,eb]=(0,c.useState)(!1),[eg,ev]=(0,c.useState)("counseling"),[ej,ek]=(0,c.useState)(!1),ez=(0,c.useId)();(0,c.useEffect)(()=>{ek(!1)},[x]);let ey=(0,c.useRef)(null),ew=(0,c.useCallback)(e=>{var t;D.MU.selection(),ev(e),null===(t=ey.current)||void 0===t||t.scrollTo({top:0,behavior:"instant"})},[]),eN=(0,c.useMemo)(()=>o.find(e=>e.id===x),[o,x]),eC=(0,c.useMemo)(()=>j.filter(e=>"autonomous"===e.category),[j]),eS=(0,c.useMemo)(()=>j.filter(e=>"career"===e.category),[j]),eE=(0,c.useMemo)(()=>o.filter(e=>e.name.includes(eu)||String(e.number).includes(eu)),[o,eu]),eM=!!(x&&eN),eR=(0,c.useCallback)(()=>{eM?ef?(eb(!1),m(""),ep(!0)):m(""):eh&&ep(!1)},[eM,ef,m,eh]);(0,N.rr)(eM?null!==(r=null==eN?void 0:eN.name)&&void 0!==r?r:"학생 상세":eh?"학급 현황":null,eR);let e_=(0,s.jsx)(s.Fragment,{children:eh?(0,s.jsx)("div",{className:"flex-1 flex flex-col h-full overflow-hidden",children:(0,s.jsx)(W,{students:o,isAdmin:M,isSystemAdmin:ex,studentGradeAverages:et,studentGradeRecords:en,studentMockAverages:es,latestMockExams:ea,studentRoles:(null==Q?void 0:Q.assignments)||{},isLoading:er,error:ed,onRetry:eo,onSelectStudent:e=>{eb(!0),ep(!1),(0,G.UM)()&&window.history.pushState({...window.history.state,isMobileSubHeader:!0,fromDashboard:!0},""),m(e)},isMobile:!0})},"dashboard"):eM?eN?(0,s.jsxs)("div",{className:"flex-1 flex flex-col min-h-0",children:[(0,s.jsx)("div",{className:"sticky top-0 z-30 px-3 py-2 bg-[#FBFBF9]/90 dark:bg-zinc-950/90 backdrop-blur-md border-b border-zinc-200/50 dark:border-white/[0.06] shadow-[0_1px_3px_rgba(0,0,0,0.02)] transition",children:(0,s.jsxs)("div",{className:"flex items-center gap-1.5 overflow-x-auto scrollbar-hide py-0.5",children:[(0,s.jsx)(q,{active:"counseling"===eg,onClick:()=>ew("counseling"),icon:(0,s.jsx)(w.default,{src:"/icons/mobile/student-tab-basic.svg",alt:"",width:16,height:16,className:"w-4 h-4 object-contain",unoptimized:!0}),label:"기본"}),(0,s.jsx)(q,{active:"grade"===eg,onClick:()=>ew("grade"),icon:(0,s.jsx)(w.default,{src:"/icons/mobile/student-tab-grade.svg",alt:"",width:16,height:16,className:"w-4 h-4 object-contain",unoptimized:!0}),label:"내신"}),(0,s.jsx)(q,{active:"mock"===eg,onClick:()=>ew("mock"),icon:(0,s.jsx)(w.default,{src:"/icons/mobile/student-tab-mock.svg",alt:"",width:16,height:16,className:"w-4 h-4 object-contain",unoptimized:!0}),label:"모의"}),(0,s.jsx)(q,{active:"record"===eg,onClick:()=>ew("record"),icon:(0,s.jsx)(w.default,{src:"/icons/mobile/student-tab-record.svg",alt:"",width:16,height:16,className:"w-4 h-4 object-contain",unoptimized:!0}),label:"생기부"}),(0,s.jsx)(q,{active:"admission"===eg,onClick:()=>ew("admission"),icon:(0,s.jsx)(w.default,{src:"/icons/mobile/student-tab-admission.svg",alt:"",width:16,height:16,className:"w-4 h-4 object-contain",unoptimized:!0}),label:"대입"})]})}),(0,s.jsxs)("div",{className:"flex-1 mobile-scroll-with-floating",children:["record"===eg&&(0,s.jsx)(S.default,{studentId:eN.id,attendanceRecords:h,activityRecords:j,seteukRecords:k,studentName:eN.name,studentGrade:null!==(i=eN.grade)&&void 0!==i?i:1,studentClass:null!==(l=eN.classNum)&&void 0!==l?l:1,studentNumber:eN.number,lifeRecordAnalysis:eN.lifeRecordAnalysis,overallOpinion:eN.overallOpinion,isMobile:!0}),"grade"===eg&&(el?(0,s.jsx)(I.r,{variant:"grades",label:"내신 성적을 불러오고 있어요"}):_&&_.length>0?(0,s.jsx)(B,{mobileView:!0,grades:_,statistics:L,gradingSystem:Z,chartConfig:X,studentGrade:null==eN?void 0:eN.grade}):(0,s.jsx)("div",{className:"flex flex-col items-center justify-center py-12",children:(0,s.jsxs)("div",{className:"text-center",children:[(0,s.jsx)("div",{className:"text-sm text-zinc-500 dark:text-zinc-400 mb-2 font-medium",children:"등록된 내신 성적이 없습니다"}),(0,s.jsx)("div",{className:"text-xs text-zinc-400 dark:text-zinc-500",children:"성적 파일ì
1„ 업로드하면 여기에 표시됩니다"})]})})),"mock"===eg&&(ec?(0,s.jsx)(I.r,{variant:"grades",label:"모의고사 성적을 불러오고 있어요"}):E&&E.length>0?(0,s.jsx)(P,{mockExams:E,mobileView:!0}):(0,s.jsx)("div",{className:"flex flex-col items-center justify-center py-12",children:(0,s.jsxs)("div",{className:"text-center",children:[(0,s.jsx)("div",{className:"text-sm text-zinc-500 dark:text-zinc-400 mb-2 font-medium",children:"등록된 모의고사 성적이 없습니다"}),(0,s.jsx)("div",{className:"text-xs text-zinc-400 dark:text-zinc-500",children:"성적 파일을 업로드하면 여기에 표시됩니다"})]})})),"counseling"===eg&&(0,s.jsxs)("div",{className:"flex flex-col [&>*+*]:border-t-8 [&>*+*]:border-[#f2f2ef] dark:[&>*+*]:border-black",children:[(0,s.jsx)(Y,{title:"최근 출결",badge:f||b?void 0:"".concat(h.length,"ê±´"),children:f?(0,s.jsx)("p",{role:"status",className:"text-center text-zinc-400 dark:text-zinc-500 py-4 text-[11px]",children:"출결 기록을 불러오고 있어요"}):b?(0,s.jsxs)("div",{role:"alert",className:"text-center text-zinc-500 dark:text-zinc-400 py-4 text-[11px]",children:[(0,s.jsx)("p",{children:"출결 기록을 불러오지 못했어요"}),(0,s.jsx)("button",{type:"button",onClick:g,className:"min-h-11 px-3 text-blue-600 dark:text-blue-400",children:"다시 시도"})]}):0===h.length?(0,s.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-4 text-[11px]",children:"기록 없음"}):(0,s.jsx)("div",{className:"flex flex-col",children:h.slice(0,6).map(e=>(0,s.jsxs)("div",{className:"py-2.5 flex flex-col gap-1.5 border-b border-zinc-100 dark:border-white/[0.06] last:border-b-0",children:[(0,s.jsxs)("div",{className:"text-[11px] text-zinc-500 dark:text-zinc-400 flex items-center gap-1.5",children:[(0,s.jsx)("span",{"aria-hidden":"true",className:"w-1 h-1 shrink-0 rounded-full bg-blue-500"}),(0,s.jsxs)("span",{children:[(0,F.$j)(e.date),e.endDate&&e.endDate!==e.date?" ~ ".concat((0,F.$j)(e.endDate)):""]})]}),(0,s.jsxs)("div",{className:"text-[13px] text-zinc-900 dark:text-zinc-100 pl-2.5",children:[e.reason," ",e.type]})]},e.id))})}),(0,s.jsx)(Y,{title:"메모",children:(0,s.jsx)("p",{className:"text-xs text-zinc-600 dark:text-zinc-300 whitespace-pre-wrap leading-relaxed min-h-[40px]",children:K||(0,s.jsx)("span",{className:"text-zinc-400 dark:text-zinc-500",children:"등록된 메모가 없습니다"})})}),(0,s.jsx)(Y,{title:"설문 응답",children:H.every(e=>e.answers.every(e=>!e.showOnManagement))?(0,s.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-4 text-[11px]",children:0===H.length?"설문 조사 응답 결과의 일부를 표시할 수 있습니다":"표시되도록 설정된 설문 응답이 없습니다"}):(0,s.jsx)("div",{className:"flex flex-col",children:H.map(e=>(0,s.jsx)("div",{className:"contents",children:e.answers.filter(e=>e.showOnManagement).map((t,n)=>(0,s.jsxs)("div",{className:"py-2.5 flex flex-col gap-1.5 border-b border-zinc-100 dark:border-white/[0.06] last:border-b-0",children:[(0,s.jsxs)("div",{className:"text-[11px] text-zinc-500 dark:text-zinc-400 flex items-center gap-1.5",children:[(0,s.jsx)("div",{className:"w-1 h-1 rounded-full bg-blue-500"}),t.question]}),(0,s.jsx)("div",{className:"text-[13px] text-zinc-900 dark:text-zinc-100 pl-2.5",children:t.answer})]},"".concat(e.id,"-").concat(n)))},e.id))})}),(0,s.jsxs)(Y,{title:"희망 진로 분야",action:(0,s.jsx)("button",{type:"button","aria-expanded":ej,"aria-controls":ez,onClick:()=>ek(e=>!e),className:"min-h-11 px-2 -mr-2 text-[11px] font-medium text-zinc-500 dark:text-zinc-400",children:ej?"접기":0!==$.length||V?"펼치기":"분야 선택"}),children:[(0,s.jsx)("div",{id:ez,className:"flex flex-wrap gap-1.5",children:O.FT.filter(e=>ej||$.includes(e.id)).map(e=>{let t=$.includes(e.id),n=!t&&!(0,O.Wn)(e.id)&&$.length>=O.Cd;return(0,s.jsx)("button",{type:"button","aria-pressed":ej?t:void 0,"aria-expanded":!!ej&&void 0,"aria-controls":ej?void 0:ez,disabled:ej&&(V||!U||n),onClick:()=>{ej?null==U||U(e.id):ek(!0)},className:(0,F.cn)("min-h-11 px-2.5 py-1 rounded-full text-[11px] font-medium border disabled:cursor-default",t?"bg-blue-600 text-white border-blue-600":"bg-transparent text-zinc-600 dark:text-zinc-300 border-zinc-200 dark:border-white/10 disabled:opacity-40"),children:e.label},e.id)})}),(0===$.length||ej)&&(0,s.jsxs)("p",{className:(0,F.cn)("text-[11px] text-zinc-400 dark:text-zinc-500 flex items-center gap-1.5 font-medium",ej&&"mt-3"),children:[(0,s.jsx)(p.Z,{size:12}),V?"등록된 희망 진로 분야입니다.":ej?"최대 ".concat(O.Cd,"개 \xb7 선택하면 자동으로 저장돼요"):"희망 진로 분야를 골라 두세요."]})]}),(0,s.jsx)(Y,{title:"상담 일지",badge:"".concat(v.length,"ê±´"),children:0===v.length?(0,s.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-6 text-xs",children:"기록 없음"}):(0,s.jsx)("div",{className:"flex flex-col",children:v.slice(0,6).map(e=>(0,s.jsxs)("div",{className:"py-3 border-b border-zinc-100 dark:border-white/[0.06] last:border-b-0",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between mb-1.5",children:[(0,s.jsx)("span",{className:"text-[11px] font-medium text-zinc-500 dark:text-zinc-400",children:e.category}),(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 font-mono",children:e.date})]}),(0,s.jsx)("p",{className:"text-xs text-zinc-600 dark:text-zinc-300 whitespace-pre-wrap leading-relaxed line-clamp-3",children:e.content})]},e.id))})}),(0,s.jsx)(Y,{title:"역할",children:(null!==(d=null==Q?void 0:null===(t=Q.c
1olumns)||void 0===t?void 0:t.length)&&void 0!==d?d:0)===0?(0,s.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-4 text-xs",children:"배정된 역할 없음"}):(0,s.jsxs)("div",{className:"flex flex-wrap gap-2",children:[null==Q?void 0:null===(n=Q.columns)||void 0===n?void 0:n.map(e=>{var t,n;let a=x?null==Q?void 0:null===(n=Q.assignments)||void 0===n?void 0:null===(t=n[x])||void 0===t?void 0:t[e.id]:null;return a?(0,s.jsxs)("div",{className:"pr-4 flex flex-col gap-1 min-w-[80px]",children:[(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500",children:e.name}),(0,s.jsx)("span",{className:"text-[13px] text-zinc-900 dark:text-zinc-100 font-medium",children:a})]},e.id):null}),x&&Object.values((null==Q?void 0:null===(a=Q.assignments)||void 0===a?void 0:a[x])||{}).every(e=>!e)&&(0,s.jsx)("p",{className:"w-full text-center text-zinc-400 dark:text-zinc-500 py-4 text-xs",children:"배정된 역할 없음"})]})}),(0,s.jsx)(Y,{title:"자율활동",children:0===eC.length?(0,s.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-4 text-xs",children:"기록 없음"}):(0,s.jsx)("div",{className:"flex flex-col",children:eC.slice(0,3).map(e=>(0,s.jsxs)("div",{className:"py-3 border-b border-zinc-100 dark:border-white/[0.06] last:border-b-0",children:[(0,s.jsxs)("div",{className:"flex justify-between items-start mb-1",children:[(0,s.jsx)("span",{className:"text-xs font-medium text-zinc-800 dark:text-zinc-200",children:e.activityName}),(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500",children:e.createdAt})]}),(0,s.jsx)("p",{className:"text-xs text-zinc-600 dark:text-zinc-300 line-clamp-2",children:e.details})]},e.id))})}),(0,s.jsx)(Y,{title:"진로활동",children:0===eS.length?(0,s.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-4 text-xs",children:"기록 없음"}):(0,s.jsx)("div",{className:"flex flex-col",children:eS.slice(0,3).map(e=>(0,s.jsxs)("div",{className:"py-3 border-b border-zinc-100 dark:border-white/[0.06] last:border-b-0",children:[(0,s.jsxs)("div",{className:"flex justify-between items-start mb-1",children:[(0,s.jsx)("span",{className:"text-xs font-medium text-zinc-800 dark:text-zinc-200",children:e.activityName}),(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500",children:e.createdAt})]}),(0,s.jsx)("p",{className:"text-xs text-zinc-600 dark:text-zinc-300 line-clamp-2",children:e.details})]},e.id))})})]}),"admission"===eg&&(0,s.jsx)(A,{studentId:eN.id,api:y,studentGrade:eN.grade||0,isGuest:R,mobile:!0})]})]},"student-detail-".concat(eN.id)):null:(0,s.jsx)("div",{className:"flex-1 flex flex-col h-full overflow-hidden",children:(0,s.jsx)(C.Z,{students:eE,selectedStudentId:x,onSelectStudent:e=>{eb(!1),m(e),ev("counseling"),em("")},onOpenDashboard:()=>{D.MU.tap(),ep(!0)},totalStudentsCount:o.length,searchQuery:eu,onSearchChange:em,isAdmin:M,isLoading:ei,error:J,onRetry:ee})},"student-list")});return(0,s.jsxs)("div",{ref:ey,className:(0,F.cn)("flex flex-col h-full relative bg-[#FBFBF9] dark:bg-zinc-950",eM?"overflow-y-auto scroll-smooth":"overflow-hidden"),children:[e_,!eM&&!eh&&(0,s.jsx)("div",{className:"fixed mobile-floating-bar left-0 right-0 px-6 flex justify-center z-40 pointer-events-none",children:(0,s.jsx)("div",{className:"w-full relative pointer-events-auto group",children:(0,s.jsxs)("div",{className:(0,F.cn)("relative flex items-center h-[48px] px-4","bg-white/70 dark:bg-zinc-900/80 backdrop-blur-xl border border-zinc-200/80 dark:border-white/10 rounded-full","shadow-[0_4px_12px_rgba(0,0,0,0.03)] dark:shadow-none","transition duration-200 group-focus-within:border-zinc-300 dark:group-focus-within:border-white/20 group-focus-within:shadow-[0_4px_16px_rgba(0,0,0,0.06)]"),children:[(0,s.jsx)("div",{className:"shrink-0 text-zinc-400 dark:text-zinc-500",children:(0,s.jsx)(u.Z,{size:20,strokeWidth:1.5})}),(0,s.jsx)("input",{type:"text",placeholder:"학생 이름 검색...",value:eu,onChange:e=>{em(e.target.value),x&&m(""),eh&&ep(!1)},onFocus:()=>{x&&m(""),eh&&ep(!1)},className:(0,F.cn)("w-full h-full bg-transparent border-none outline-none","pl-3 pr-1 text-[16px] font-normal","text-zinc-900 dark:text-zinc-100 placeholder:text-zinc-400 dark:placeholder:text-zinc-500")}),eu&&(0,s.jsx)("button",{"aria-label":"검색어 지우기",onClick:()=>em(""),className:"p-1.5 -mr-1 text-zinc-400 active:text-zinc-600 dark:active:text-zinc-200 active:scale-95 transition",children:(0,s.jsx)(T.Z,{size:18,strokeWidth:1.75})})]})})})]})}function Y(e){let{title:t,badge:n,action:a,children:r}=e;return(0,s.jsxs)("section",{className:"bg-white dark:bg-[#1C1C1E]",children:[(0,s.jsxs)("div",{className:"px-5 pt-3.5 pb-1 flex items-center justify-between",children:[(0,s.jsx)("h3",{className:"text-sm font-semibold text-zinc-800 dark:text-zinc-200",children:t}),n&&(0,s.jsx)("span",{className:"text-[11px] text-zinc-400 dark:text-zinc-500",children:n}),a]}),(0,s.jsx)("div",{className:"px-5 pb-3.5 pt-1",children:r})]})}function q(e){let{active:t,onClick:n,icon:a,label:r}=e;return(0,s.jsxs)(L.E.button,{type:"button",whileTap:{scale:.95},transition:{type:"spring",stiffness:500,damping:30},onClick:n,className:(0,Z.Fk)(t,"gap-1.5 whitespace-nowrap"),children:[a&&(0,s.jsx)("span",{className:"w-4 h-4 flex items-center justify-center shrink-0 leading-none",children:a}),(0,s.jsx)("span",{className:"leading-none",children:r})]})}var K=n(72183);n(83079);var H=(0,n(12119).$)("a26fafcc31cad7e7e7bee3682a80fa37074e8806"),$=n(58346),U=n(4908),V=n(83008),Q=n(28691),J=n(45444),ee=n(53834),et=n(61858),en=n(92609),es=n(9244),ea=n(68904),er=n(57474),ei=n(16011),el=n(73704),ec=n(51817),ed=n(91455);function eo(e){let{isOpen:t,onClose:n,onSave:a,initialCategory:r="autonomous",studentName:i}=e,[l,d]=(0,c.useState)(r),[o,x]=(0,c.useState)(""),[u,m]=(0,c.useState)(""),[h,p]=(0,c.useState)(!1),f=(0,c.useId)(),b=(0,c.useCallback)(()=>{x(""),m(""),n()},[n]);(0,c.useEffect)(()=>
1{if(!t)return;let e=e=>{"Escape"===e.key&&b()},n=document.body.style.overflow;return document.body.style.overflow="hidden",window.addEventListener("keydown",e),()=>{document.body.style.overflow=n,window.removeEventListener("keydown",e)}},[t,b]);let g=async()=>{if(o.trim()&&!h){p(!0);try{await a({category:l,activityName:o.trim(),details:u.trim()})&&(x(""),m(""),n())}finally{p(!1)}}},j=(0,J.X)(g,!!o.trim()&&!h);return(t&&l!==r&&""===o&&""===u&&d(r),t)?(0,s.jsxs)("div",{className:"modal-viewport z-[110] flex items-center justify-center p-4",children:[(0,s.jsx)("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200",onClick:b}),(0,s.jsxs)("div",{className:"relative w-full max-w-lg bg-white dark:bg-[#1A1A1A] rounded-2xl border border-zinc-200 dark:border-white/10 shadow-2xl animate-in zoom-in-95 duration-200",onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("div",{className:"flex items-center justify-between p-4 pb-0",children:[(0,s.jsxs)("h3",{className:"text-lg font-bold text-zinc-900 dark:text-white",children:["autonomous"===l?"자율활동":"진로활동"," 추가",i&&(0,s.jsxs)("span",{className:"text-sm font-normal text-zinc-500 ml-2",children:["(",i,")"]})]}),(0,s.jsx)("button",{"aria-label":"닫기",onClick:b,className:"p-1.5 text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors",children:(0,s.jsx)(v.Z,{size:20})})]}),(0,s.jsxs)("div",{className:"p-4 space-y-5",children:[(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("span",{className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"활동 유형"}),(0,s.jsx)(ed.s,{value:l,onChange:d,"aria-label":"활동 유형",className:"w-fit gap-1 p-1 rounded-xl bg-zinc-100 dark:bg-black/30",itemClassName:"px-6 py-1.5 rounded-lg text-sm font-medium",activeItemClassName:"text-zinc-900 dark:text-white",inactiveItemClassName:"text-zinc-500 dark:text-zinc-400 hover:text-zinc-800 dark:hover:text-zinc-200",indicatorClassName:"bg-white dark:bg-[#2C2C2C] rounded-lg shadow-sm",options:[{key:"autonomous",label:"자율"},{key:"career",label:"진로"}]})]}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("label",{htmlFor:"".concat(f,"-name"),className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"활동 제목"}),(0,s.jsx)("input",{id:"".concat(f,"-name"),type:"text",value:o,onChange:e=>x(e.target.value),placeholder:"활동 제목을 입력하세요",className:"w-full px-3 py-3 bg-zinc-50 dark:bg-[#0D0D0D] border border-zinc-200 dark:border-white/10 rounded-lg text-[16px] md:text-[15px] text-zinc-900 dark:text-white placeholder-zinc-400 dark:placeholder-[#444] focus:outline-none focus:border-toss-blue focus:ring-2 focus:ring-toss-blue/20 transition-colors",autoFocus:!0})]}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("label",{htmlFor:"".concat(f,"-details"),className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"활동 내용"}),(0,s.jsx)("textarea",{id:"".concat(f,"-details"),value:u,onChange:e=>m(e.target.value),onKeyDown:j,placeholder:"활동 내용을 입력하세요",rows:6,className:"w-full px-3 py-3 bg-zinc-50 dark:bg-[#0D0D0D] border border-zinc-200 dark:border-white/10 rounded-lg text-[16px] md:text-sm text-zinc-900 dark:text-white placeholder-zinc-400 dark:placeholder-[#444] resize-none focus:outline-none focus:border-toss-blue focus:ring-2 focus:ring-toss-blue/20 transition-colors"})]})]}),(0,s.jsxs)("div",{className:"flex items-center justify-end gap-2 p-4",children:[(0,s.jsx)("button",{onClick:b,className:"px-4 py-2 text-zinc-500 hover:text-zinc-900 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-white/10 rounded-lg transition-colors text-sm font-medium",children:"취소"}),(0,s.jsx)("button",{onClick:g,disabled:!o.trim()||h,className:(0,F.cn)("brand-primary-btn px-4 py-2 rounded-lg text-sm font-medium transition-colors min-w-[60px] flex items-center justify-center",o.trim()&&!h?"bg-toss-blue hover:bg-[#1B64DA] text-white":"bg-zinc-200 dark:bg-white/10 text-zinc-400 dark:text-zinc-500 cursor-not-allowed"),children:h?(0,s.jsx)(ec.Z,{size:16,className:"animate-spin"}):"저장"})]})]})]}):null}var ex=n(34137);function eu(e){let{isOpen:t,onClose:n,activity:a}=e;return((0,ex.j)(n,t&&!!a),t&&a)?(0,s.jsxs)("div",{className:"modal-viewport z-[110] flex items-center justify-center p-4",children:[(0,s.jsx)("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200",onClick:n}),(0,s.jsxs)("div",{className:"relative w-full max-w-lg bg-white dark:bg-[#1A1A1A] rounded-2xl shadow-2xl animate-in zoom-in-95 duration-200 flex flex-col max-h-full",onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("div",{className:"flex items-center justify-between p-4 shrink-0",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)("span",{className:"px-2.5 py-1 rounded-md text-xs font-bold",style:{backgroundColor:"autonomous"===a.category?"#ede9fe":"#ccfbf1",color:"autonomous"===a.category?"#6d28d9":"#0f766e"},children:"autonomous"===a.category?"자율":"진로"}),(0,s.jsx)("h3",{className:"text-base font-bold text-zinc-900 dark:text-white line-clamp-1",children:a.activityName})]}),(0,s.jsx)("button",{"aria-label":"닫기",onClick:n,className:"p-1.5 text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors shrink-0",children:(0,s.jsx)(v.Z,{size:20})})]}),(0,s.jsx)("div",{className:"px-6 py-2 overflow-y-auto custom-scrollbar flex-1",children:(0,s.jsx)("p",{className:"text-sm text-zinc-700 dark:text-zinc-300 whitespace-pre-wrap leading-relaxed",children:a.details})}),(0,s.jsx)("div",{className:"flex justify-end px-6 py-4 shrink-0",children:(0,s.jsxs)("p",{className:"text-xs text-zinc-400 font-medium",children:["등록일: ",a.createdAt]})})]})]}):null}var em=n(27526),eh=n(54696),ep=n(96214),ef=n(4147),eb=n(54392);let eg=(0,d.default)(()=>Promise.all([n.e(1042),n.e(2957),n.e(7017),n.e(7444),n.e(2840),n.e(5851)]).then(n.bind(n,22840)),{loadableGenerated:{webpack:()=>[22840]},ssr:!1,loading:()=>(0,s.jsx)(a.ContentLoadingState,{variant:"grades",label:"성적 정보를 불러오는 중…"})}),ev=(0,d.default)(()=>Promise.all([n.e(1042),n.e(2957),n.e(7017),n.e(7444),n.e(1405),n.e(1655)]).then(n.bind(n,81405)),{loadableGenerated:{webpack:()=>[81405]},ssr:!1,loading:()=>(0,s.jsx)(a.ContentLoadingState,{variant:"grades",label:"모의고사 정보를 불러오는 중…"})}),ej=(0,d.default)(()=>Promise.all([n.e(1109),n.e(5398),n.e(9620)]).then(n.bind(n,39620)),{loadableGenerated:{webpack:()=>[39620]},ssr:!1}),ek=(0,d.default)(()=>Promise.all([n.e(5398),n.e(5268)]).then(n.bind(n,45268)),{loadableGenerated:{webpack:()=>[45268]},ssr:!1});function ez(e){var t,d,w,N,C,R,D,L,G,I,Z,T,B,P,W,Y,q,ec,ed,ex,ez,eC,eS;let{initialStudentId:eE,initialTab:eM,onStudentIdConsumed:eR,embeddedStudent:e_,onEmbeddedBack:eA,onEmbeddedRefresh:eD,sidebarHeader:eL,homeroomClass:eG}=e,{data:eI,status:eF}=(0,em.kP)(),eZ=(0,eh.Dv)(),{students:eT,updateStudent:eO,error:eB,isLoaded:eP,isLoading:eW,reloadStudents:eX}=(0,U.AF)(),eY=(0,c.useCallback)(async(e,t)=>{let n=await eO(e,t);return n&&await (null==eD?void 0:eD()),n},[eO,eD]),eq=(0,c.useCallback)(async()=>{await eX(),await (null==eD?void 0:eD())},[eX,eD]),[eK]=(0,c.useState)(()=>
1(0,r.yR)()?"":"sub-sidebar-enter"),eH=(0,E.XC)(),e$=(0,l.N)(),{showToast:eU}=(0,i.pm)(),[eV,eQ]=(0,c.useState)([]),[eJ,e0]=(0,c.useState)(null);(0,c.useEffect)(()=>{eZ&&(async()=>{let e=await (0,ep.getGuestData)();eQ(e.students),e0(e)})()},[eZ]);let e1=(0,c.useMemo)(()=>e_?[e_]:eZ?eV:eT,[e_,eZ,eV,eT]),e2=(0,c.useMemo)(()=>{var e;return null!=eI&&!!eI.user&&["OWNER","SCHOOL_ADMIN","GRADE_ADMIN","ADMIN"].includes((null===(e=eI.user.role)||void 0===e?void 0:e.toUpperCase())||"")},[eI]),e5=(0,c.useMemo)(()=>{var e;return null!=eI&&!!eI.user&&["OWNER","SCHOOL_ADMIN","GRADE_ADMIN","TEACHER","ADMIN"].includes((null===(e=eI.user.role)||void 0===e?void 0:e.toUpperCase())||"")},[eI]),e4=(0,c.useMemo)(()=>[...e1].sort((e,t)=>e.grade!==t.grade?(e.grade||0)-(t.grade||0):e.classNum!==t.classNum?(e.classNum||0)-(t.classNum||0):e.number-t.number),[e1]),e3=(0,c.useMemo)(()=>eZ||e_?e4:e4.filter(e=>"담임 학급"===e.homeClassId&&(!eG||e.grade===eG.grade&&e.classNum===eG.classNum)),[e4,eZ,e_,eG]),[e6,e9]=(0,c.useState)(null!==(Y=null==e_?void 0:e_.id)&&void 0!==Y?Y:null),[e8,e7]=(0,c.useState)(!e_);(0,c.useEffect)(()=>{eE&&e3.length>0&&e3.some(e=>e.id===eE)&&(e9(eE),e7(!1),null==eR||eR())},[eE,e3,eR]);let[te,tt]=(0,c.useState)(""),tn=(0,c.useRef)(e6);tn.current=e6;let ts=(0,c.useMemo)(()=>e3.find(e=>e.id===e6),[e3,e6]),[ta,tr]=(0,c.useState)([]),[ti,tl]=(0,c.useState)([]),[tc,td]=(0,c.useState)([]),[to,tx]=(0,c.useState)([]),[tu,tm]=(0,c.useState)([]),[th,tp]=(0,c.useState)(!1),[tf,tb]=(0,c.useState)([]),[tg,tv]=(0,c.useState)([]),[tj,tk]=(0,c.useState)(0),tz=(0,c.useMemo)(()=>(0,_.u)(e6||"",eH),[e6,eH,null==ts?void 0:ts.grade,null==ts?void 0:ts.homeClassId,null==ts?void 0:ts.schoolId,tj]),ty=(0,c.useRef)(tz);ty.current=tz;let tw=(0,c.useRef)(0),[tN,tC]=(0,c.useState)(null),tS=(null==tN?void 0:tN.scope)===tz,tE=!!e6&&(!tS||(null==tN?void 0:tN.status)==="loading"),tM=tS&&(null==tN?void 0:tN.status)==="error",tR=(0,c.useCallback)(()=>tk(e=>e+1),[]),[t_,tA]=(0,c.useState)([]),[tD,tL]=(0,c.useState)(!1),tG=(0,o.NL)(),tI=["국어","수학","영어","사회(역사/도덕 포함)","과학"],tF=(0,c.useMemo)(()=>e3.map(e=>e.id).sort().join(","),[e3]),tZ=(0,x.a)({queryKey:["smv-dashboard-grades",eZ,tF],enabled:!e_&&(eZ?!!eJ:e3.length>0),staleTime:6e4,queryFn:async()=>{let e={},t={},n={},s={};if(eZ&&eJ){let a=eJ.gradeRecords||[],r=eJ.mockExamRecords||[];return e3.forEach(n=>{let s=a.filter(e=>e.studentId===n.id).filter(e=>null!==e.gradeLevel&&void 0!==e.gradeLevel&&tI.includes(e.subjectCategory)),r=s.length>0?s.reduce((e,t)=>e+(t.gradeLevel||0),0)/s.length:null;e[n.id]=r,t[n.id]=s}),e3.forEach(e=>{let t=r.filter(t=>t.studentId===e.id);if(t.length>0){t.sort((e,t)=>t.year-e.year||t.month-e.month);let a=t[0].year,r=t[0].month,i=t.filter(e=>e.year===a&&e.month===r);s[e.id]=i;let l=0,c=0;for(let e of["국어","수학","영어","탐구"]){let t=i.filter(t=>t.subject.includes(e));t.length>0&&(l+=t.reduce((e,t)=>e+(t.gradeLevel||0),0)/t.length,c++)}n[e.id]=c>0?l/c:null}else n[e.id]=null}),{averages:e,gradeRecordsByStudent:t,mockAverages:n,latestExamsByStudent:s}}let a=e3.map(e=>e.id),[r,i]=await Promise.all([(0,V.X)("getGradeRecordsByStudents",{studentIds:a},eH),(0,ei.W)(a)]);if(r.success&&r.data){let n=r.data;e3.forEach(s=>{let a=n.filter(e=>e.studentId===s.id).filter(e=>null!==e.gradeLevel&&void 0!==e.gradeLevel&&tI.includes(e.subjectCategory)),r=a.length>0?a.reduce((e,t)=>e+(t.gradeLevel||0),0)/a.length:null;e[s.id]=r,t[s.id]=a})}if(i.success&&i.data){let e=i.data;e3.forEach(t=>{let a=e.filter(e=>e.studentId===t.id);if(a.length>0){a.sort((e,t)=>t.year-e.year||t.month-e.month);let e=a[0].year,r=a[0].month,i=a.filter(t=>t.year===e&&t.month===r);s[t.id]=i;let l=0,c=0;for(let e of["국어","수학","영어","탐구"]){let t=i.filter(t=>t.subject.includes(e));t.length>0&&(l+=t.reduce((e,t)=>e+(t.gradeLevel||0),0)/t.length,c++)}n[t.id]=c>0?l/c:null}else n[t.id]=null})}return{averages:e,gradeRecordsByStudent:t,mockAverages:n,latestExamsByStudent:s}}}),tT=(0,x.a)({queryKey:["smv-student-roles",eZ,!!(null==eJ?void 0:eJ.roleAssignments)],enabled:!eZ||!!(null==eJ?void 0:eJ.roleAssignments),staleTime:6e4,queryFn:async()=>
1{if(eZ&&(null==eJ?void 0:eJ.roleAssignments)){let e=eJ.roleAssignments||[],t=[],n={};return Array.from(new Set(e.map(e=>e.role))).forEach((e,n)=>{t.push({id:"role-".concat(n),name:e})}),e.forEach(e=>{n[e.studentId]||(n[e.studentId]={});let s=t.find(t=>t.name===e.role);s&&(n[e.studentId][s.id]=e.role)}),{columns:t,assignments:n}}let e=(await (0,V.X)("getTimetable",{type:"student-roles"},eH)).data;return{columns:(null==e?void 0:e.columns)||[],assignments:(null==e?void 0:e.assignments)||{}}}}),tO=null!==(q=null===(t=tZ.data)||void 0===t?void 0:t.averages)&&void 0!==q?q:{},tB=null!==(ec=null===(d=tZ.data)||void 0===d?void 0:d.gradeRecordsByStudent)&&void 0!==ec?ec:{},tP=null!==(ed=null===(w=tZ.data)||void 0===w?void 0:w.mockAverages)&&void 0!==ed?ed:{},tW=null!==(ex=null===(N=tZ.data)||void 0===N?void 0:N.latestExamsByStudent)&&void 0!==ex?ex:{},tX=null!==(ez=tT.data)&&void 0!==ez?ez:{columns:[],assignments:{}};(0,c.useEffect)(()=>{tj>0&&tG.invalidateQueries({queryKey:["smv-dashboard-grades"]})},[tj,tG]);let[tY,tq]=(0,c.useState)(null),[tK,tH]=(0,c.useState)(!1),[t$,tU]=(0,c.useState)(""),[tV,tQ]=(0,c.useState)(!1),[tJ,t0]=(0,c.useState)(!1),[t1,t2]=(0,c.useState)("상담"),[t5,t4]=(0,c.useState)(""),[t3,t6]=(0,c.useState)(!1),[t9,t8]=(0,c.useState)(!1),[t7,ne]=(0,c.useState)("autonomous"),[nt,nn]=(0,c.useState)(null);(0,c.useEffect)(()=>{tq(null),tH(!1),tU(""),nn(null),t8(!1),nY(null),t0(!1),t2("상담"),t4("")},[e6]),(0,c.useEffect)(()=>{if(e6&&!eZ){let e="counseling-draft:".concat(e6),t=localStorage.getItem(e);t&&(t4(t),t0(!0))}},[e6,eZ]);let[ns,na]=(0,c.useState)(""),nr=(0,c.useRef)(""),ni=(0,c.useRef)(eY),nl=(0,c.useRef)(e3);(0,c.useEffect)(()=>{ni.current=eY},[eY]),(0,c.useEffect)(()=>{nl.current=e3},[e3]),(0,c.useEffect)(()=>{if(e6){let e=e3.find(e=>e.id===e6);if(!e)return;let t=(null==e?void 0:e.memo)||"";ns!==t&&nr.current!==t&&(na(t),nr.current=t)}else""!==ns&&(na(""),nr.current="")},[e6,eZ,e3]),(0,c.useEffect)(()=>{if(e6&&!eZ){let e=setTimeout(async()=>{let e=nl.current.find(e=>e.id===e6);ns!==((null==e?void 0:e.memo)||"")&&ns!==nr.current&&await ni.current(e6,{memo:ns})&&(nr.current=ns)},500);return()=>clearTimeout(e)}},[ns,e6,eZ]);let nc=(0,c.useMemo)(()=>e3.filter(e=>{var t,n,s,a;return e.name.includes(te)||String(e.number).includes(te)||e2&&te.replace(/[^0-9]/g,"").length>0&&"".concat(null!==(t=e.grade)&&void 0!==t?t:"?").concat(null!==(n=e.classNum)&&void 0!==n?n:"?").concat(e.number).includes(te.replace(/[^0-9]/g,""))||e2&&"".concat(null!==(s=e.grade)&&void 0!==s?s:"?","학년 ").concat(null!==(a=e.classNum)&&void 0!==a?a:"?","반 ").concat(e.number,"번").includes(te)}),[e3,te,e2]),[nd,no]=(0,c.useState)("basic");(0,c.useEffect)(()=>{eE&&eM&&["basic","grade","mock","record","admission"].includes(eM)&&no(eM)},[eE,eM]);let[nx,nu]=(0,c.useState)(null),[nm,nh]=(0,c.useState)(!1),[np,nf]=(0,c.useState)(!1);(0,c.useRef)(null);let nb=(0,c.useRef)(null),{openSettings:ng}=(0,M.Y)();(0,c.useEffect)(()=>{if(e6){let e=!1;return(async()=>{nh(!0);try{if(eZ&&eJ){let t=eJ.gradeRecords.filter(e=>e.studentId===e6).map(e=>({...e,year:e.year-2024,subjectCategory:e.subjectCategory||e.subjectName})),n={};t.forEach(e=>{let t="".concat(e.year,"-").concat(e.semester);n[t]||(n[t]=[]),n[t].push(e)});let s=Object.entries(n).map(e=>{let[t,n]=e,[s,a]=t.split("-").map(Number),r=n.reduce((e,t)=>e+(t.gradeLevel||t.gradeRank||0),0)/n.length;return{year:s,semester:a,averageGrade:r.toFixed(2),records:n.map(e=>{var t,n,s,a,r,i,l;return{id:e.id,subject:e.subjectName,subject_type:e.subjectCategory||e.subjectName,score:e.score,grade_level:null!==(n=null!==(t=e.gradeLevel)&&void 0!==t?t:e.gradeRank)&&void 0!==n?n:null,achievement:null!==(s=e.achievement)&&void 0!==s?s:null,rank:null!==(a=e.rank)&&void 0!==a?a:null,total_students:null!==(r=e.total_students)&&void 0!==r?r:null,percentile:null!==(i=e.percentile)&&void 0!==i?i:null,credits:null!==(l=e.credits)&&void 0!==l?l:null,exam_type:"final"}})}}).sort((e,t)=>e.year-t.year||e.semester-t.semester);if(e)return;nu({analysis:s})}else{let t=await H(e6);if(e)return;t.success?nu(t.data):nu(null)}}catch(t){console.error("Failed to fetch grade analysis",t),e||nu(null)}finally{e||nh(!1)}})(),()=>{e=!0}}},[e6,eZ,eJ,tj]),(0,c.useEffect)(()=>
1{if(e6){let e=!1;return(async()=>{tL(!0);try{if(eZ&&eJ&&eJ.mockExamRecords){let t=eJ.mockExamRecords.filter(e=>e.studentId===e6);if(t.sort((e,t)=>t.year-e.year||t.month-e.month),e)return;tA(t)}else{let t=await (0,ei.getStudentMockExams)(e6);if(e)return;t.success&&t.data?tA(t.data):tA([])}}catch(t){console.error("Error fetching mock exams:",t),e||tA([])}finally{e||tL(!1)}})(),()=>{e=!0}}},[e6,eZ,eJ,tj]);let nv=(0,c.useCallback)(async()=>{if(eZ){let e=await Promise.resolve().then(n.bind(n,96214));tb(await e.getGuestCleaningZones());return}let e=await (0,V.X)("getCleaningZones",{},eH);e.success&&e.data&&tb(e.data)},[eH,eZ]);(0,c.useEffect)(()=>{nv()},[nv]);let nj=(0,c.useCallback)(async()=>{let e=++tw.current;if(!e6){tr([]),tl([]),td([]),tx([]),tv([]),tC(null);return}if(tC({scope:tz,status:"loading"}),tr([]),!eZ||eJ){try{if(eZ&&eJ){tr(eJ.attendanceRecords.filter(e=>e.studentId===e6).sort((e,t)=>t.date.localeCompare(e.date)));let t=eJ.counselingRecords.filter(e=>e.studentId===e6);t.sort((e,t)=>new Date(t.date).getTime()-new Date(e.date).getTime()),tl(t);let n=(await (0,Q.W)(()=>eb.iT())).filter(e=>e.studentId===e6);if(!(tw.current===e&&tn.current===e6&&ty.current===tz))return;td(n),tv(eJ.gradeRecords.filter(e=>e.studentId===e6)),tC({scope:tz,status:"success"});return}let s=await (0,Q.W)(()=>(0,V.X)("getStudentRecords",{studentId:e6},eH));if(!(tw.current===e&&tn.current===e6&&ty.current===tz))return;if(!s.success||!s.data)throw Error("학생 기록을 불러오지 못했습니다.");if(s.success&&s.data){var t,n;let e=s.data;null===(t=e.attendance)||void 0===t||t.sort((e,t)=>new Date(t.date).getTime()-new Date(e.date).getTime()),null===(n=e.counseling)||void 0===n||n.sort((e,t)=>new Date(t.date).getTime()-new Date(e.date).getTime()),tr(e.attendance||[]),tl(e.counseling||[]),td(e.activities||[]),tx(e.seteuk||[]),tm(e.surveys||[]),tC({scope:tz,status:"success"})}}catch(t){if(!(tw.current===e&&tn.current===e6&&ty.current===tz))return;tr([]),tC({scope:tz,status:"error"})}try{let t=await tz.loadFullGradeRecords();if(!(tw.current===e&&tn.current===e6&&ty.current===tz))return;tv(t)}catch(t){tw.current===e&&tn.current===e6&&ty.current===tz&&tv([])}}},[e6,eZ,eJ,eH,tz]);(0,c.useEffect)(()=>(nj(),()=>{tw.current+=1}),[nj]),(0,c.useEffect)(()=>{function e(){"visible"===document.visibilityState&&(tk(e=>e+1),nv(),eq(),tG.invalidateQueries({queryKey:["smv-dashboard-grades"]}),tG.invalidateQueries({queryKey:["smv-student-roles"]}))}return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[nv,tG,eq]);let nk=tf.find(e=>e.studentIds.includes(e6||"")),nz=!eZ&&ts&&ts.userId!==(null==eI?void 0:null===(C=eI.user)||void 0===C?void 0:C.id)&&!e2,ny=!eZ&&ts&&ts.userId!==(null==eI?void 0:null===(R=eI.user)||void 0===R?void 0:R.id),nw=!eZ&&ts&&ts.userId!==(null==eI?void 0:null===(D=eI.user)||void 0===D?void 0:D.id),nN=tc.filter(e=>"autonomous"===e.category),nC=tc.filter(e=>"career"===e.category),nS=e=>{if(!e.endDate||e.date===e.endDate)return 1;let t=new Date(e.date+"T00:00:00"),n=new Date(e.endDate+"T00:00:00"),s=0,a=new Date(t);for(;a<=n;){let e=a.getDay();0!==e&&6!==e&&s++,a.setDate(a.getDate()+1)}return s},nE={absent:ta.filter(e=>"결석"===e.type).reduce((e,t)=>e+nS(t),0),late:ta.filter(e=>"지각"===e.type).reduce((e,t)=>e+nS(t),0),early:ta.filter(e=>"조퇴"===e.type).reduce((e,t)=>e+nS(t),0),leave:ta.filter(e=>"결과"===e.type).reduce((e,t)=>e+nS(t),0)},nM=Object.entries(tg.reduce((e,t)=>{let n="".concat(t.year,"-").concat(t.semester);return e[n]||(e[n]=[]),e[n].push(t),e},{})).map(e=>{let[t,n]=e,s=n.filter(e=>null!==e.gradeLevel&&void 0!==e.gradeLevel&&tI.includes(e.subjectCategory)),a=s.length>0?s.reduce((e,t)=>e+(t.gradeLevel||0),0)/s.length:null,[r,i]=t.split("-").map(Number);return{year:r,semester:i,average:a,count:n.length}}).sort((e,t)=>e.year-t.year||e.semester-t.semester),nR=nM.length>0?nM.filter(e=>null!==e.average).reduce((e,t)=>e+(t.average||0),0)/nM.filter(e=>null!==e.average).length:null,[n_,nA]=(0,c.useState)([]),[nD,nL]=(0,c.useState)(!1);(0,c.useEffect)(()=>{ts&&nA((0,O.k_)(ts.careerCategory))},[ts]),(0,c.useEffect)(()=>{nL(!1)},[e6]);let nG=e=>{let t;if(!ny){if(n_.includes(e))t=n_.filter(t=>t!==e);else if((0,O.Wn)(e))t=[e];else{let n=n_.filter(e=>!(0,O.Wn)(e));if(n.length>=O.Cd)return;t=[...n,e]}nI(t)}},nI=async e=>{if(!e6||ny)return;let t=(0,O.H6)(e);if(nA((0,O.k_)(t)),eZ){let e=(await (0,ep.getGuestData)()).students.map(e=>e.id===e6?{...e,careerCategory:t}:e);await (0,ep.saveGuestData)("students",e),eQ(e);return}try{await eY(e6,{careerCategory:t})||(nA(n_),eU("진로 설정 중 오류가 발생했습니다.","error"))}catch(e){console.error("Failed to update career category:",e),nA(n_)}},nF=n_.length>0?n_.map(e=>{var t;return null===(t=O.FT.find(t=>
1t.id===e))||void 0===t?void 0:t.label}).filter(Boolean).join(" \xb7 "):"-",nZ=async()=>{if(e6&&t5.trim()&&!ny){if(t6(!0),eZ){let e={id:(0,ef.Z)(),studentId:e6,studentName:(null==ts?void 0:ts.name)||"",date:(0,F.RJ)(),category:t1,content:t5.trim(),createdAt:new Date().toISOString()},t=[...(await (0,ep.getGuestData)()).counselingRecords,e];await (0,ep.saveGuestData)("counselingRecords",t),e0(e=>({...e,counselingRecords:t})),t4(""),t2("상담"),t0(!1),t6(!1);return}try{(await (0,V.X)("upsertCounselingRecord",{studentId:e6,date:(0,F.RJ)(),category:t1,content:t5.trim()},eH)).success&&(localStorage.removeItem("counseling-draft:".concat(e6)),await nj(),t4(""),t2("상담"),t0(!1))}catch(e){console.error("Failed to save counseling record:",e)}finally{t6(!1)}}},nT=(0,J.X)(nZ,t5.trim().length>0&&!t3),nO=e=>{ny||(ne(e),t8(!0))},nB=async e=>{if(!e6||ny)return!1;try{if(eZ){let t={id:(0,ef.Z)(),studentId:e6,category:e.category,activityName:e.activityName,details:e.details,createdAt:new Date().toISOString()};return await eb.LI(t),await nj(),!0}if((await (0,V.X)("upsertActivityRecord",{studentId:e6,category:e.category,activityName:e.activityName,details:e.details},eH)).success)return await nj(),!0;return eU("활동 저장 중 오류가 발생했습니다.","error"),!1}catch(e){return console.error("Failed to save activity:",e),eU("활동 저장 중 오류가 발생했습니다.","error"),!1}},nP=async()=>{tY&&t$.trim()&&!tV&&(tQ(!0),(await (0,V.X)("upsertCounselingRecord",{studentId:tY.studentId,id:tY.id,date:tY.date,category:tY.category,content:t$.trim()},eH)).success?(tl(e=>e.map(e=>e.id===tY.id?{...e,content:t$.trim()}:e)),tq(e=>e?{...e,content:t$.trim()}:null),tH(!1)):eU("상담 일지 저장 중 오류가 발생했습니다.","error"),tQ(!1))},nW=async(e,t)=>{if(e.stopPropagation(),await e$({title:"상담 일지를 삭제할까요?",description:"삭제한 상담 기록은 되돌릴 수 없습니다."})){if(eZ){let e=(await (0,ep.getGuestData)()).counselingRecords.filter(e=>e.id!==t);await (0,ep.saveGuestData)("counselingRecords",e),e0(t=>({...t,counselingRecords:e})),tl(e=>e.filter(e=>e.id!==t));return}try{(await (0,V.X)("deleteCounselingRecord",{id:t},eH)).success?tl(e=>e.filter(e=>e.id!==t)):eU("상담 일지 삭제 중 오류가 발생했습니다.","error")}catch(e){console.error("Failed to delete counseling record:",e),eU("상담 일지 삭제 중 오류가 발생했습니다.","error")}}},[nX,nY]=(0,c.useState)(null),nq=(0,c.useMemo)(()=>nx&&nx.analysis?nx.analysis.flatMap(e=>e.records.map(t=>({id:t.id,year:e.year,semester:e.semester,subject:t.subject,subject_type:t.subject_type,score:t.score,subject_average:t.subject_average,standard_deviation:t.standard_deviation,grade_level:t.grade_level||null,achievement:t.achievement,rank:t.rank,percentile:t.percentile||null,total_students:t.total_students,credits:t.credits,exam_type:t.exam_type||e.examType||"final",is_temporary:t.is_temporary||!1,distA:t.distA,distB:t.distB,distC:t.distC,distD:t.distD,distE:t.distE}))):[],[nx]),nK=(0,c.useMemo)(()=>nx&&nx.analysis?{semester_averages:nx.analysis.map(e=>({year:e.year,semester:e.semester,average_grade:parseFloat(e.averageGrade),subject_count:e.records.length,has_temporary_grades:!1})),subject_latest:[]}:{semester_averages:[],subject_latest:[]},[nx]),nH=ts?(0,et.Bz)(ts.grade||0):2025,n$=(0,et.RQ)(nH),nU=(0,et.f6)(n$),[nV,nQ]=(0,c.useState)(!1),[nJ,n0]=(0,c.useState)(!1),n1=!(0,es.cz)()&&(nq.length>0||t_.length>0),n2=(0,c.useMemo)(()=>nV&&ts?(0,en._)({student:{name:ts.name,grade:ts.grade,classNum:ts.classNum,number:ts.number},grades:nq,mockExams:t_,naesinScale:"5-GRADE"===n$?5:9}):null,[nV,ts,nq,t_,n$]);return((0,c.useEffect)(()=>{nQ(!1)},[e6]),"loading"!==eF||(0,eh.YY)())?(0,s.jsxs)("div",{className:"".concat(e_?"relative":""," h-full flex flex-col md:flex-row bg-zinc-50 dark:bg-[#0c0c0e] text-sm font-sans"),children:[(0,s.jsxs)("div",{className:"md:hidden w-full h-full absolute inset-0 z-50 bg-[#FBFBF9] dark:bg-zinc-950",children:[eL&&(0,s.jsx)("div",{className:"px-3 py-2",children:eL}),(0,s.jsx)(X,{students:nc,selectedStudentId:e6,onSelectStudent:e=>{if(!e&&e_){null==eA||eA();return}e9(e)},attendanceRecords:tS?ta:[],isAttendanceLoading:tE,attendanceError:tM,onRetryAttendance:nj,counselingRecords:ti,activityRecords:tc,seteukRecords:to,gradeRecords:tg,admissionApi:tz,mockExams:t_,isAdmin:e2,isGuest:eZ,grades:nq,statistics:nK,gradingSystem:n$,chartConfig:nU,studentMemo:ns,surveyRecords:tu,selectedCareerCategories:n_,onToggleCareerCategory:nG,isCareerReadOnly:!!ny,rolesData:tX,studentError:eB,onRetryStudents:eq,studentGradeAverages:tO,studentGradeRecords:tB,studentMockAverages:tP,latestMockExams:tW,isStudentsLoading:eW,isGradesLoading:nm,isMockLoading:tD,isDashboardLoading:eW||tZ.isLoading,dashboardError:eB||tZ.error,onRetryDashboard:()=>{eq(),tZ.refetch()},isSystemAdmin:!!(null==eI?void 0:null===(L=eI.user)||void 0===L?void 0:L.isSystemAdmin)})]}),!e_&&(0,s.jsxs)("div",{className:"hidden md:flex w-60 border-r border-zinc-200 dark:border-white/5 flex-col shrink-0 bg-white dark:bg-[#09090b] student-sidebar nav-rail-shadow ".concat(eK),children:[eL&&(0,s.jsx)("div",{className:"p-3 border-b border-zinc-200 dark:border-white/5",children:eL}),(0,s.jsx)("div",{className:"p-3 border-b border-zinc-200 dark:border-white/5",children:(0,s.jsxs)("div",{className:"relative",children:[(0,s.jsx)(u.Z,{className:"absolute left-2.5 top-2.5 text-zinc-400 dark:text-white/30",size:14}),(0,s.jsx)("input",{type:"text",placeholder:"학생 검색...",value:te,onChange:e=>tt(e.target.value),className:"w-full bg-[#fafaf9] dark:bg-[#18181b] text-zinc-900 dark:text-white placeholder-zinc-400 dark:placeholder-white/30 rounded-md py-2 pl-8 pr-3 text-xs focus:outline-none focus:ring-1 focus:ring-zinc-400 dark:focus:ring-white/10"})]})}),(0,s.jsxs)("div",{className:"flex-1 overflow-y-auto custom-scrollbar student-list-scroll p-2 space-y-0.5",children:[(0,s.jsx)("button",{onPointerDown:e=>{0===e.button&&(e7(!0),e9(null))},onKeyDown:e=>
1{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),e7(!0),e9(null))},"data-selected":e8,className:(0,F.cn)("w-full flex items-center gap-3 px-3 py-1.5 rounded-md transition group student-sidebar-item",e8?"bg-zinc-100 dark:bg-[#202023] text-zinc-900 dark:text-white":"text-zinc-500 dark:text-[#a1a1aa] hover:bg-zinc-50 dark:hover:bg-white/[0.04] hover:text-zinc-900 dark:hover:text-white"),children:e5?(0,s.jsxs)("div",{className:"flex items-baseline gap-2 overflow-hidden w-full",children:[(0,s.jsx)("span",{className:(0,F.cn)("truncate text-sm transition-colors shrink-0 student-sidebar-name",e8?"font-semibold text-zinc-900 dark:text-white":"font-medium text-zinc-700 dark:text-zinc-300"),children:"전체 학생"}),(0,s.jsxs)("span",{className:(0,F.cn)("text-[13px] font-medium tracking-tight whitespace-nowrap transition-colors student-sidebar-name",e8?"text-zinc-500 dark:text-white/40":"text-zinc-400 dark:text-white/20"),children:[e3.length,"명"]})]}):(0,s.jsxs)("div",{className:"flex items-center gap-3 overflow-hidden w-full",children:[(0,s.jsx)("span",{className:"w-5 shrink-0 flex justify-center",children:(0,s.jsx)($.d,{name:"avatars-group",size:16,className:"opacity-50"})}),(0,s.jsx)("span",{className:(0,F.cn)("truncate text-sm transition-colors student-sidebar-name",e8?"font-semibold text-zinc-900 dark:text-white":"font-medium text-zinc-700 dark:text-zinc-300"),children:"전체 학생"}),(0,s.jsxs)("span",{className:"ml-auto text-xs tabular-nums text-zinc-400 dark:text-zinc-500",children:[e3.length,"명"]})]})}),0!==nc.length||eZ||eP?0===nc.length?(0,s.jsx)("div",{className:"text-center py-8 text-white/30 text-xs",children:"학생 없음"}):nc.map(e=>(0,s.jsx)("button",{onPointerDown:t=>{0===t.button&&(e9(e.id),e7(!1))},onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),e9(e.id),e7(!1))},"data-selected":e6===e.id,className:(0,F.cn)("w-full flex items-center gap-3 px-3 py-1.5 rounded-md transition group student-sidebar-item",e6===e.id?"bg-zinc-100 dark:bg-[#202023] text-zinc-900 dark:text-white":"text-zinc-500 dark:text-[#a1a1aa] hover:bg-zinc-50 dark:hover:bg-white/[0.04] hover:text-zinc-900 dark:hover:text-white"),children:e5?(0,s.jsxs)("div",{className:"flex items-baseline gap-2 overflow-hidden w-full",children:[(0,s.jsx)("span",{className:(0,F.cn)("truncate text-sm transition-colors shrink-0 student-sidebar-name",e6===e.id?"font-semibold text-zinc-900 dark:text-white":"font-medium text-zinc-700 dark:text-zinc-300"),children:e.name}),(0,s.jsxs)("span",{className:(0,F.cn)("text-[13px] font-medium tracking-tight whitespace-nowrap transition-colors student-sidebar-name",e6===e.id?"text-zinc-500 dark:text-white/40":"text-zinc-400 dark:text-white/20"),children:[e.grade,"학년 ",e.classNum,"반 ",e.number,"번"]})]}):(0,s.jsxs)("div",{className:"flex items-center gap-3 overflow-hidden w-full",children:[(0,s.jsx)("span",{className:(0,F.cn)("w-5 shrink-0 text-right text-[13px] tabular-nums",e6===e.id?"text-zinc-600 dark:text-zinc-300":"text-zinc-400 dark:text-zinc-500"),children:e.number}),(0,s.jsx)("span",{className:(0,F.cn)("truncate text-sm transition-colors student-sidebar-name",e6===e.id?"font-semibold text-zinc-900 dark:text-white":"font-medium text-zinc-700 dark:text-zinc-300"),children:e.name})]})},e.id)):(0,s.jsx)(r.$z,{})]})]}),(0,s.jsx)("div",{className:"hidden md:flex md:flex-1 md:flex-col overflow-hidden bg-white dark:bg-[#0c0c0e] overflow-x-hidden",children:e8?(0,s.jsx)(K.default,{students:e3,isAdmin:e2,isSystemAdmin:!!(null==eI?void 0:null===(G=eI.user)||void 0===G?void 0:G.isSystemAdmin),studentGradeAverages:tO,studentGradeRecords:tB,studentMockAverages:tP,latestMockExams:tW,studentRoles:tX.assignments||{},isLoading:eW,error:eB,gradesLoading:tZ.isLoading,gradesError:tZ.error,onRetry:()=>{eq(),tZ.refetch()},onSelectStudent:e=>{e9(e),e7(!1)}}):0!==e3.length||eZ||eP?0===e3.length?(0,s.jsx)("div",{className:"hidden md:flex flex-1 items-center justify-center p-6",children:(0,s.jsx)(z.Z,{size:"lg",title:"등록된 학생이 없습니다",description:"담임 학급 학생 명단을 먼저 등록하여 학생 관리와 성장 리포트를 시작해 보세요.",action:(0,s.jsx)("button",{onClick:()=>ng("student-list"),className:"px-6 py-2.5 bg-zinc-900 hover:bg-black dark:bg-white dark:hover:bg-zinc-100 text-white dark:text-zinc-900 rounded-xl font-semibold text-sm transition-all shadow-sm active:scale-95",children:"학생 등록하기"})})}):ts?(0,s.jsxs)("div",{className:"flex flex-col h-full",children:[(0,s.jsxs)("div",{className:"shrink-0 border-b border-zinc-200 dark:border-white/5 bg-white dark:bg-[#0c0c0e] p-4 pb-0 z-10 student-detail-mobile-header",children:[(0,s.jsxs)("button",{onClick:()=>e_?null==eA?void 0:eA():e9(null),className:"md:hidden flex items-center gap-1.5 text-blue-500 text-[var(--mobile-font-body)] font-medium mb-3 -ml-1 active:opacity-70",children:[(0,s.jsx)(m.Z,{size:18}),(0,s.jsx)("span",{children:"목록"})]}),(0,s.jsx)(ea.C,{student:ts,children:(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-zinc-500 mt-2",children:[(0,s.jsxs)("div",{className:"flex flex-col",children:[(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mb-0.5",children:"평균 내신"}),(0,s.jsxs)("span",{className:"text-zinc-700 dark:text-zinc-300 font-medium text-sm",children:[null!==nR&&Number.isFinite(nR)?nR.toFixed(1):"-","등급"]})]}),(0,s.jsx)("div",{className:"w-px h-6 bg-zinc-200 dark:bg-zinc-800"}),(0,s.jsxs)("div",{className:"flex flex-col",children:[(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mb-0.5",children:"출결 기록"}),(0,s.jsxs)("div",{className:"flex items-center gap-2 text-zinc-700 dark:text-zinc-300 font-medium text-sm",children:[(0,s.jsxs)("span",{children:["결석 ",nE.absent]}),(0,s.jsxs)("span",{children:["지각 ",nE.late]}),(0,s.jsxs)("span",{children:["조퇴 ",nE.early]}),(0,s.jsxs)("span",{children:["결과 ",nE.leave]})]})]}),(0,s.jsx)("div",{className:"w-px h-6 bg-zinc-200 dark:bg-zinc-800"}),(0,s.jsxs)("div",{className:"flex flex-col",children:[(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mb-0.5",children:"희망 진로"}),(0,s.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300 font-medium text-sm",children:nF})]}),(0,s.jsx)("div",{className:"w-px h-6 bg-zinc-200 dark:bg-zinc-800"}),(0,s.jsxs)("div",{className:"flex flex-col",children:[(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mb-0.5",children:"역할"}),(0,s.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300 font-medium text-sm",children:(null==tX?void 0:null===(I=tX.assignments)||void 0===I?void 0:I[e6])&&Object.values(null!==(eC=null==tX?void 0:null===(Z=tX.assignments)||void 0===Z?void 0:Z[e6])&&void 0!==eC?eC:{}
1).filter(Boolean).join(", ")||"-"})]}),(0,s.jsx)("div",{className:"w-px h-6 bg-zinc-200 dark:bg-zinc-800"}),(0,s.jsxs)("div",{className:"flex flex-col",children:[(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mb-0.5",children:"청소"}),(0,s.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300 font-medium text-sm",children:(null==nk?void 0:nk.name)||"-"})]})]})}),(0,s.jsxs)("div",{className:(0,F.cn)("flex items-center gap-2",e_&&"flex-wrap pb-2"),children:[(0,s.jsxs)("div",{className:(0,F.cn)("flex-1 min-w-0 flex items-center gap-1 overflow-x-auto flex-nowrap student-tabs-container [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",e_&&"basis-full"),children:[(0,s.jsx)(er.r,{isActive:"basic"===nd,onClick:()=>no("basic"),icon:k.tM,label:"기본"}),(0,s.jsx)(er.r,{isActive:"grade"===nd,onClick:()=>no("grade"),icon:k.Z2,label:"내신"}),(0,s.jsx)(er.r,{isActive:"mock"===nd,onClick:()=>no("mock"),icon:k.yk,label:"모의고사"}),(0,s.jsx)(er.r,{isActive:"record"===nd,onClick:()=>no("record"),icon:k.Fn,label:"생활기록부"}),(0,s.jsx)(er.r,{isActive:"admission"===nd,onClick:()=>no("admission"),icon:k.Nk,label:"대입"})]}),e3.length>0&&(0,s.jsx)(eN,{onClick:()=>n0(!0),icon:k.kd,label:"모바일 성적표"}),n1&&(0,s.jsx)(eN,{onClick:()=>nQ(!0),icon:k.n9,label:"성적 리포트 인쇄"})]})]}),(0,s.jsxs)("div",{ref:nb,className:"flex-1 overflow-y-auto custom-scrollbar p-4",children:["basic"===nd&&(0,s.jsx)("div",{className:"max-w-[1400px] mx-auto space-y-4",children:(0,s.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[(0,s.jsx)(ey,{title:"최근 출결",action:(0,s.jsxs)("span",{className:"text-xs text-zinc-400 dark:text-zinc-500",children:[ta.length,"건"]}),children:0===ta.length?(0,s.jsx)("div",{className:"py-8 text-center text-zinc-400 dark:text-zinc-400 text-xs",children:"기록 없음"}):(0,s.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:ta.slice(0,6).map(e=>(0,s.jsxs)("div",{className:"min-w-0 bg-white dark:bg-zinc-900 px-3 py-2 rounded-lg flex flex-col gap-1.5 student-detail-attendance-card border border-zinc-100 dark:border-white/5",children:[(0,s.jsxs)("div",{className:"text-[11px] text-zinc-500 flex items-center gap-1.5",children:[(0,s.jsx)("span",{"aria-hidden":"true",className:"w-1 h-1 shrink-0 rounded-full bg-blue-500"}),(0,s.jsxs)("span",{children:[(0,F.$j)(e.date),e.endDate&&e.endDate!==e.date?" ~ ".concat((0,F.$j)(e.endDate)):""]})]}),(0,s.jsxs)("div",{className:"text-[13px] text-zinc-900 dark:text-zinc-200 pl-2.5",children:[e.reason," ",e.type]})]},e.id))})}),(0,s.jsx)(ey,{title:"메모",flush:!0,children:(0,s.jsx)("div",{className:"px-2 pb-1",children:(0,s.jsx)("textarea",{placeholder:ny?"등록된 메모가 없습니다":"학생에 대한 메모를 입력하세요...",value:ns,onChange:e=>na(e.target.value),readOnly:ny,className:(0,F.cn)("w-full bg-transparent text-sm text-zinc-900 dark:text-white placeholder-zinc-400 dark:placeholder-zinc-600 p-2 resize-none focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 min-h-[100px] border-none student-detail-memo",ny&&"cursor-default")})})}),(0,s.jsx)(ey,{title:"설문 응답",action:tu.length>0&&!ny&&(0,s.jsx)("button",{"aria-label":"설문 공개 설정",onClick:()=>tp(!0),className:"p-1 hover:bg-zinc-200 dark:hover:bg-white/10 rounded-md transition-colors text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300",children:(0,s.jsx)(h.Z,{size:14})}),children:tu.every(e=>e.answers.every(e=>!e.showOnManagement))?(0,s.jsx)("div",{className:"py-4 text-center text-zinc-400 dark:text-zinc-400 text-[11px]",children:0===tu.length?"설문 조사 응답 결과의 일부를 표시할 수 있습니다":"표시되도록 설정된 설문 응답이 없습니다"}):(0,s.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:tu.map(e=>(0,s.jsx)("div",{className:"contents",children:e.answers.filter(e=>e.showOnManagement).map((t,n)=>(0,s.jsxs)("div",{className:"bg-white dark:bg-zinc-900 px-3 py-2 rounded-lg flex flex-col gap-1.5 student-detail-survey-card border border-zinc-100 dark:border-white/5",children:[(0,s.jsxs)("div",{className:"text-[11px] text-zinc-500 flex items-center gap-1.5",children:[(0,s.jsx)("div",{className:"w-1 h-1 rounded-full bg-blue-500"}),t.question]}),(0,s.jsx)("div",{className:"text-[13px] text-zinc-900 dark:text-zinc-200 pl-2.5",children:t.answer})]},"".concat(e.id,"-").concat(n)))},e.id))})}),(0,s.jsxs)(ey,{title:"희망 진로 분야",action:!ny&&(n_.length>
10||nD)&&(nD?(0,s.jsx)("button",{type:"button",onClick:()=>nL(!1),className:"px-1 text-[12px] font-semibold text-zinc-600 dark:text-zinc-300 hover:text-zinc-900 dark:hover:text-white transition-colors",children:"완료"}):(0,s.jsx)("button",{type:"button","aria-label":"희망 진로 분야 수정",onClick:()=>nL(!0),className:"p-1 hover:bg-zinc-200 dark:hover:bg-white/10 rounded-md transition-colors text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300",children:(0,s.jsx)(h.Z,{size:14})})),children:[nD||!ny&&0===n_.length?(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:O.FT.map(e=>{let t=n_.includes(e.id),n=!t&&!(0,O.Wn)(e.id)&&n_.length>=O.Cd,a=ny||n;return(0,s.jsx)("button",{onClick:()=>{nL(!0),nG(e.id)},disabled:a,"aria-pressed":t,className:(0,F.cn)("px-3 py-1.5 rounded-full text-xs font-medium transition border border-zinc-100 dark:border-zinc-800",t?"bg-blue-600 text-white":"bg-white dark:bg-zinc-900 text-zinc-500 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-200",n&&"opacity-40 cursor-not-allowed hover:text-zinc-500 dark:hover:text-zinc-400"),children:e.label},e.id)})}):n_.length>0&&(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:O.FT.filter(e=>n_.includes(e.id)).map(e=>ny?(0,s.jsx)("span",{className:"px-3 py-1.5 rounded-full text-xs font-medium border border-blue-600 bg-blue-600 text-white",children:e.label},e.id):(0,s.jsx)("button",{type:"button",onClick:()=>nL(!0),title:"눌러서 수정",className:"px-3 py-1.5 rounded-full text-xs font-medium border border-blue-600 bg-blue-600 text-white hover:bg-blue-700 hover:border-blue-700 transition-colors",children:e.label},e.id))}),0===n_.length?(0,s.jsxs)("p",{className:(0,F.cn)("text-[11px] text-zinc-400 dark:text-zinc-500 flex items-center gap-1.5 font-medium",!ny&&"mt-3"),children:[(0,s.jsx)(p.Z,{size:12}),ny?"아직 고른 진로 분야가 없어요.":"희망 진로 분야를 골라 두세요. (최대 ".concat(O.Cd,"개)")]}):nD&&n_.length>=O.Cd&&(0,s.jsxs)("p",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 mt-3 flex items-center gap-1.5 font-medium",children:[(0,s.jsx)(p.Z,{size:12}),"최대 ",O.Cd,"개까지 선택할 수 있어요. 변경하려면 선택된 분야를 먼저 해제하세요."]})]}),(0,s.jsxs)(ey,{title:"상담 일지",action:!ny&&(0,s.jsx)("button",{"aria-label":"상담 기록 추가",onClick:()=>t0(!0),className:"p-1 text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-200 transition-colors",children:(0,s.jsx)(f.Z,{size:16})}),children:[tJ&&(0,s.jsxs)("div",{className:"mb-4 bg-white dark:bg-zinc-900 rounded-lg p-4 student-detail-counseling-creation",children:[(0,s.jsx)("textarea",{value:t5,onKeyDown:nT,onChange:e=>{let t=e.target.value;if(t4(t),e6&&!eZ){let e="counseling-draft:".concat(e6);t.trim()?localStorage.setItem(e,t):localStorage.removeItem(e)}},placeholder:"상담 내용을 입력하세요...",className:"w-full bg-transparent text-sm text-zinc-900 dark:text-white placeholder-zinc-500 dark:placeholder-zinc-600 resize-none focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 min-h-[60px] mb-3",autoFocus:!0}),(0,s.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,s.jsx)("button",{onClick:()=>{t0(!1),t4(""),t2("상담"),e6&&!eZ&&localStorage.removeItem("counseling-draft:".concat(e6))},className:"px-3 py-1 text-xs text-zinc-500 hover:text-zinc-700 dark:hover:text-zinc-300",children:"취소"}),(0,s.jsx)("button",{onClick:nZ,disabled:!t5.trim()||t3,className:"px-3 py-1 bg-white hover:bg-zinc-200 text-black text-xs font-medium rounded disabled:opacity-50",children:"등록"})]})]}),nw?(0,s.jsxs)("div",{className:"flex flex-col items-center justify-center py-12 px-4 text-center",children:[(0,s.jsx)("div",{className:"w-12 h-12 rounded-full bg-zinc-50 dark:bg-white/5 flex items-center justify-center mb-4",children:(0,s.jsx)(p.Z,{className:"text-zinc-400",size:24})}),(0,s.jsx)("h3",{className:"text-sm font-medium text-zinc-900 dark:text-zinc-100 mb-1",children:"상담 내역 보호"}),(0,s.jsx)("p",{className:"text-xs text-zinc-500 dark:text-zinc-400 max-w-[200px] leading-relaxed",children:"상담 내용은 담임선생님만 조회할 수 있습니다."})]}):0!==ti.length||tJ?(0,s.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:ti.slice(0,6).map(e=>(0,s.jsxs)("div",{onClick:()=>{nw||(tq(e),tU(e.content),tH(!1))},className:(0,F.cn)("bg-white dark:bg-zinc-900 p-3 rounded-lg student-detail-counseling-card border border-zinc-100 dark:border-zinc-800 transition-colors group",!nw&&"cursor-pointer hover:bg-zinc-50 dark:hover:bg-zinc-800"),children:[(0,s.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 font-mono",children:e.date}),!ny&&(0,s.jsx)("button",{onClick:t=>nW(t,e.id),className:"opacity-0 group-hover:opacity-100 p-1 text-red-500/80 hover:text-red-600 transition duration-200",title:"삭제",children:(0,s.jsx)(b.Z,{size:13})})]}),(0,s.jsx)("p",{className:"text-xs text-zinc-600 dark:text-zinc-400 line-clamp-2 group-hover:text-zinc-900 dark:group-hover:text-zinc-200 transition-colors",children:e.content})]},e.id))}):(0,s.jsx)("div",{className:"py-8 text-center text-zinc-600 dark:text-zinc-400 text-xs",children:"기록 없음"})]}),(0,s.jsx)(ey,{title:"역할",action:!ny&&(0,s.jsx)("button",{"aria-label":"역할 설정",onClick:()=>ng("student-roles",e6,{onClose:nj}),className:"p-1 text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-200 transition-colors",children:(0,s.jsx)(f.Z,{size:16})}),children:(null!==(eS=null==tX?void 0:null===(T=tX.columns)||void 0===T?void 0:T.length)&&void 0!==eS?eS:0)===0?(0,s.jsx)("div",{className:"py-4 text-center text-zinc-400 dark:text-zinc-400 text-xs",children:"배정된 역할 없음"}):(0,s.jsxs)("div",{className:"flex flex-wrap gap-2",children:[null==tX?void 0:null===(B=tX.columns)||void 0===B?void 0:B.map(e=>{var t,n;let a=null==tX?void 0:null===(n=tX.assignments)||void 0===n?void 0:null===(t=n[e6])||void 0===t?void 0:t[e.id];return a?(0,s.jsxs)("div",{className:"bg-white dark:bg-zinc-900 px-3 py-2 rounded-lg border border-zinc-100 dark:border-zinc-800 flex flex-col gap-1 min-w-[100px]",children:[(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500",children:e.name}),(0,s.jsx)("span",{className:"text-[13px] text-zinc-900 dark:text-zinc-200 font-medium",children:a})]},e.id):null}),Object.values((null==tX?void 0:null===(P=tX.assignments)||void 0===P?void 0:P[e6])||{}).every(e=>!e)&&(0,s.jsx)("div",{className:"w-full py-4 text-center text-zinc-400 dark:text-zinc-400 text-xs",children:"배정된 역할 없음"})]})}),(0,s.jsx)(ey,{title:"자율활동",action:!ny&&(0,s.jsx)("button",{"aria-label":"활동 추가",onClick:()=>nO("autonomous"),className:"p-1 text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-200 transition-colors",children:(0,s.jsx)(f.Z,{size:16})}),children:0===nN.length?(0,s.jsx)("div",{className:"py-4 text-center text-zinc-600 dark:text-zinc-400 text-xs",children:"기록 없음"}):(0,s.jsx)("div",{className:"space-y-2",children:nN.slice(0,3).map(e=>(0,s.jsx)("div",{onClick:t=>{t.stopPropagation(),nn(e)},className:"bg-white dark:bg-zinc-900 px-3 py-2.5 rounded-lg student-detail-activity-card border border-zinc-100 dark:border-zinc-800 cursor-pointer hover:bg-zinc-50 dark:hover:bg-zinc-800 transition-colors",children:(0,s.jsx)("div",{className:"flex items-center",children:(0,s.jsx)("span",{className:"text-[13px] font-medium text-zinc-800 dark:text-zinc-300 line-clamp-1",children:e.activityName})})},e.id))})}),(0,s.jsx)(ey,{title:"진로활동",action:!ny&&(0,s.jsx)("button",{"aria-label":"활동 추가",onClick:()=>nO("career"),className:"p-1 text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-200 transition-colors",children:(0,s.jsx)(f.Z,{size:16})}),children:0===nC.length?(0,s.jsx)("div",{className:"py-4 text-center text-zinc-600 dark:text-zinc-400 text-xs",children:"기록 없음"}):(0,s.jsx)("div",{className:"space-y-2",children:nC.slice(0,3).map(e=>(0,s.jsx)("div",{onClick:t=>{t.stopPropagation(),nn(e)},className:"bg-white dark:bg-zinc-900 px-3 py-2.5 rounded-lg student-detail-activity-card border border-zinc-100 dark:border-zinc-800 cursor-pointer hover:bg-zinc-50 dark:hover:bg-zinc-800 transition-colors",children:(0,s.jsx)("div",{className:"flex items-center",children:(0,s.jsx)("span",{className:"text-[13px] font-medium text-zinc-800 dark:text-zinc-300 line-clamp-1",children:e.activityName})})},e.id))})})]})}),"grade"===nd&&(0,s.jsx)("div",{className:"space-y-4",children:nm?(0,s.jsx)(el.Z,{title:"데이터 분석 중...",desc:"내신 성적 데이터를 불러오고 있습니다.",useLogoLoader:!0,minimal:!0}):nx&&0!==nx.analysis.length?(()=>{let e=ts?(0,et.Bz)(ts.grade||0):2025,t=(0,et.RQ)(e),n=(0,et.f6)(t),a=nx.analysis.flatMap(e=>e.records.map(t=>({id:t.id,year:e.year,semester:e.semester,subject:t.subject,subject_type:t.subject_type,score:t.score,subject_average:t.subject_average,standard_deviation:t.standard_deviation,grade_level:t.grade_level||null,achievement:t.achievement,rank:t.rank,percentile:t.percentile||null,total_students:t.total_students,credits:t.credits,exam_type:t.exam_type||e.examType||"final",is_temporary:t.is_temporary||!1,distA:t.distA,distB:t.distB,distC:t.distC,distD:t.distD,distE:t.distE}))),r={semester_averages:nx.analysis.map(e=>({year:e.year,semester:e.semester,average_grade:parseFloat(e.averageGrade),subject_count:e.records.length,has_temporary_grades:!1})),subject_latest:[]};return(0,s.jsx)(eg,{grades:a,statistics:r,gradingSystem:t,chartConfig:n,studentGrade:null==ts?void 0:ts.grade},e6)})():(0,s.jsx)(el.Z,{title:"데이터 없음",desc:"등록된 내신 성적 데이터가 없습니다.",minimal:!0,action:!nz&&(0,s.jsxs)("button",{onClick:()=>{eZ?window.dispatchEvent(new CustomEvent("open-login-modal")):ng("grade-file",void 0,{onClose:tR})},className:"mt-1 flex items-center gap-2 px-4 py-2 bg-[#007AFF] hover:bg-blue-600 text-white rounded-lg text-xs font-bold transition active:scale-95",children:[(0,s.jsx)(g.Z,{size:14}),"성적 파일 업로드"]})})}),"mock"===nd&&(0,s.jsx)("div",{className:"space-y-6",children:tD?(0,s.jsx)(el.Z,{title:"데이터 불러오는 중...",desc:"모의고사 성적 데이터를 불러오고 있습니다.",useLogoLoader:!0,minimal:!0}):t_.length>0?(0,s.jsx)(ev,{mockExams:t_}
1,e6):(0,s.jsx)(el.Z,{title:"데이터 없음",desc:"등록된 모의고사 성적 데이터가 없습니다.",minimal:!0,action:!nz&&(0,s.jsxs)("button",{onClick:()=>{eZ?window.dispatchEvent(new CustomEvent("open-login-modal")):ng("mock-grade")},className:"mt-1 flex items-center gap-2 px-4 py-2 bg-[#007AFF] hover:bg-blue-600 text-white rounded-lg text-xs font-bold transition active:scale-95",children:[(0,s.jsx)(g.Z,{size:14}),"성적 파일 업로드"]})})}),"record"===nd&&(0,s.jsx)("div",{className:"space-y-6",children:eP||eZ?(null==ts?void 0:ts.lifeRecordAnalysis)?(0,s.jsx)(S.default,{studentId:ts.id,attendanceRecords:ta,activityRecords:tc,seteukRecords:to,studentName:ts.name,studentGrade:ts.grade||0,studentClass:ts.classNum||0,studentNumber:ts.number,lifeRecordAnalysis:ts.lifeRecordAnalysis,overallOpinion:ts.overallOpinion}):(0,s.jsx)(el.Z,{title:"데이터 없음",desc:"등록된 생활기록부 데이터가 없습니다.",minimal:!0,action:!nz&&(0,s.jsxs)("button",{onClick:()=>{eZ?window.dispatchEvent(new CustomEvent("open-login-modal")):ng("record-grade",ts.id,{onClose:()=>{eq()}})},className:"mt-1 flex items-center gap-2 px-4 py-2 bg-[#007AFF] hover:bg-blue-600 text-white rounded-lg text-xs font-bold transition active:scale-95",children:[(0,s.jsx)(g.Z,{size:14}),"생활기록부 pdf 업로드"]})}):(0,s.jsx)(el.Z,{title:"데이터 불러오는 중...",desc:"생활기록부 데이터를 불러오고 있습니다.",useLogoLoader:!0,minimal:!0})}),"admission"===nd&&e6&&(0,s.jsx)(A,{studentId:e6,api:tz,onGradesChanged:tR,studentGrade:ts.grade||0,isGuest:eZ,desktop:!0})]})]}):(0,s.jsx)("div",{className:"hidden md:flex flex-1 items-center justify-center p-6",children:(0,s.jsx)(z.Z,{size:"lg",title:"학생을 선택해 주세요",description:"왼쪽 명단에서 학생을 선택하면 상세 정보 및 맞춤 리포트를 확인할 수 있습니다."})}):(0,s.jsx)(a.ContentLoadingState,{variant:"grades",label:"학생 정보를 불러오고 있어요"})}),tY&&(0,s.jsxs)("div",{className:"modal-viewport z-[110] flex items-center justify-center p-4",children:[(0,s.jsx)("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200",onClick:()=>tq(null)}),(0,s.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"상담 일지",onKeyDown:e=>{"Escape"===e.key&&tq(null)},className:"relative w-full max-w-lg bg-white dark:bg-[#18181b] border border-zinc-200 dark:border-[#27272a] rounded-2xl shadow-2xl p-6 animate-in zoom-in-95 duration-200",children:[(0,s.jsx)("button",{"aria-label":"닫기",onClick:()=>tq(null),className:"absolute top-4 right-4 text-zinc-500 hover:text-zinc-900 dark:hover:text-white transition-colors",children:(0,s.jsx)(v.Z,{size:20})}),(0,s.jsxs)("div",{className:"flex items-center justify-between mb-4 pr-8",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("h3",{className:"text-lg font-bold text-zinc-900 dark:text-white leading-none",children:null==ts?void 0:ts.name}),(0,s.jsx)("span",{className:"text-xs text-zinc-500 font-mono mt-0.5",children:tY.date}),(0,s.jsx)("button",{onClick:()=>tK?nP():tH(!0),disabled:tV,className:(0,F.cn)("p-1 ml-1 rounded transition-colors",tK?"text-emerald-500 hover:bg-emerald-500/10":"text-zinc-500 hover:text-zinc-900 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-white/5"),children:tV?(0,s.jsx)(ee.W,{size:14}):tK?(0,s.jsx)(j.Z,{size:14}):(0,s.jsx)(h.Z,{size:14})})]}),(0,s.jsx)("span",{className:"px-2 py-1 rounded bg-zinc-100 dark:bg-[#27272a] text-[10px] font-medium text-zinc-600 dark:text-zinc-400",children:tY.category})]}),(0,s.jsx)("div",{className:"",children:tK?(0,s.jsx)("textarea",{value:t$,onChange:e=>tU(e.target.value),className:"w-full bg-zinc-50 dark:bg-[#09090b] text-sm text-zinc-700 dark:text-zinc-300 leading-relaxed whitespace-pre-wrap p-3 rounded-xl border border-zinc-100 dark:border-[#27272a] focus:outline-none focus:border-blue-500/50 min-h-[150px] resize-none",autoFocus:!0}):(0,s.jsx)("p",{className:"text-sm text-zinc-700 dark:text-zinc-300 leading-relaxed whitespace-pre-wrap",children:tY.content})})]})]}),(0,s.jsx)(eo,{isOpen:t9,onClose:()=>t8(!1),onSave:nB,initialCategory:t7,studentName:null==ts?void 0:ts.name}),(0,s.jsx)(eu,{isOpen:!!nt,onClose:()=>nn(null),activity:nt}),n2&&e6&&(0,s.jsx)(ej,{model:n2,studentId:e6,isGuest:eZ,onClose:()=>nQ(!1)}),nJ&&(0,s.jsx)(ek,{students:e3.map(e=>{var t,n;return{id:e.id,name:e.name,number:e.number,grade:null!==(t=e.grade)&&void 0!==t?t:null,classNum:null!==(n=e.classNum)&&void 0!==n?n:null}}),focusStudentId:null!=e6?e6:void 0,onClose:()=>n0(!1),isSystemAdmin:!!(null==eI?void 0:null===(W=eI.user)||void 0===W?void 0:W.isSystemAdmin)}),th&&(0,s.jsx)(ew,{responses:tu,onClose:()=>tp(!1),onToggle:async(e,t)=>{let n=tu.flatMap(e=>
1e.answers).find(t=>t.id===e);if(!n)return;let s=n.question;tm(e=>e.map(e=>({...e,answers:e.answers.map(e=>e.question===s?{...e,showOnManagement:t}:e)}))),(0,V.X)("updateSurveyAnswerVisibility",{answerId:e,showOnManagement:t},eH)}}),(0,s.jsx)(y.Z,{isOpen:!!nX,onClose:()=>nY(null),title:null==nX?void 0:nX.title,children:(0,s.jsx)("p",{className:"text-[var(--mobile-font-body)] text-zinc-700 dark:text-zinc-300 leading-relaxed",children:null==nX?void 0:nX.content})})]}):(0,s.jsx)("div",{className:"flex items-center justify-center h-full w-full",children:(0,s.jsx)(ee.W,{size:28})})}function ey(e){let{title:t,action:n,children:a,className:r,flush:i=!1}=e;return(0,s.jsxs)("div",{className:(0,F.cn)("bg-[#fafaf9] dark:bg-[#18181b] rounded-xl overflow-hidden",r),children:[(0,s.jsxs)("div",{className:"flex justify-between items-center px-4 py-3",children:[(0,s.jsx)("h3",{className:"font-semibold text-zinc-900 dark:text-zinc-200 text-sm",children:t}),n]}),(0,s.jsx)("div",{className:i?"":"px-4 pb-4",children:a})]})}function ew(e){let{responses:t,onClose:n,onToggle:a}=e;return(0,s.jsxs)("div",{className:"modal-viewport z-[100] flex items-center justify-center p-4",children:[(0,s.jsx)("div",{className:"absolute inset-0 bg-black/50 backdrop-blur-sm",onClick:n}),(0,s.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"설문 응답 노출 설정",onKeyDown:e=>{"Escape"===e.key&&n()},className:"relative w-full max-w-3xl bg-white dark:bg-[#1c1c1e] rounded-2xl shadow-2xl overflow-hidden border border-zinc-200 dark:border-white/10 animate-in fade-in zoom-in-95 duration-200",children:[(0,s.jsxs)("div",{className:"flex justify-between items-center px-6 py-4 border-b border-zinc-100 dark:border-white/5",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"text-lg font-bold text-zinc-900 dark:text-white",children:"설문 응답 노출 설정"}),(0,s.jsx)("p",{className:"text-xs text-zinc-500 mt-1",children:"설문에 참여한 모든 학생들에게 공통으로 적용됩니다."})]}),(0,s.jsxs)("div",{className:"flex items-center gap-1",children:[(0,s.jsx)("button",{onClick:n,className:"p-2 hover:bg-zinc-100 dark:hover:bg-white/5 rounded-lg text-emerald-500 transition-colors",title:"저장 및 닫기",children:(0,s.jsx)(j.Z,{size:20})}),(0,s.jsx)("button",{"aria-label":"닫기",onClick:n,className:"p-2 hover:bg-zinc-100 dark:hover:bg-white/5 rounded-lg text-zinc-500 transition-colors",children:(0,s.jsx)(v.Z,{size:20})})]})]}),(0,s.jsx)("div",{className:"p-6 max-h-[70vh] overflow-y-auto custom-scrollbar",children:0===t.length?(0,s.jsx)(z.Z,{size:"sm",title:"참여한 설문이 없습니다",description:"해당 학생이 참여하여 제출한 설문 응답 내역이 없습니다."}):(0,s.jsx)("div",{className:"space-y-8",children:t.map(e=>(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"w-1 h-4 bg-blue-500 rounded-full"}),(0,s.jsx)("h4",{className:"text-sm font-bold text-zinc-900 dark:text-zinc-100",children:e.surveyTitle}),(0,s.jsxs)("span",{className:"text-[10px] text-zinc-400 font-normal",children:[e.submittedAt," 제출"]})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:e.answers.map(e=>(0,s.jsxs)("label",{className:(0,F.cn)("flex items-start justify-between p-3 rounded-lg border cursor-pointer transition",e.showOnManagement?"border-blue-500/30 bg-blue-50/30 dark:bg-blue-500/5 ring-1 ring-blue-500/10":"border-zinc-100 dark:border-white/5 bg-zinc-50/50 dark:bg-white/5 hover:bg-zinc-50 dark:hover:bg-white/[0.08]"),children:[(0,s.jsxs)("div",{className:"flex flex-col gap-0.5 flex-1 min-w-0 pr-3",children:[(0,s.jsx)("span",{className:"text-[11px] font-medium text-zinc-500 dark:text-zinc-400 truncate",children:e.question}),(0,s.jsx)("span",{className:"text-[13px] text-zinc-900 dark:text-zinc-200 line-clamp-2",children:e.answer})]}),(0,s.jsx)("input",{type:"checkbox",checked:e.showOnManagement,onChange:t=>a(e.id,t.target.checked),className:"w-4 h-4 mt-0.5 rounded border-zinc-300 text-blue-600 focus:ring-blue-500 dark:bg-zinc-800 dark:border-zinc-700 shrink-0"})]},e.id))})]},e.id))})})]})]})}function eN(e){let{onClick:t,icon:n,label:a}=e;return(0,s.jsxs)("button",{type:"button",onClick:t,className:"group shrink-0 inline-flex items-center gap-1.5 h-8 px-3 rounded-lg text-xs font-medium text-[#6B7280] dark:text-zinc-400 hover:text-[#416FAD] dark:hover:text-[#9CBBEB] hover:bg-[#416FAD]/[0.08] dark:hover:bg-[#9CBBEB]/10 transition-colors",children:[(0,s.jsx)(n,{size:16,className:"group-hover:[&_g]:[stroke-width:30]"}),(0,s.jsxs)("span",{className:"grid justify-items-center",children:[(0,s.jsx)("span",{"aria-hidden":!0,
1className:"invisible col-start-1 row-start-1 font-semibold",children:a}),(0,s.jsx)("span",{className:"col-start-1 row-start-1 group-hover:font-semibold",children:a})]})]})}},21751:function(e,t,n){n.d(t,{jM:function(){return d},nD:function(){return c},rr:function(){return o}});var s=n(57437),a=n(2265),r=n(21652),i=n(8345);let l=(0,a.createContext)(void 0);function c(e){let{children:t}=e,[n,c]=(0,a.useState)(null),d=(0,a.useRef)(()=>{}),o=(0,a.useRef)(!1);(0,a.useEffect)(()=>{let e=e=>{!(0,i.Y)(e)&&o.current&&(o.current=!1,d.current())};return window.addEventListener("popstate",e),()=>window.removeEventListener("popstate",e)},[]);let x=(0,a.useCallback)((e,t)=>{d.current=t;let n=(0,r.UM)();if(null!==e){let e=window.history.state||{},t=o.current||!!(e&&e.isMobileSubHeader);n&&!t?(window.history.pushState({...e,isMobileSubHeader:!0},""),o.current=!0):t&&(o.current=!0)}else o.current=!1;c(t=>t===e?t:e)},[]),u=(0,a.useCallback)(()=>{o.current&&(o.current=!1,window.history.back()),d.current()},[]),m=(0,a.useMemo)(()=>({subHeaderTitle:n,goBackFromSubHeader:u,registerSubHeader:x}),[n,u,x]);return(0,s.jsx)(l.Provider,{value:m,children:t})}function d(){var e,t;let n=(0,a.useContext)(l);return{subHeaderTitle:null!==(e=null==n?void 0:n.subHeaderTitle)&&void 0!==e?e:null,goBackFromSubHeader:null!==(t=null==n?void 0:n.goBackFromSubHeader)&&void 0!==t?t:()=>{}}}function o(e,t){let n=(0,a.useContext)(l),s=null==n?void 0:n.registerSubHeader,r=(0,a.useRef)(t);(0,a.useEffect)(()=>{r.current=t},[t]),(0,a.useEffect)(()=>{s&&s(e,()=>r.current())},[s,e]),(0,a.useEffect)(()=>()=>{null==s||s(null,()=>{})},[s])}},45444:function(e,t,n){n.d(t,{X:function(){return a}});var s=n(2265);function a(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return(0,s.useCallback)(n=>{t&&"Enter"===n.key&&(n.metaKey||n.ctrlKey)&&(n.nativeEvent.isComposing||229===n.keyCode||(n.preventDefault(),e()))},[e,t])}},37456:function(e,t,n){n.d(t,{Cd:function(){return a},FT:function(){return s},H6:function(){return d},Wn:function(){return i},k_:function(){return c}});let s=[{id:"engineering_robotics",label:"공학 / 로봇 / 제조",keywords:["기계","로봇","자동차","항공","우주","조선","산업공학","제어계측","메카트로닉스","신소재","재료"]},{id:"it_software",label:"IT / 소프트웨어",keywords:["컴퓨터","소프트웨어","인공지능","데이터","정보보호","보안","게임","디지털콘텐츠","IT","멀티미디어","정보통신"]},{id:"natural_sciences",label:"자연과학",keywords:["수학","통계","물리","화학","지구과학","천문","기상","해양"]},{id:"electronics_semiconductor",label:"전기 / 전자 / 반도체",keywords:["전기","전자","반도체","디스플레이","광학","나노"]},{id:"environment_energy",label:"환경 / 에너지 / 도시",keywords:["환경","에너지","태양광","원자력","조경","산림","원예","도시계획","교통"]},{id:"bio_life_science",label:"바이오 / 생명공학",keywords:["생명","바이오","유전","분자생물","미생물"]},{id:"medical_nursing",label:"의학 / 간호 / 보건",keywords:["의예","치의예","한의예","수의예","간호","임상병리","방사선","치위생","물리치료","작업치료","응급구조","보건","의생명"]},{id:"business_economics",label:"경영 / 경제 / 금융",keywords:["경영","경제","회계","세무","금융","보험","무역","유통","부동산"]},{id:"law_public_admin",label:"법조 / 공공 / 사회",keywords:["법학","행정","정치외교","사회학","문헌정보"]},{id:"counseling_psych_welfare",label:"상담 / 심리 / 사회복지",keywords:["심리","상담","사회복지","아동","청소년","가족"]},{id:"military_police",label:"군사 / 경찰 / 소방",keywords:["군사","부사관","경찰","소방","안전","보안","정보"]},{id:"education",label:"교육 / 사범",keywords:["교육","교대","유아교육","특수교육","국어교육","영어교육","수학교육","사회교육","과학교육","체육교육"]},{id:"media_content",label:"미디어 / 광고 / 콘텐츠",keywords:["미디어","커뮤니케이션","신문방송","광고","홍보","콘텐츠","언론","영상"]},{id:"humanities_languages",label:"인문 / 어문",keywords:["국어국문","영어영문","중어중문","일어일문","독어독문","불어불문","철학","사학","고고학","언어학"]},{id:"tourism_food",label:"관광 / 호텔 / 식품",keywords:["관광","호텔","서비스","조리","외식","식품영양","급식","제과","비서"]},{id:"art_design",label:"예술 / 디자인",keywords:["시각디자
1인","산업디자인","패션디자인","공예","회화","조소","애니메이션","만화"]},{id:"physical_education",label:"체육 / 스포츠",keywords:["체육","스포츠","레저","운동","경호","골프","태권도","무도"]},{id:"fashion_beauty",label:"패션 / 뷰티",keywords:["패션","의류","의상","뷰티","미용","메이크업","헤어","피부","화장품"]},{id:"other",label:"기타",keywords:[]},{id:"undecided",label:"미정",keywords:["자유전공","자율전공","무전공"]}],a=3,r=["undecided"];function i(e){return r.includes(e)}let l=new Set(s.map(e=>e.id));function c(e){if(!e)return[];let t=new Set,n=[];for(let s of e.split(",")){let e=s.trim();if(!(!e||t.has(e))&&l.has(e)&&(t.add(e),n.push(e),n.length>=a))break}return n}function d(e){return c(e.join(",")).join(",")}},7888:function(e,t,n){n.d(t,{q:function(){return s}});function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"요청을 처리하지 못했습니다. 잠시 후 다시 시도해 주세요.",n=e instanceof Error?e.message:String(null!=e?e:""),s=n.toLowerCase();return s.trim()?/[가-힣]/.test(n)&&!/error|exception|prisma|econn|timeout|undefined|null|\bp\d{4}\b|stack|<|\bat\s/i.test(n)?n:s.includes("unauthorized")||s.includes("unauthenticated")||s.includes("로그인 세션")?"로그인이 필요하거나 세션이 만료되었습니다. 페이지를 새로고침한 뒤 다시 시도해 주세요.":s.includes("permission denied")||s.includes("forbidden")||s.includes("access denied")||s.includes(" 403")?"이 작업을 수행할 권한이 없습니다.":s.includes("not found")||s.includes("no such")||s.includes("does not exist")?"대상을 찾을 수 없습니다. 목록을 새로고침한 뒤 다시 시도해 주세요.":s.includes("transaction")&&(s.includes("closed")||s.includes("timeout")||s.includes("aborted")||s.includes("expired"))?"한 번에 처리할 양이 많아 시간이 초과되었습니다. 나눠서 다시 시도해 주세요.":s.includes("econnreset")||s.includes("econnrefused")||s.includes("fetch failed")||s.includes("socket hang up")||s.includes("enotfound")||s.includes("network")?"서버 연결이 불안정합니다. 잠시 후 다시 시도해 주세요.":s.includes("timeout")||s.includes("timed out")||s.includes("etimedout")?"서버 응답 시간이 초과되었습니다. 잠시 후 다시 시도해 주세요.":s.includes("unique constraint")||s.includes("p2002")||s.includes("duplicate key")?"이미 등록되어 있는 항목입니다.":s.includes("no file provided")||s.includes("file provided")?"파일이 첨부되지 않았습니다. 파일을 선택한 뒤 다시 시도해 주세요.":s.includes("prisma")||/\bp\d{4}\b/.test(s)||s.includes("database")||s.includes("column ")||s.includes("relation ")?"데이터를 저장하는 중 문제가 발생했습니다. 잠시 후 다시 시도해 주세요.":t:t}},61858:function(e,t,n){n.d(t,{Bz:function(){return r},RQ:function(){return i},f6:function(){return l},hC:function(){return a}});let s={통합사회:.1,통합과학:.2,"생활과 윤리":1,"윤리와 사상":2,한국지리:3,세계지리:4,동아시아사:5,세계사:6,경제:7,"정치와 법":8,사회·문화:9,생활과윤리:1,윤리와사상:2,사회문화:9,정치와법:8,"한국 지리":3,"세계 지리":4,물리학Ⅰ:10,물리학1:10,물리1:10,물리Ⅰ:10,물리학:10,화학Ⅰ:11,화학1:11,화학:11,생명과학Ⅰ:12,생명과학1:12,생명과학:12,생명:12,지구과학Ⅰ:13,지구과학1:13,지구과학:13,물리학Ⅱ:14,물리학2:14,물리2:14,물리Ⅱ:14,화학Ⅱ:15,화학2:15,생명과학Ⅱ:16,생명과학2:16,생명2:16,지구과학Ⅱ:17,지구과학2:17,지구2:17},a=e=>e.includes("국어")?-4:e.includes("화법")||e.includes("작문")?-3.9:e.includes("언어")&&e.includes("매체")?-3.8:e.includes("수학")?-3:e.includes("확률")||e.includes("통계")?-2.9:e.includes("미적분")?-2.8:"기하"===e?-2.7:e.includes("영어")?-2:e.includes("한국사")?-1:s[e]?s[e]:999,r=e=>new Date().getFullYear()-e+1,i=e=>e>=2025?"5-GRADE":"9-GRADE",l=e=>"5-GRADE"===e?{domain:[1,6],ticks:[1,2,3,4,5],maxGrade:5}:{domain:[1,9],ticks:[1,2,3,4,5,6,7,8,9],maxGrade:9}},92804:function(e,t,n){n.d(t,{Ge:function(){return s}});function s(e,t,n){return!function(e){let t=e.trim().slice(-1);if(!t)return!1;let n=t.charCodeAt(0);return n>=44032&&n<=55203?(n-44032)%28!=0:t>="0"&&t<="9"&&["0","1","3","6","7","8"].includes(t)}(e)?n:t}},25450:function(e,t,n){n.d(t,{Fk:function(){return a}});var s=n(93448);function a(e){for(var t=arguments.length,n=Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return(0,s.cn)("inline-flex items-center justify-center h-8 px-3 rounded-full text-[13px] transition active:scale-[0.96]",e?"bg-white dark:bg-[#1C1C1E] text-zinc-900 dark:text-zinc-100 font-semibold border border-zinc-200/90 dark:border-white/[0.12] shadow-[0_1px_2px_rgba(0,0,0,0.04)]":"bg-zinc-100/80 dark:bg-zinc-800/60 text-zinc-500 dark:text-zinc-400 font-medium border border-transparent",...n)}}}]);

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.