PageSourceSearch

https://naemo.ai/_next/static/chunks/2407.43c9f8e3ddd9efba.js

js naemo.ai collected 2026-09-24 14:30:48 UTC 142,775 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2407],{32660:function(e,t,n){n.d(t,{Z:function(){return s}});let s=(0,n(79205).Z)("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]])},22135:function(e,t,n){n.d(t,{Z:function(){return s}});let s=(0,n(79205).Z)("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]])},45884:function(e,t,n){n.d(t,{Z:function(){return s}});let s=(0,n(79205).Z)("Maximize",[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]])},82431:function(e,t,n){n.d(t,{Z:function(){return s}});let s=(0,n(79205).Z)("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},44743:function(e,t,n){n.d(t,{Z:function(){return s}});let s=(0,n(79205).Z)("Send",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]])},23927:function(e,t,n){n.d(t,{Z:function(){return s}});let s=(0,n(79205).Z)("Table2",[["path",{d:"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18",key:"gugj83"}]])},17689:function(e,t,n){n.d(t,{Z:function(){return s}});let s=(0,n(79205).Z)("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]])},16011:function(e,t,n){n.d(t,{J5:function(){return l},Od:function(){return r},W:function(){return c},Y6:function(){return a},ln:function(){return i}}),n(83079);var s=n(12119),i=(0,s.$)("fc5f94b04a0542d499822142b7b4f64c39012342"),r=(0,s.$)("fca6dd844ba9770f5af8e9b00b684ad694adaa4a");(0,s.$)("a23c7989ead4c3f0bbc34ab968897e577d69c34e");var a=(0,s.$)("25b3af908b23b7a432042fc7fc768d9a77983d41");(0,s.$)("6b3568d6b307d0ad395124e72ce56f40a95ffa5e");var l=(0,s.$)("8909e13eb61723a8c65f1da87ec810139ad46edd"),c=(0,s.$)("610035678b1f5c2ab1d276b66f1f6b8d7da99c5b")},51013:function(e,t,n){n.d(t,{NU:function(){return x},ZP:function(){return o},nF:function(){return u}});var s=n(57437);n(2265);var i=n(76865),r=n(82431),a=n(64954),l=n(7888),c=n(92804),d=n(93448);function o(e){let{isLoading:t=!1,error:n=null,onRetry:o,isEmpty:u=!1,emptyTitle:m="아직 아무것도 없습니다",emptyDescription:h,emptyAction:p,skeleton:g,subject:f,size:b="md",className:v,children:j}=e;return n?(0,s.jsxs)("div",{role:"alert",className:(0,d.cn)("flex flex-col items-center justify-center text-center px-6 py-14 gap-3",v),children:[(0,s.jsx)(i.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:f?"".concat(f).concat((0,c.Ge)(f,"을","를")," 불러오지 못했습니다"):"내용을 불러오지 못했습니다"}),(0,s.jsx)("p",{className:"mt-1 text-[13px] text-zinc-600 dark:text-zinc-300 break-keep max-w-[320px]",children:(0,l.q)(n,"잠시 후 다시 시도해 주세요. 계속 안 되면 네트워크 상태를 확인해 주세요.")})]}),o&&(0,s.jsxs)("button",{type:"button",onClick:o,className:"inline-flex items-center gap-1.5 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 hover:bg-zinc-200 dark:hover:bg-zinc-700 active:scale-[0.97] transition",children:[(0,s.jsx)(r.Z,{size:14,"aria-hidden":"true"}),"다시 시도"]})]}):t?(0,s.jsxs)("div",{className:v,"aria-busy":"true","aria-live":"polite",children:[null!=g?g:(0,s.jsx)(x,{}),(0,s.jsx)("span",{className:"sr-only",children:"불러오는 중"})]}):u?(0,s.jsx)(a.Z,{title:m,description:h,action:p,size:b,className:v}):(0,s.jsx)(s.Fragment,{children:j})}function x(e){let{rows:t=5,className:n}=e;return(0,s.jsx)("div",{className:(0,d.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-pulse"}),(0,s.jsx)("div",{className:"flex-1 h-2 rounded-full bg-zinc-200/80 dark:bg-zinc-800 animate-pulse",style:{maxWidth:"".concat(70-8*t,"%")}})]},t))})}function u(e){let{cells:t=12,className:n,cellClassName:i}=e;return(0,s.jsx)("div",{className:(0,d.cn)("grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3 p-4",n),"aria-hidden":"true",children:Array.from({length:t}).map((e,t)=>(0,s.jsx)("div",{className:(0,d.cn)("h-20 rounded-xl bg-zinc-200/70 dark:bg-zinc-800 animate-pulse",i),style:{animationDelay:"".concat(t%6*60,"ms")}},t))})}},84200:function(e,t,n){n.d(t,{Z:function(){return x}});
1var s=n(57437),i=n(2265),r=n(7888),a=n(93448),l=n(45007),c=n(13100),d=n(92846),o=n(17829);function x(e){let{students:t,selectedStudentId:n,onSelectStudent:i,onOpenDashboard:l,totalStudentsCount:x,searchQuery:u,onSearchChange:h,isAdmin:p,error:g,onRetry:f}=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)(o.Z,{children:(0,s.jsx)("div",{className:"flex-1 overflow-y-auto px-4 mobile-scroll-with-floating","data-pull-scroll":!0,children:0===t.length?(0,s.jsx)("div",{className:"text-center py-16 flex flex-col items-center justify-center",children:g?(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)(g,"잠시 후 다시 시도해 주세요. 계속 안 되면 네트워크 상태를 확인해 주세요.")}),f&&(0,s.jsx)("button",{type:"button",onClick:f,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)(m,{})}):(0,s.jsxs)("div",{className:"space-y-[2px]",children:[!u&&l&&(0,s.jsxs)(c.E.button,{type:"button",whileTap:{scale:.98},transition:{type:"spring",stiffness:500,damping:30},onClick:l,className:(0,a.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!=x?x: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(),i(e.id)},className:(0,a.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,a.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,a.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}),p&&(0,s.jsxs)("span",{className:(0,a.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 u="naemo.studentEmptyGhostPlayed";function m(){let[e,t]=(0,i.useState)(!1);return(0,i.useEffect)(()=>{if(!window.matchMedia("(prefers-reduced-motion: reduce)").matches){try{if(sessionStorage.getItem(u))return;sessionStorage.setItem(u,"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:"설정에서 학생 명렬표를 등록하면 출결, 상담, 성적을 관리할 수 있습니다."})]})}},21235:function(e,t,n){n.d(t,{Od:function(){return r},R4:function(){return a}});var s=n(57437),i=n(93448);function r(e){let{className:t,variant:n="rect",width:r,height:a,style:l,...c}=e;return(0,s.jsx)("div",{className:(0,i.cn)("relative overflow-hidden bg-zinc-200/70 dark:bg-white/5 animate-shimmer",{text:"h-4 rounded-md",rect:"rounded-xl",circle:"rounded-full",card:"rounded-2xl"}[n],t),style:{width:void 0!==r?"number"==typeof r?"".concat(r,"px"):r:void 0,height:void 0!==a?"number"==typeof a?"".concat(a,"px"):a:void 0,...l},"aria-hidden":"true",...c})}function a(){return(0,s.jsxs)("div",{className:"space-y-3 py-2",children:[(0,s.jsx)(r,{variant:"rect",height:100,className:"w-full rounded-2xl"}),(0,s.jsx)(r,{variant:"rect",height:180,className:"w-full rounded-2xl"}),(0,s.jsx)(r,{variant:"rect",height:90,className:"w-full rounded-2xl"})]})}n(2265)},14697:function(e,t,n){n.r(t),n.d(t,{default:function(){return z}});
1var s=n(57437),i=n(2265),r=n(22135),a=n(40875),l=n(44743),c=n(93448);function d(e){let{options:t,value:n,onChange:r,className:a,textClassName:l,gradientClassName:d}=e,o=(0,i.useRef)(null),x=(0,i.useRef)([]),u=(0,i.useRef)([]),m=(0,i.useRef)(-1),h=(0,i.useRef)(0),p=(0,i.useRef)(0),g=(0,i.useRef)(!1),f=(0,i.useRef)(null),b=(0,i.useRef)(0),v=(0,i.useRef)(0),j=(0,i.useRef)(null),k=(0,i.useRef)(null),z=(0,i.useRef)(!1),w=(0,i.useRef)(null),N=(0,i.useRef)(t),y=(0,i.useRef)(n),C=(0,i.useRef)(r);N.current=t,y.current=n,C.current=r;let M=()=>(N.current.length-1)*36,S=e=>Math.min(Math.max(e,0),M()),E=e=>{N.current.forEach((t,n)=>{let s=x.current[n],i=u.current[n];if(!s||!i)return;let r=36*n-e;s.style.transform="translateY(".concat(44+r,"px)"),i.style.transform="rotateX(".concat(-(r/36*55),"deg) translateZ(").concat(45*Math.cos(r/36*(Math.PI/4))-45,"px)"),i.style.opacity=String(Math.max(.1,1-Math.abs(r/64.8)))});let t=Math.round(e/36);if(t!==m.current){var n,s;null===(n=u.current[m.current])||void 0===n||n.classList.remove("font-bold"),null===(s=u.current[t])||void 0===s||s.classList.add("font-bold"),m.current=t}},A=()=>{k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{let e=Math.round(h.current/36);h.current=36*e;let t=N.current;void 0!==t[e]&&t[e]!==y.current&&C.current(t[e])},150)};(0,i.useEffect)(()=>{let e;let t=n=>{var s;let i=null!==(s=j.current)&&void 0!==s?s:n;if(j.current=n,g.current)w.current=null,p.current=h.current,E(p.current);else if(w.current){let e=w.current;null===e.startTime&&(e.startTime=n);let t=Math.min(1,(n-e.startTime)/e.duration);p.current=e.startValue+(h.current-e.startValue)*(1-Math.pow(1-t,3)),E(p.current),t>=1&&(w.current=null)}else{let e=h.current-p.current;Math.abs(e)>.05?(p.current+=e*(1-Math.pow(.72,(n-i)/16.6667)),E(p.current)):p.current!==h.current&&(p.current=h.current,E(p.current))}e=requestAnimationFrame(t)};return e=requestAnimationFrame(t),()=>cancelAnimationFrame(e)},[]),(0,i.useEffect)(()=>{let e=o.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(),w.current=null,h.current=S(h.current+t(e)),A()},s=e=>{f.current=e.pointerId,b.current=e.clientY,v.current=p.current,k.current&&clearTimeout(k.current)},i=t=>{if(f.current!==t.pointerId)return;let n=t.clientY-b.current;if(!g.current){if(4>Math.abs(n))return;g.current=!0,w.current=null,e.setPointerCapture(t.pointerId)}h.current=S(v.current-n)},r=e=>{f.current===e.pointerId&&(f.current=null,g.current&&(g.current=!1,A()))};return e.addEventListener("wheel",n,{passive:!1}),e.addEventListener("pointerdown",s),e.addEventListener("pointermove",i),e.addEventListener("pointerup",r),e.addEventListener("pointercancel",r),()=>{e.removeEventListener("wheel",n),e.removeEventListener("pointerdown",s),e.removeEventListener("pointermove",i),e.removeEventListener("pointerup",r),e.removeEventListener("pointercancel",r),k.current&&clearTimeout(k.current)}},[]),(0,i.useEffect)(()=>{let e=t.indexOf(n);if(-1===e)return;let s=36*e;h.current=s,z.current||(p.current=s,E(s),z.current=!0)},[n,t]);let _=(e,t)=>{k.current&&clearTimeout(k.current);let n=36*t,s=Math.abs(n-p.current);h.current=n,w.current={startTime:null,startValue:p.current,duration:Math.min(500,Math.max(180,2.2*s))},r(e)};return(0,s.jsxs)("div",{className:(0,c.cn)("relative h-[124px] w-12 overflow-hidden bg-transparent select-none",a),style:{perspective:"800px"},children:[(0,s.jsxs)("div",{className:"absolute inset-0 pointer-events-none z-10",children:[(0,s.jsx)("div",{className:(0,c.cn)("absolute top-0 w-full h-[44px] bg-gradient-to-b from-white dark:from-[#191919] to-transparent",d)}),(0,s.jsx)("div",{className:(0,c.cn)("absolute bottom-0 w-full h-[44px] bg-gradient-to-t from-white dark:from-[#191919] to-transparent",d)})]}),(0,s.jsx)("div",{ref:o,role:"listbox",tabIndex:0,"aria-label":"값 선택","aria-activedescendant":"wheel-opt-".concat(t.indexOf(n)),onKeyDown:e=>{let s=t.indexOf(n);if(s<0)return;let i=s;if("ArrowDown"===e.key||"ArrowRight"===e.key)i=Math.min(t.length-1,s+1);else if("ArrowUp"===e.key||"ArrowLeft"===e.key)i=Math.max(0,s-1);else if("Home"===e.key)i=0;else if("End"===e.key)i=t.length-1;else if("PageDown"===e.key)i=Math.min(t.length-1,s+5);else{if("PageUp"!==e.key)return;i=Math.max(0,s-5)}e.preventDefault(),i!==s&&_(t[i],i)},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=>{x.current[t]=e},onClick:()=>_(e,t),id:"wheel-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=>{u.current[t]=e},className:"w-full h-full flex items-center justify-center pointer-events-none",style:{transformOrigin:"center center",backfaceVisibility:"hidden"}
1,children:(0,s.jsx)("span",{className:(0,c.cn)("text-base text-zinc-900 dark:text-zinc-200",l),children:e})})},t))})]})}var o=n(70809),x=n(37456),u=n(30166),m=n(64954),h=n(51013);let p=(0,u.default)(()=>Promise.all([n.e(5398),n.e(5268)]).then(n.bind(n,45268)),{loadableGenerated:{webpack:()=>[45268]},ssr:!1}),g=["#5b7fa6","#9b7ba8","#d97760","#d4a574","#6ba58a"];function f(e){return(0,x.k_)(e).map(e=>{var t,n;return null!==(n=null===(t=x.FT.find(t=>t.id===e))||void 0===t?void 0:t.label)&&void 0!==n?n:e}).join(" \xb7 ")}function b(e){let{title:t,action:n,children:i,flush:r=!1,className:a,contentClassName:l,icon:d}=e;return(0,s.jsxs)("div",{className:(0,c.cn)("bg-white dark:bg-[#191919] rounded-lg overflow-hidden flex flex-col shadow-sm dark:shadow-none",a),children:[(0,s.jsxs)("div",{className:"flex justify-between items-center px-4 py-3 shrink-0",children:[(0,s.jsxs)("h3",{className:"font-bold text-zinc-900 dark:text-zinc-200 text-sm flex items-center gap-2",children:[d&&(0,s.jsx)("span",{className:"text-zinc-400 dark:text-zinc-500",children:d}),t]}),n]}),(0,s.jsx)("div",{className:(0,c.cn)("flex-1 min-h-0 flex flex-col",r?"":(0,c.cn)("px-4 pb-4",l)),children:i})]})}let v=[1,2,3,4],j=[2,3,4,5,6,7,8,9,10,11,12,13,14,15],k=["1개","평균"];function z(e){let{students:t,isAdmin:n,isSystemAdmin:u=!1,onSelectStudent:z,studentGradeAverages:w={},studentGradeRecords:N={},studentMockAverages:y={},latestMockExams:C={},studentRoles:M={},isLoading:S=!1,error:E=null,onRetry:A,isMobile:_=!1}=e,[R,D]=(0,i.useState)(n?"class":"number"),[L,F]=(0,i.useState)("asc"),{openSettings:Z}=(0,o.Y)(),[I,G]=(0,i.useState)(!1),[T,O]=(0,i.useState)(2),[B,W]=(0,i.useState)(8),[P,U]=(0,i.useState)("1개"),[H,V]=(0,i.useState)(!1),[X,Y]=(0,i.useState)(null),[q,$]=(0,i.useState)(null),K=(0,i.useRef)(null),Q=(0,i.useRef)(null),J=(0,i.useRef)(null),ee=(0,i.useRef)(null),[et,en]=(0,i.useState)(!1),es=(0,i.useCallback)(()=>{en(!1),Y(null),$(null),V(!1)},[]),ei=(0,i.useCallback)((e,t)=>{let n=e.getBoundingClientRect();ee.current={clientX:n.left+Math.min(n.width/2,160),clientY:n.bottom-6},t(),en(!0)},[]),er=(0,i.useCallback)((e,t)=>{let n=t||ee.current;t&&(ee.current={clientX:t.clientX,clientY:t.clientY});let s=e.current,i=J.current;if(!s||!i||!n)return;let r=i.getBoundingClientRect(),a=n.clientX-r.left,l=n.clientY-r.top+i.scrollTop,c=s.offsetWidth||240,d=s.offsetHeight||80,o=a+12;a+12+c>i.clientWidth-12&&(o=Math.max(12,a-c-12)),o=Math.max(12,Math.min(o,i.clientWidth-c-12));let x=l+14;window.innerHeight-n.clientY<d+25&&(x=Math.max(i.scrollTop+10,l-d-12)),s.style.left="".concat(o,"px"),s.style.top="".concat(x,"px"),s.style.opacity="1"},[]);(0,i.useEffect)(()=>{(X||q)&&er(K)},[X,q,er]),(0,i.useEffect)(()=>{H&&er(Q)},[H,er]),(0,i.useEffect)(()=>{if(!et)return;let e=e=>{let t=e.target;null!=t&&t.closest("[data-chart-detail-trigger]")||es()},t=e=>{"Escape"===e.key&&es()};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)}},[et,es]);let ea=t.length,el=(0,i.useMemo)(()=>t.filter(e=>void 0!==w[e.id]&&null!==w[e.id]).map(e=>({id:e.id,name:e.name,avg:w[e.id]})).sort((e,t)=>e.avg-t.avg).slice(0,5),[t,w]),ec=(0,i.useMemo)(()=>{let e=[];return t.forEach(t=>{let n=N[t.id]||[],s=Array.from(new Set(n.map(e=>"".concat(e.year,"-").concat(e.semester)))).sort().reverse();if(s.length>=2){let i=s[0],r=s[1],a=n.filter(e=>"".concat(e.year,"-").concat(e.semester)===i),l=n.filter(e=>"".concat(e.year,"-").concat(e.semester)===r);if(0===a.length||0===l.length)return;let c=a.reduce((e,t)=>e+(t.gradeLevel||0),0)/a.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,N]),ed=(0,i.useMemo)(()=>{let e={};t.forEach(t=>{for(let n of(0,x.k_)(t.careerCategory))e[n]=(e[n]||0)+1});let n=Object.entries(e).map(e=>{var n;let[s,i]=e,r=t.filter(e=>(0,x.k_)(e.careerCategory).includes(s));return{id:s,label:(null===(n=x.FT.find(e=>e.id===s))||void 0===n?void 0:n.label)||"기타",count:i,studentNames:r.map(e=>e.name)}
1}).sort((e,t)=>t.count-e.count);if(n.length<=4)return n;let s=n.slice(0,4),i=n.slice(4);return[...s,{id:"__others__",label:"ê·¸ 외",count:i.reduce((e,t)=>e+t.count,0),studentNames:i.flatMap(e=>e.studentNames),groupedNames:i.map(e=>({label:e.label,names:e.studentNames}))}]},[t]);(0,i.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 eo=(0,i.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=w[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,w]),ex=(0,i.useMemo)(()=>t.filter(e=>{let t=C[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 i=[];if((n["탐구1"]||n["사회"])&&i.push(n["탐구1"]||n["사회"]),(n["탐구2"]||n["과학"])&&i.push(n["탐구2"]||n["과학"]),i.length>0){if("1개"===P)s.push(Math.min(...i));else{let e=i.reduce((e,t)=>e+t,0)/i.length;s.push(e)}}return!(s.length<T)&&[...s].sort((e,t)=>e-t).slice(0,T).reduce((e,t)=>e+t,0)<=B}).sort((e,t)=>e.number-t.number),[t,C,T,B,P]),eu=(0,i.useMemo)(()=>[...t].sort((e,t)=>{var s,i,r,a,l,c,d,o,x,u,m,h;let p,g;switch(R){case"number":p=e.number,g=t.number;break;case"name":p=e.name,g=t.name;break;case"class":p="".concat(String(null!==(s=e.grade)&&void 0!==s?s:0).padStart(2,"0"),"-").concat(String(null!==(i=e.classNum)&&void 0!==i?i:0).padStart(2,"0"),"-").concat(String(e.number).padStart(3,"0")),g="".concat(String(null!==(r=t.grade)&&void 0!==r?r:0).padStart(2,"0"),"-").concat(String(null!==(a=t.classNum)&&void 0!==a?a:0).padStart(2,"0"),"-").concat(String(t.number).padStart(3,"0"));break;case"career":p=f(e.careerCategory),g=f(t.careerCategory);break;case"grade":p=null!==(l=w[e.id])&&void 0!==l?l:10,g=null!==(c=w[t.id])&&void 0!==c?c:10;break;case"mock":p=null!==(d=y[e.id])&&void 0!==d?d:10,g=null!==(o=y[t.id])&&void 0!==o?o:10;break;case"role":{let n=e=>Object.values(M[e]||{}).filter(e=>"string"==typeof e&&""!==e.trim()).join(", "),s=n(e.id),i=n(t.id);p=s,g=i,s||i||(p=e.number,g=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")),g="".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,g=t.number)}return p<g?"asc"===L?-1:1:p>g?"asc"===L?1:-1:0}),[t,R,L,w,y,M]),em=e=>{R===e?"asc"===L?F("desc"):(D(n?"class":"number"),F("asc")):(D(e),F("asc"))},eh=e=>{let{field:t,always:n}=e,i=R===t;return n||i?i?"asc"===L?(0,s.jsx)(r.Z,{size:12,className:"text-zinc-600 dark:text-zinc-200"}):(0,s.jsx)(a.Z,{size:12,className:"text-zinc-600 dark:text-zinc-200"}):(0,s.jsx)(r.Z,{size:12,className:"text-zinc-300 dark:text-zinc-500"}):null};return E?(0,s.jsx)("div",{className:"flex-1 flex items-center justify-center p-8",children:(0,s.jsx)(h.ZP,{error:E,onRetry:A,subject:"학급 현황",children:null})}):S&&0===ea?(0,s.jsxs)("div",{className:"flex-1 p-8 max-w-[1600px] mx-auto w-full","aria-busy":"true","aria-live":"polite",children:[(0,s.jsx)("div",{className:"grid grid-cols-1 lg:grid-cols-2 2xl:grid-cols-3 gap-3",children:Array.from({length:6}).map((e,t)=>(0,s.jsxs)("div",{className:"rounded-xl bg-[#fafaf9] dark:bg-[#18181b] border border-zinc-200/60 dark:border-white/[0.06] p-4",children:[(0,s.jsx)("div",{className:"h-3.5 w-28 rounded bg-zinc-200/80 dark:bg-zinc-800 animate-pulse mb-4"}),(0,s.jsx)(h.NU,{rows:4})]},t))}),(0,s.jsx)("span",{className:"sr-only",children:"학급 현황을 불러오는 중"})]}):0===ea?(0,s.jsx)("div",{className:"flex-1 flex items-center justify-center p-8",children:(0,s.jsx)(m.Z,{size:"lg",title:"학생 데이터가 없습니다",description:"학생을 등록하여 학급 현황 분석과 ë
1Œ€ì‹œë³´ë“œë¥¼ 확인하세요.",action:(0,s.jsx)("button",{onClick:()=>Z("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&&(J.current=e)},className:(0,c.cn)("flex-1 overflow-y-auto custom-scrollbar relative",_?"pb-24":"bg-[#fafaf9] dark:bg-[#09090b]"),children:[(0,s.jsxs)("div",{className:(0,c.cn)("p-4 space-y-4 max-w-[1600px] mx-auto",_&&"px-4 py-4 space-y-4 mobile-scroll-bottom"),children:[(0,s.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 2xl:grid-cols-3 gap-4",children:[(0,s.jsx)(b,{title:"희망 진로 분포",action:(0,s.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 shrink-0",children:"* 복수 응답 포함"}),className:"lg:order-1 2xl:order-1",children:0===ed.length?(0,s.jsx)(m.Z,{size:"sm",title:"아직 진로를 적은 학생이 없습니다",description:"학생 상세의 '희망 진로 분야'에서 고르면 여기에 분포가 나타납니다."}):(0,s.jsx)("div",{className:"space-y-1.5 pt-1",children:ed.map((e,t)=>{let n=ea>0?Math.max(4,e.count/ea*100):4,i="__none__"===e.id;return(0,s.jsxs)("button",{type:"button","data-chart-detail-trigger":!0,"aria-label":"".concat(e.label," ").concat(e.count,"명 — 학생 명단 보기"),className:"w-full 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=>ei(t.currentTarget,()=>{Y(null),$(e)}),onMouseEnter:t=>{et||(ee.current={clientX:t.clientX,clientY:t.clientY},$(e))},onMouseLeave:()=>{et||$(null)},onMouseMove:e=>{et||er(K,e)},children:[(0,s.jsx)("div",{className:"w-28 text-[11px] 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-right 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:i?"#d4d4d8":g[t%g.length]}})}),(0,s.jsxs)("div",{className:"text-[11px] 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-8 text-right shrink-0",children:[e.count,"명"]})]},e.id)})})}),(0,s.jsx)(b,{title:"성적 구간별 분포",className:"lg:order-2 2xl:order-2",action:(0,s.jsx)("div",{className:"text-[11px] text-zinc-400",children:"내신 기준"}),children:0===eo.length?(0,s.jsx)(m.Z,{size:"sm",title:"내신 성적이 아직 없습니다",description:"성적 파일을 올리면 등급 구간별 분포를 ë³¼ 수 있습니다."}):(0,s.jsx)("div",{className:"space-y-1.5 pt-1",children:eo.map((e,t)=>{let n=Math.max(...eo.map(e=>e.count),1),i=Math.max(4,e.count/n*100);return(0,s.jsxs)("div",{className:"flex items-center",children:[(0,s.jsx)("div",{className:"w-16 shrink-0"}),(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=>ei(t.currentTarget,()=>{$(null),Y(e)}),onMouseEnter:t=>{et||(ee.current={clientX:t.clientX,clientY:t.clientY},Y(e))},onMouseLeave:()=>{et||Y(null)},onMouseMove:e=>{et||er(K,e)},children:[(0,s.jsx)("div",{className:"w-12 text-[11px] 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-right 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 group-hover/grade-row:brightness-110",style:{width:"".concat(i,"%"),backgroundColor:g[t%g.length]}})}),(0,s.jsxs)("div",{className:"text-[11px] 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-8 text-right shrink-0",children:[e.count,"명"]})]})]},e.label)})})}),(0,s.jsx)(b,{title:"수능 최저 등급",className:"lg:order-3 2xl:order-3",contentClassName:"px-1",action:(0,s.jsx)("div",{className:"text-[11px] text-zinc-400",children:"최근 모의고사 기준"}),children:(0,s.jsxs)("div",{className:"flex flex-col items-center justify-center h-full",children:[(0,s.jsxs)("div",{className:"w-full flex items-center justify-center gap-0.5 sm:gap-1 lg:gap-[2px] 2xl:gap-1 py-2 whitespace-nowrap overflow-hidden select-none",children:[(0,s.jsx)(d,{options:v,value:T,onChange:e=>O(Number(e)),className:"w-8 sm:w-9 lg:w-7 xl:w-8 2xl:w-8 shrink-0",textClassName:"text-[13.5px] sm:text-sm lg:text-xs xl:text-sm 2xl:text-base font-semibold"}),(0,s.jsx)("span",{className:"text-[13px] sm:text-sm lg:text-xs xl:text-sm 2xl:text-base font-medium text-zinc-600 dark:text-zinc-400 px-0.5 xl:px-1 2xl:px-[3px] shrink-0",children:"개 과목 합"}),(0,s.jsx)(d,{options:j,value:B,onChange:e=>W(Number(e)),className:"w-8 sm:w-9 lg:w-7 xl:w-8 2xl:w-8 shrink-0",textClassName:"text-[13.5px] sm:text-sm lg:text-xs xl:text-sm 2xl:text-base font-semibold"}),(0,s.jsx)("span",{className:"text-[13px] sm:text-sm lg:text-xs xl:text-sm 2xl:text-base font-medium text-zinc-600 dark:text-zinc-400 px-0.5 xl:px-1 2xl:px-[3px] shrink-0",children:"등급 이내, 탐구"}),(0,s.jsx)(d,{options:k,value:P,onChange:e=>U(String(e)),className:"w-11 sm:w-12 lg:w-10 xl:w-11 2xl:w-12 shrink-0",textClassName:"text-[13.5px] sm:text-sm lg:text-xs xl:text-sm 2xl:text-base font-semibold"}),(0,s.jsx)("span",{className:"text-[13px] sm:text-sm lg:text-xs xl:text-sm 2xl:text-base 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:"w-full relative mt-3 2xl:mt-5",children:(0,s.jsxs)("button",{type:"button","data-chart-detail-trigger":!0,"aria-label":"ì¡°ê±´ 충족 학생 ".concat(ex.length,"명 — 명단 보기"),className:"w-full flex items-center justify-end gap-2 pr-1 cursor-pointer group",onClick:e=>ei(e.currentTarget,()=>V(!0)),onMouseEnter:e=>{et||(ee.current={clientX:e.clientX,clientY:e.clientY},V(!0))},onMouseMove:e=>{et||er(Q,e)},onMouseLeave:()=>{et||V(!1)},children:[(0,s.jsx)("span",{className:"text-xs font-medium text-zinc-500",children:"ì¡°ê±´ 충족 학생"}),(0,s.jsxs)("span",{className:"text-xs font-bold text-blue-600 dar
1k:text-blue-400 group-hover:text-blue-500 transition-colors",children:[ex.length,"명"]})]})})]})}),(0,s.jsx)(b,{title:"내신 성적 TOP5",className:"lg:order-4 2xl:order-4",children:0===el.length?(0,s.jsx)(m.Z,{size:"sm",className:"flex-1 min-h-[160px]",title:"내신 성적이 아직 없습니다"}):(0,s.jsx)("div",{className:"space-y-2",children:el.map((e,t)=>(0,s.jsxs)("div",{onClick:()=>null==z?void 0:z(e.id),className:"bg-zinc-50 dark:bg-[#27272A] border border-zinc-100 dark:border-transparent rounded-md px-3 py-2 flex justify-between items-center transition-colors cursor-pointer hover:bg-zinc-100 dark:hover:bg-[#323235]",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"w-5 h-5 rounded-full flex items-center justify-center text-[10px] font-bold bg-zinc-200 dark:bg-zinc-700 text-zinc-600 dark:text-zinc-300 shrink-0",children:t+1}),(0,s.jsx)("span",{className:"text-xs text-zinc-700 dark:text-zinc-300",children:e.name})]}),(0,s.jsxs)("span",{className:"text-xs font-bold text-zinc-500 dark:text-zinc-400",children:[e.avg.toFixed(1),"등급"]})]},e.id))})}),(0,s.jsx)(b,{title:"성적 상승 TOP5",className:"lg:order-5 2xl:order-5",children:0===ec.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-xs text-zinc-500 dark:text-zinc-400 font-normal",children:"비교할 학기가 없습니다"}),(0,s.jsx)("p",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 mt-1 font-normal",children:"두 학기 이상 쌓이면 성적 변화를 보여드립니다."})]}):(0,s.jsx)("div",{className:"space-y-2",children:ec.filter(e=>"up"===e.change).slice(0,5).map((e,t)=>(0,s.jsxs)("div",{onClick:()=>null==z?void 0:z(e.id),className:"bg-zinc-50 dark:bg-[#27272A] border border-zinc-100 dark:border-transparent rounded-md px-3 py-2 flex justify-between items-center transition-colors cursor-pointer hover:bg-zinc-100 dark:hover:bg-[#323235]",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"w-5 h-5 rounded-full flex items-center justify-center text-[10px] font-bold bg-zinc-200 dark:bg-zinc-700 text-zinc-600 dark:text-zinc-300 shrink-0",children:t+1}),(0,s.jsx)("span",{className:"text-xs text-zinc-700 dark:text-zinc-300",children:e.name})]}),(0,s.jsxs)("span",{className:"text-xs font-bold text-zinc-400 flex items-center gap-0.5",children:[(0,s.jsx)("span",{className:"text-emerald-500",children:"+"}),e.delta.toFixed(2),"등급"]})]},e.id))})}),(0,s.jsx)(b,{title:"성적 하락 TOP5",className:"lg:order-6 2xl:order-6",children:0===ec.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-xs text-zinc-500 dark:text-zinc-400 font-normal",children:"비교할 학기가 없습니다"}),(0,s.jsx)("p",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 mt-1 font-normal",children:"두 학기 이상 쌓이면 성적 변화를 보여드립니다."})]}):(0,s.jsx)("div",{className:"space-y-2",children:ec.filter(e=>"down"===e.change).slice(0,5).map((e,t)=>(0,s.jsxs)("div",{onClick:()=>null==z?void 0:z(e.id),className:"bg-zinc-50 dark:bg-[#27272A] border border-zinc-100 dark:border-transparent rounded-md px-3 py-2 flex justify-between items-center transition-colors cursor-pointer hover:bg-zinc-100 dark:hover:bg-[#323235]",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"w-5 h-5 rounded-full flex items-center justify-center text-[10px] font-bold bg-zinc-200 dark:bg-zinc-700 text-zinc-600 dark:text-zinc-300 shrink-0",children:t+1}),(0,s.jsx)("span",{className:"text-xs text-zinc-700 dark:text-zinc-300",children:e.name})]}),(0,s.jsxs)("span",{className:"text-xs font-bold text-zinc-400 flex items-center gap-0.5",children:[(0,s.jsx)("span",{className:"text-rose-500",children:"-"}),e.delta.toFixed(2),"등급"]})]},e.id))})})]}),(0,s.jsx)(b,{title:(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("span",{children:"전체 학생 목록"}),(0,s.jsxs)("span",{className:"text-xs text-zinc-400 font-normal",children:[ea,"명"]})]}),action:t.length>0?(0,s.jsxs)("button",{onClick:()=>G(!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)(l.Z,{size:11,className:"shrink-0"}),(0,s.jsx)("span",{className:"whitespace-nowrap",children:"모바일 성적표 배부"})]}):void 0,flush:!0,children:(0,s.jsx)("div",{className:"overflow-x-auto",children:(0,s.jsxs)("table",{className:"w-full text-xs 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:()=>em("grade"),children:(0,s.jsxs)("div",{className:"flex items-center justify-center gap-1",children:[(0,s.jsx)(r.Z,{size:12,className:"invisible shrink-0"}),(0,s.jsx)("span",{children:"내신 등급"}),(0,s.jsx)(eh,{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:()=>em("mock"),children:(0,s.jsxs)("div",{className:"flex items-center justify-center gap-1",children:[(0,s.jsx)(r.Z,{size:12,className:"invisible shrink-0"}),(0,s.jsx)("span",{children:"모의고사 등급"}),(0,s.jsx)(eh,{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:eu.map((e,t)=>{var i,r,a,l;return(0,s.jsxs)("tr",{onClick:()=>null==z?void 0:z(e.id),className:(0,c.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!==(a=e.grade)&&void 0!==a?a:"-"}),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.classNum)&&void 0!==l?l:"-"}),(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:void 0!==w[e.id]&&null!==w[e.id]?(0,s.jsx)("span",{className:"font-medium text-zinc-700 dark:text-zinc-300",children:null===(i=w[e.id])||void 0===i?void 0:i.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:void 0!==y[e.id]&&null!==y[e.id]?(0,s.jsx)("span",{className:"font-medium text-zinc-700 dark:text-zinc-300",children:null===(r=y[e.id])||void 0===r?void 0:r.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(M[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 text-[11px]",children:"-"})})()}),(0,s.jsx)("td",{className:"px-4 py-2.5 text-center",children:f(e.careerCategory)?(0,s.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300",children:f(e.careerCategory)}):(0,s.jsx)("span",{className:"text-zinc-300 dark:text-zinc-500",children:"-"})})]},e.id)})})]})})})]}),(X||q)&&(X||q).studentNames.length>0&&(0,s.jsx)("div",{ref:K,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:(X||q).groupedNames?(0,s.jsx)("div",{className:"space-y-1.5 px-0.5",children:(X||q).groupedNames.map((e,t)=>(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 font-medium",children:e.label}),(0,s.jsx)("span",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 font-medium",children:": "}),(0,s.jsx)("span",{className:"text-[11px] 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:(X||q).studentNames.map((e,t)=>(0,s.jsx)("span",{className:"text-[11px] text-zinc-700 dark:text-zinc-200 whitespace-nowrap font-semibold",children:e},t))})}),H&&ex.length>0&&(0,s.jsx)("div",{ref:Q,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:ex.map((e,t)=>(0,s.jsxs)("span",{className:"text-[11px] text-zinc-700 dark:text-zinc-200 whitespace-nowrap font-semibold",children:[e.number,". ",e.name]},e.id))})}),I&&(0,s.jsx)(p,{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:()=>G(!1),isSystemAdmin:u})]})}},48457:function(e,t,n){let s;n.r(t),n.d(t,{default:function(){return eD}});var i=n(57437),r=n(98319),a=n(10136),l=n(2265),c=n(30166),d=n(29827),o=n(11713),x=n(73247),u=n(95805),m=n(32660),h=n(45675),p=n(33245),g=n(99397),f=n(18930),b=n(17689),v=n(32489),j=n(30401);function k(e){var t;let{size:n=16,className:s="",...r}=e;return(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 430 430",fill:"none",stroke:"currentColor",className:s,...r,children:(0,i.jsxs)("g",{strokeLinejoin:"round",strokeWidth:null!==(t=r.strokeWidth)&&void 0!==t?t:22,children:[(0,i.jsx)("path",{d:"M55 350c0-63.513 51.487-115 115-115h90c63.513 0 115 51.487 115 115v25H55z"}),(0,i.jsx)("path",{strokeLinecap:"round",strokeMiterlimit:"27.88",d:"M272.496 76.733C283.423 89.78 290 106.648 290 125c0 41.478-33.628 75-75 75s-75-33.628-75-75 33.628-75 75-75c23.126 0 43.706 10.396 57.496 26.733"})]})})}function z(e){var t;let{size:n=16,className:s="",...r}=e;return(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 430 430",fill:"none",stroke:"currentColor",className:s,...r,children:(0,i.jsxs)("g",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:null!==(t=r.strokeWidth)&&void 0!==t?t:22,children:[(0,i.jsx)("path",{d:"M215 56.04v51.37"}),(0,i.jsx)("path",{d:"M241.69 134.94h106.75l40.03 66.72h-80.06l-93.4-93.4-93.4 93.4H41.54l40.03-66.72h106.75"}),(0,i.jsx)("path",{d:"M255.35 375.21h-80.7v-66.44c0-22.28 18.06-40.35 40.35-40.35 22.28 0 40.35 18.06 40.35 40.35zM215 268.42v105.9"}),(0,i.jsx)("path",{d:"M68.22 201.66v173.46h293.56V201.66"}),(0,i.jsx)("path",{d:"M241.64 188.27c0 14.71-11.93 26.64-26.64 26.64s-26.64-11.93-26.64-26.64 11.93-26.64 26.64-26.64 26.64 11.93 26.64 26.64m-93.36 85.93h-40.03v-20.02c0-11.05 8.96-20.02 20.01-20.02s20.01 8.96 20.01 20.02v20.02zm173.47 0h-40.03v-20.02c0-11.05 8.96-20.02 20.01-20.02s20.01 8.96 20.01 20.02v20.02zM281.72 81.57H215V41.54h66.72l-19.84 20.02z"})]})})}function w(e){var t;let{size:n=16,className:s="",...r}=e;return(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 430 430",fill:"none",stroke:"currentColor",className:s,...r,children:(0,i.jsxs)("g",{strokeLinejoin:"round",strokeWidth:null!==(t=r.strokeWidth)&&void 0!==t?t:22,children:[(0,i.jsx)("path",{d:"M150 375V230H80v145m170 0V55h-70v320m170 0V165h-70v210"}),(0,i.jsx)("path",{strokeLinecap:"round",strokeMiterlimit:"14.8",d:"M55 375h320"})]})})}function N(e){var t;let{size:n=16,className:s="",...r}=e;return(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 430 430",fill:"none",stroke:"currentColor",className:s,...r,children:(0,i.jsxs)("g",{strokeLinejoin:"round",strokeWidth:null!==(t=r.strokeWidth)&&void 0!==t?t:22,children:[(0,i.jsx)("path",{strokeLinecap:"round",d:"M311 343v59l-26-16-26 16v-53"}),(0,i.jsx)("path",{d:"M400 375c-12.924-19.846-49.454-34.151-92.5-34.151S227.924 355.154 215 375V104h.018c.986-27.153 42.014-49 92.482-49s91.496 21.847 92.482 49H400zm-185 0c-12.924-19.846-49.454-34.151-92.5-34.151S42.924 355.154 30 375V104h.018c.986-27.153 42.014-49 92.482-49s91.496 21.847 92.482 49H215z"}),(0,i.jsx)("path",{strokeLinecap:"round",d:"M185 183.408C168.539 175.082 146.595 170 122.5 170s-46.039 5.082-62.5 13.408m125-49.269C168.539 125.98 146.595 121 122.5 121s-46.039 4.98-62.5 13.14m125 98.268C168.539 224.082 146.595 219 122.5 219s-46.039 5.082-62.5 13.408m310 49C353.539 273.082 331.595 268 307.5 268s-46.039 5.082-62.5 13.408m125-49.269C353.539 223.98 331.595 219 307.5 219s-46.039 4.98-62.5 13.14"})]})})}function y(e){var t;let{size:n=16,className:s="",...r}=e,a=null!==(t=r.strokeWidth)&&void 0!==t?t:22,l=Math.round(1.6*Number(a));return(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 430 430",fill:"none",stroke:"currentColor",className:s,...r,children:(0,i.jsxs)("g",{strokeLinecap:"round",strokeLinejoin:"round",children:[(0,i.jsx)("path",{strokeWidth:a,d:"m322.4 202.27-.44 94.52s-27.49 50.29-107.05 50.03c-80.67-.26-108.85-50.03-108.85-50.03l.44-94.52"}),(0,i.jsx)("path",{strokeWidth:a,d:"M37.25 147.75h-2.1L35 176.78l179.49 63.78 180.45-64.03.03-28.69h-5.92m5.86-.03L214.49 84 35 147.78l179.49 63.78z"}),(0,i.jsx)("path",{strokeWidth:a,d:"m215.47 146.78 77 28v105m0 2.5v23.84"}),(0,i.jsx)("path",{strokeWidth:l,d:"M292.47 282.28v23.84"})]})})}function C(e){var t;let{size:n=16,className:s="",...r}=e,a="print-icon-mask-".concat(l.useId().replace(/:/g,"")),c=null!==(t=r.strokeWidth)&&void 0!==t?t:22;return(0,i.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 430 430",fill:"none",stroke:"currentColor",className:s,...r,children:[(0,i.jsx)("mask",{id:a,width:"367",height:"248",x:"32",y:"101",maskUnits:"userSpaceOnUse",style:{maskType:"alpha"},children:(0,i.jsx)("path",{fill:"#D9D9D9",stroke:"none",d:"M140 101.783V160h150v-58.217h108.035v246.883H290V300H140v48.666H32.889V101.783z"})}),(0,i.jsxs)("g",{strokeWidth:c,mask:"url(#".concat(a,")"),children:[(0,i.jsx)("path",{strokeLinejoin:"round",d:"m356.809 143.37 28.15 43.789a20 20 0 0 1 2.278 16.743l-37.87 122.026A20 20 0 0 1 330.266 340H99.734a20 20 0 0 1-19.101-14.072l-37.87-122.026a20 20 0 0 1 2.278-16.743l28.15-43.789A40 40 0 0 1 106.838 125
1h216.324a40 40 0 0 1 33.647 18.37Z"}),(0,i.jsx)("path",{strokeLinecap:"round",d:"M45 195h340"})]}),(0,i.jsxs)("g",{strokeWidth:c,children:[(0,i.jsx)("path",{strokeLinejoin:"round",d:"M140 265v115h150V265"}),(0,i.jsx)("path",{strokeLinecap:"round",d:"M175 305h80m-80 35h80"}),(0,i.jsx)("path",{strokeLinejoin:"round",d:"M290 160V45H140v115"}),(0,i.jsx)("path",{strokeLinecap:"round",d:"M125 265h180M125 160h180"})]}),(0,i.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeMiterlimit:"10",strokeWidth:1.25*Number(c),d:"M88.49 228.5h.01m30 0h.01"})]})}function M(e){var t;let{size:n=16,className:s="",...r}=e;return(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 430 430",fill:"none",stroke:"currentColor",className:s,...r,children:(0,i.jsxs)("g",{strokeLinecap:"round",strokeLinejoin:"round",strokeMiterlimit:"10",strokeWidth:null!==(t=r.strokeWidth)&&void 0!==t?t:22,children:[(0,i.jsx)("path",{d:"M260 30v25c0 5.523-4.477 10-10 10h-70c-5.523 0-10-4.477-10-10V30"}),(0,i.jsx)("path",{d:"M105 50c0-11.046 8.954-20 20-20h180c11.046 0 20 8.954 20 20v330c0 11.046-8.954 20-20 20H125c-11.046 0-20-8.954-20-20z"}),(0,i.jsx)("path",{d:"M260 365h-90"})]})})}var S=n(64954),E=n(35596),A=n(33145),_=n(21751),R=n(84200),D=n(83008),L=n(40875),F=n(93448),Z=n(70809),I=n(54696);let G=e=>e&&"string"==typeof e?e.replace(/\*\*/g,"").replace(/\*/g,"").replace(/__/g,"").trim():e;function T(e){let{title:t,content:n}=e,[s,r]=(0,l.useState)(!1);return(0,i.jsxs)("div",{className:(0,F.cn)("border border-zinc-100 dark:border-white/10 rounded-xl bg-white dark:bg-zinc-800/40 overflow-hidden transition-all",!s&&"hover:bg-zinc-50 dark:hover:bg-zinc-800/70"),children:[(0,i.jsxs)("button",{onClick:()=>r(!s),className:"w-full px-4 h-[38px] flex items-center justify-between group",children:[(0,i.jsx)("span",{className:(0,F.cn)("text-[12.5px] font-bold transition-colors truncate pr-4",s?"text-zinc-900 dark:text-white":"text-zinc-700 dark:text-zinc-400 group-hover:text-zinc-900 dark:group-hover:text-white"),children:t}),(0,i.jsx)(L.Z,{size:14,className:(0,F.cn)("text-zinc-400 dark:text-zinc-500 transition-transform duration-300 shrink-0",s&&"rotate-180")})]}),(0,i.jsx)("div",{className:(0,F.cn)("grid transition-all duration-300 ease-in-out",s?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0"),children:(0,i.jsx)("div",{className:"overflow-hidden",children:(0,i.jsx)("div",{className:"px-5 pb-5 text-[13px] text-zinc-600 dark:text-zinc-400 leading-relaxed border-t border-zinc-50 dark:border-white/5 pt-4 bg-zinc-50/30 dark:bg-black/20 whitespace-pre-wrap font-medium",children:n})})})]})}function O(e){let{title:t,children:n,className:s,rightElement:r,isMobile:a=!1}=e;return(0,i.jsxs)("div",{className:(0,F.cn)("rounded-xl overflow-hidden flex flex-col h-full",a?"bg-white dark:bg-[#1C1C1E] border border-zinc-200/60 dark:border-white/[0.08] shadow-sm":"bg-[#FAFAF9] dark:bg-[#18181b]",s),children:[(0,i.jsxs)("div",{className:"flex justify-between items-center px-4 py-3",children:[(0,i.jsx)("h3",{className:"font-semibold text-zinc-900 dark:text-zinc-200 text-sm",children:t}),r]}),(0,i.jsx)("div",{className:(0,F.cn)("flex-1",a?"px-3 pb-3":"px-6 pb-5"),children:n})]})}function B(e){let{message:t}=e;return(0,i.jsx)("div",{className:"w-full py-4 text-center text-[11px] text-zinc-400 dark:text-zinc-400",children:(0,i.jsx)("span",{className:"font-medium",children:t})})}var W=e=>{let{studentId:t,attendanceRecords:n,activityRecords:s,seteukRecords:r,studentName:a,studentGrade:c,studentClass:d,studentNumber:o,lifeRecordAnalysis:x,overallOpinion:u,isMobile:m=!1}=e,{openSettings:h}=(0,Z.Y)(),g=(0,I.Dv)(),[f,v]=(0,l.useState)(x);(0,l.useEffect)(()=>{if(v(x),g||!t)return;let e=!1;return(async()=>{try{let s=await (0,D.X)("getStudentLifeRecordAnalysis",{studentId:t},{path:"/student-life-record"});if(!e&&(null==s?void 0:s.success)&&s.data){var n;v(null!==(n=s.data.lifeRecordAnalysis)&&void 0!==n?n:null)}}catch(e){}})(),()=>{e=!0}},[t,g]);let j=()=>{g?window.dispatchEvent(new CustomEvent("open-login-modal")):h("record-grade",t)},{summary:k="",strengths:z=[],weaknesses:w=[],attendance:N=[],activities:y=[],seteuk:C=[],behaviorKeywords:M=[],recommendations:E=[],potentialMajors:A=[],attendanceSummary:_="",updatedAt:R="",pdfFileKey:L=""}=f||{},F=G(k),W=G(_),P=(Array.isArray(z)?z:[]).map(e=>G(e)),U=(Array.isArray(w)?w:[]).map(e=>G(e)),H=(Array.isArray(y)?y:[]).map(e=>({...e,name:G(e.name||""),details:G(e.details||"")})),V=(Array.isArray(C)?C:[]).map(e=>({...e,subject:G(e.subject||""),details:G(e.details||e.analysis||"")})),X=(Array.isArray(M)?M:[]).map(e=>G(e)),Y=(Array.isArray(E)?E:[]).map(e=>"string"==typeof e?G(e):"object"==typeof e&&null!==e?{...e,suggestion:G(e.suggestion||e.activity||e.title||e.text||"")}:e),q=(Array.isArray(N)?N:[]).map(e=>({...e,type:G(e.type||""),reason:G(e.reason||e.details||"")})),$=(Array.isArray(A)?A:[]).map(e=>G(e)),K={autonomous:H.filter(e=>{var t;return"autonomous"===e.category||(null===(t=e.category)||void 0===t?void 0:t.includes("자율"))}),career:H.filter(e=>{var t;return"career"===e.category||(null===(t=e.category)||void 0===t?void 0:t.includes("진로"))}),club:H.filter(e=>{var t;return"club"===e.category||(null===(t=e.category)||void 0===t?void 0:t.includes("동아리"))}),others:H.filter(e=>{var t,n,s;return!["autonomous","career","club"].includes(e.category)&&!(null===(t=e.category)||void 0===t?void 0:t.includes("자율"))&&!(null===(n=e.category)||void 0===n?void 0:n.includes("진로"))&&!(null===(s=e.category)||void 0===s?void 0:s.includes("동아리"))})};return(0,i.jsxs)("div",{className:"space-y-3 pb-32 animate-in fade-in slide-in-from-bottom-2 duration-700",children:[(0,i.jsx)("section",{id:"section-ai-summary",children:(0,i.jsx)(O,{isMobile:m,title:"AI 종합 요약",rightElement:R&&(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[L?(0,i.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,i.jsx)("button",{onClick:j,className:"text-[11px] font-bold text-[#007AFF] hover:text-blue-600 dar
1k:text-blue-400 dark:hover:text-blue-300 transition-colors",children:"다시 업로드"}),(0,i.jsx)("span",{className:"text-[11px] font-medium text-zinc-300 dark:text-zinc-500",children:"/"}),(0,i.jsx)("button",{onClick:()=>window.open("/api/files/".concat(encodeURIComponent(L)),"_blank"),className:"text-[11px] font-bold text-[#007AFF] hover:text-blue-600 dark:text-blue-400 dark:hover:text-blue-300 transition-colors",children:"원본 보기"})]}):(0,i.jsx)("button",{onClick:j,className:"text-[11px] font-bold text-[#007AFF] hover:text-blue-600 dark:text-blue-400 dark:hover:text-blue-300 transition-colors",children:"다시 업로드"}),(0,i.jsxs)("span",{className:"text-[11px] font-medium text-zinc-400 dark:text-zinc-500",children:["(",new Date(R).getFullYear(),"년 ",new Date(R).getMonth()+1,"월 ",new Date(R).getDate(),"일 업로드)"]})]}),children:(0,i.jsx)("div",{className:"flex justify-between items-start mb-4",children:(0,i.jsx)("div",{className:"flex-1",children:f?(0,i.jsx)("p",{className:"text-[13px] text-zinc-600 dark:text-zinc-400 leading-relaxed font-medium whitespace-pre-wrap",children:F||"생활기록부 전체 데이터를 통합 분석한 결과입니다. 학생의 전반적인 학업 역량과 학교 생활 태도가 이 요약에 반영되어 있습니다."}):(0,i.jsx)(S.Z,{size:"md",title:"등록된 생활기록부가 없습니다",description:"PDF 파일을 업로드하면 AI가 분석하여 상세 리포트와 종합 요약을 생성합니다.",action:(0,i.jsxs)("button",{onClick:j,className:"flex items-center gap-2 px-5 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-xs font-bold transition shadow-sm active:scale-95",children:[(0,i.jsx)(b.Z,{size:14}),"생활기록부 PDF 업로드"]})})})})})}),(0,i.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,i.jsx)(O,{isMobile:m,title:"나의 강점",children:(0,i.jsx)("ul",{className:"space-y-2",children:P.length>0?P.map((e,t)=>(0,i.jsxs)("li",{className:"flex items-start gap-2 text-[13px] font-medium text-zinc-600 dark:text-zinc-400",children:[(0,i.jsx)("span",{className:"mt-1.5 w-1.5 h-1.5 bg-zinc-300 dark:bg-zinc-600 rounded-full shrink-0"}),(0,i.jsx)("span",{className:"leading-relaxed whitespace-pre-wrap",children:e})]},t)):(0,i.jsx)("li",{className:"text-zinc-400 text-xs",children:"분석된 강점이 없습니다."})})}),(0,i.jsx)(O,{isMobile:m,title:"보완할 점",children:(0,i.jsx)("ul",{className:"space-y-2",children:U.length>0?U.map((e,t)=>(0,i.jsxs)("li",{className:"flex items-start gap-2 text-[13px] font-medium text-zinc-600 dark:text-zinc-400",children:[(0,i.jsx)("span",{className:"mt-1.5 w-1.5 h-1.5 bg-zinc-300 dark:bg-zinc-600 rounded-full shrink-0"}),(0,i.jsx)("span",{className:"leading-relaxed whitespace-pre-wrap",children:e})]},t)):(0,i.jsx)("li",{className:"text-zinc-400 text-xs",children:"분석된 보완점이 없습니다."})})})]}),(0,i.jsx)("section",{id:"section-attendance",children:(0,i.jsx)(O,{isMobile:m,title:"출결 상황",children:W?(0,i.jsx)("div",{className:"flex flex-col justify-center py-2 px-1",children:(0,i.jsxs)("div",{className:"flex items-start gap-3",children:[(0,i.jsx)(p.Z,{size:16,className:"text-zinc-400 mt-0.5 shrink-0"}),(0,i.jsx)("p",{className:"text-[13px] text-zinc-600 dark:text-zinc-400 leading-relaxed font-medium whitespace-pre-wrap",children:W})]})}):(0,i.jsx)(B,{message:q.length>0?"출결 기록을 분석 중입니다.":"분석된 출결 데이터가 없습니다."})})}),(0,i.jsx)("section",{id:"section-activities",children:(0,i.jsx)(O,{isMobile:m,title:"주요 활동 요약",children:(0,i.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[(0,i.jsxs)("div",{className:"space-y-3",children:[(0,i.jsx)("div",{className:"flex items-center gap-2 mb-2 px-2",children:(0,i.jsx)("span",{className:"text-xs font-bold text-zinc-500 dark:text-zinc-400",children:"자율 활동"})}),K.autonomous.length>0?K.autonomous.map((e,t)=>(0,i.jsx)(T,{title:e.name,content:e.details},"auto-".concat(e.name,"-").concat(t))):(0,i.jsx)(B,{message:"기록 없음"})]}),(0,i.jsxs)("div",{className:"space-y-3",children:[(0,i.jsx)("div",{className:"flex items-center gap-2 mb-2 px-2",children:(0,i.jsx)("span",{className:"text-xs font-bold text-zinc-500 dark:text-zinc-400",children:"진로 활동"})}),K.career.length>0?K.career.map((e,t)=>(0,i.jsx)(T,{title:e.name,content:e.details},"career-".concat(e.name,"-").concat(t))):(0,i.jsx)(B,{message:"기록 없음"})]}),(0,i.jsxs)("div",{className:"space-y-3",children:[(0,i.jsx)("div",{className:"flex items-center gap-2 mb-2 px-2",children:(0,i.jsx)("span",{className:"text-xs font-bold text-zinc-500 dark:text-zinc-400",children:"동아리 활동"})}),K.club.length>0?K.club.map((e,t)=>(0,i.jsx)(T,{title:e.name,content:e.details},"club-".concat(e.name,"-").concat(t))):(0,i.jsx)(B,{message:"기록 없음"})]})]})})}),(0,i.jsx)("section",{id:"section-seteuk",children:(0,i.jsx)(O,{isMobile:m,title:"세부능력 및 특기사항",children:(0,i.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 items-start gap-x-8 gap-y-4",children:V.length>0?V.map((e,t)=>(0,i.jsx)(T,{title:e.subject,content:e.details},"seteuk-".concat(e.subject,"-").concat(t,"-").concat(e.id||t))):(0,i.jsx)("div",{className:"col-span-full",children:(0,i.jsx)(B,{message:"세특 분석 데이터가 없습니다."})})})})}),(0,i.jsx)("section",{id:"section-behavior",children:(0,i.jsx)(O,{isMobile:m,title:"행동특성 및 종합의견 키워드",children:(0,i.jsx)("div",{className:"text-[13px] text-zinc-600 dark:text-zinc-400 font-medium leading-relaxed px-2",children:X.length>0?X.join(", "):(0,i.jsx)(B,{message:"분석된 키워드가 없습니다."})})})}),(0,i.jsx)("section",{id:"section-recommendations",children:(0,i.jsx)(O,{isMobile:m,title:"추천 학교 활동",children:(0,i.jsx)("ul",{className:"space-y-2",children:Y.length>0?Y.map((e,t)=>{let n;if("string"==typeof e)n=e;else if("object"==typeof e&&null!==e){var s,r,a,l,c,d,o,x;n=null!==(x=null!==(o=null!==(d=null!==(c=null!==(l=null!==(a=null!==(r=null!==(s=e.suggestion)&&void 0!==s?s:e.activity)&&void 0!==r?r:e.title)&&void 0!==a?a:e.text)&&void 0!==l?l:e.description)&&void 0!==c?c:e.content)&&void 0!==d?d:e.name)&&void 0!==o?o:e.recommendation)&&void 0!==x?x:JSON.stringify(e)}else n=String(e);return(0,i.jsxs)("li",{className:"flex items-start gap-2 text-[13px] font-medium text-zinc-600 dark:text-zinc-400",children:[(0,i.jsx)("span",{className:"mt-1.5 w-1.5 h-1.5 bg-zinc-300 dark:bg-zinc-600 rounded-full shrink-0"}),(0,i.jsx)("span",{className:"leading-relaxed whitespace-pre-wrap",children:n})]},t)}):(0,i.jsx)(B,{message:"추천된 제언이 없습니다."})})})}),(0,i.jsx)("section",{id:"section-potential-majors",children:(0,i.jsx)(O,{isMobile:m,title:"추천 진로 및 학과",children:(0,i.jsx)("div",{className:"text-[13px] text-zinc-600 dark:text-zinc-400 font-medium px-2 py-1",children:$.length>0?$.map(e=>e).join(", "):(0,i.jsx)(B,{message:"추천된 경로가 없습니다."})})})})]})},P=n(67920),U=n(12172),H=n(98881);function V(e){let{studentId:t,studentGrade:n,isGuest:s=!1,desktop:r=!1}=e,a=(0,P.XC)(),c=(0,l.useMemo)(()=>(0,H.u)(t,a),[t,a]),{openSettings:d}=(0,Z.Y)(),o=(0,l.useCallback)(e=>d("grade-file",void 0,{onClose:e}),[d]);return(0,i.jsx)(U.Z,{api:c,studentGrade:n,variant:"teacher",isGuest:s,onUploadGrades:r?o:void 0},t)}var X=n(92846),Y=n(13100),q=n(21652),$=n(21235),K=n(25450),Q=n(99388),J=n(37456);let ee=(0,c.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,i.jsx)($.R4,{})}),et=(0,c.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,i.jsx)($.R4,{})}),en=(0,c.default)(()=>Promise.resolve().then(n.bind(n,14697)),{loadableGenerated:{webpack:()=>[14697]},ssr:!1,loading:()=>(0,i.jsx)("div",{className:"flex-1 p-6 flex flex-col items-center justify-center",children:(0,i.jsx)($.R4,{})})});function es(e){var t,n,s,r,a,c,d;let{students:o,selectedStudentId:u,onSelectStudent:m,attendanceRecords:h,counselingRecords:g,activityRecords:f,seteukRecords:b,gradeRecords:v,mockExams:j,isAdmin:k,isGuest:z,grades:w,statistics:N,gradingSystem:y,chartConfig:C,studentMemo:M,surveyRecords:S,selectedCareerCategories:E,rolesData:D,studentError:L,onRetryStudents:Z,studentGradeAverages:I={},studentGradeRecords:G={},studentMockAverages:T={},latestMockExams:O={},isDashboardLoading:B=!1,dashboardError:P=null,onRetryDashboard:U,isSystemAdmin:H=!1}=e,[Y,$]=(0,l.useState)(""),[K,es]=(0,l.useState)(!1),[ea,el]=(0,l.useState)(!1),[ec,ed]=(0,l.useState)("counseling"),eo=(0,l.useRef)(null),ex=(0,l.useCallback)(e=>{var t;X.MU.selection(),ed(e),null===(t=eo.current)||void 0===t||t.scrollTo({top:0,behavior:"instant"})},[]),eu=(0,l.useMemo)(()=>o.find(e=>e.id===u),[o,u]),em=(0,l.useMemo)(()=>f.filter(e=>"autonomous"===e.category),[f]),eh=(0,l.useMemo)(()=>f.filter(e=>"career"===e.category),[f]),ep=(0,l.useMemo)(()=>o.filter(e=>
1e.name.includes(Y)||String(e.number).includes(Y)),[o,Y]),eg=!!(u&&eu),ef=(0,l.useCallback)(()=>{eg?ea?(el(!1),m(""),es(!0)):m(""):K&&es(!1)},[eg,ea,m,K]);(0,_.rr)(eg?null!==(r=null==eu?void 0:eu.name)&&void 0!==r?r:"학생 상세":K?"학급 현황":null,ef);let eb=(0,i.jsx)(i.Fragment,{children:K?(0,i.jsx)("div",{className:"flex-1 flex flex-col h-full overflow-hidden",children:(0,i.jsx)(en,{students:o,isAdmin:k,isSystemAdmin:H,studentGradeAverages:I,studentGradeRecords:G,studentMockAverages:T,latestMockExams:O,studentRoles:(null==D?void 0:D.assignments)||{},isLoading:B,error:P,onRetry:U,onSelectStudent:e=>{el(!0),es(!1),(0,q.UM)()&&window.history.pushState({...window.history.state,isMobileSubHeader:!0,fromDashboard:!0},""),m(e)},isMobile:!0})},"dashboard"):eg?eu?(0,i.jsxs)("div",{className:"flex-1 flex flex-col min-h-0",children:[(0,i.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,i.jsxs)("div",{className:"flex items-center gap-1.5 overflow-x-auto scrollbar-hide py-0.5",children:[(0,i.jsx)(er,{active:"counseling"===ec,onClick:()=>ex("counseling"),icon:(0,i.jsx)(A.default,{src:"/icons/mobile/student-tab-basic.svg",alt:"",width:16,height:16,className:"w-4 h-4 object-contain",unoptimized:!0}),label:"기본"}),(0,i.jsx)(er,{active:"grade"===ec,onClick:()=>ex("grade"),icon:(0,i.jsx)(A.default,{src:"/icons/mobile/student-tab-grade.svg",alt:"",width:16,height:16,className:"w-4 h-4 object-contain",unoptimized:!0}),label:"내신"}),(0,i.jsx)(er,{active:"mock"===ec,onClick:()=>ex("mock"),icon:(0,i.jsx)(A.default,{src:"/icons/mobile/student-tab-mock.svg",alt:"",width:16,height:16,className:"w-4 h-4 object-contain",unoptimized:!0}),label:"모의"}),(0,i.jsx)(er,{active:"record"===ec,onClick:()=>ex("record"),icon:(0,i.jsx)(A.default,{src:"/icons/mobile/student-tab-record.svg",alt:"",width:16,height:16,className:"w-4 h-4 object-contain",unoptimized:!0}),label:"생기부"}),(0,i.jsx)(er,{active:"admission"===ec,onClick:()=>ex("admission"),icon:(0,i.jsx)(A.default,{src:"/icons/mobile/student-tab-admission.svg",alt:"",width:16,height:16,className:"w-4 h-4 object-contain",unoptimized:!0}),label:"대입"})]})}),(0,i.jsxs)("div",{className:"flex-1 px-4 mobile-scroll-with-floating",children:["record"===ec&&(0,i.jsx)(W,{studentId:eu.id,attendanceRecords:h,activityRecords:f,seteukRecords:b,studentName:eu.name,studentGrade:null!==(a=eu.grade)&&void 0!==a?a:1,studentClass:null!==(c=eu.classNum)&&void 0!==c?c:1,studentNumber:eu.number,lifeRecordAnalysis:eu.lifeRecordAnalysis,overallOpinion:eu.overallOpinion,isMobile:!0}),"grade"===ec&&(w&&w.length>0?(0,i.jsx)(ee,{mobileView:!0,grades:w,statistics:N,gradingSystem:y,chartConfig:C,studentGrade:null==eu?void 0:eu.grade}):(0,i.jsx)("div",{className:"flex flex-col items-center justify-center py-12",children:(0,i.jsxs)("div",{className:"text-center",children:[(0,i.jsx)("div",{className:"text-sm text-zinc-500 dark:text-zinc-400 mb-2 font-medium",children:"등록된 내신 성적이 없습니다"}),(0,i.jsx)("div",{className:"text-xs text-zinc-400 dark:text-zinc-500",children:"성적 파일을 업로드하면 여기에 표시됩니다"})]})})),"mock"===ec&&(j&&j.length>0?(0,i.jsx)(et,{mockExams:j,mobileView:!0}):(0,i.jsx)("div",{className:"flex flex-col items-center justify-center py-12",children:(0,i.jsxs)("div",{className:"text-center",children:[(0,i.jsx)("div",{className:"text-sm text-zinc-500 dark:text-zinc-400 mb-2 font-medium",children:"모의고사 데이터 로드 중..."}),(0,i.jsx)("div",{className:"text-xs text-zinc-400 dark:text-zinc-500",children:"잠시 기다려주세요"})]})})),"counseling"===ec&&(0,i.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,i.jsx)(ei,{title:"최근 출결",badge:"".concat(h.length,"건"),children:0===h.length?(0,i.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-6 text-xs",children:"기록 없음"}):(0,i.jsx)("div",{className:"flex flex-col gap-1.5",children:h.slice(0,6).map(e=>(0,i.jsxs)("div",{className:"flex items-center text-xs py-2 px-3 bg-zinc-50 dark:bg-white/[0.04] rounded-lg gap-3 border border-zinc-100 dark:border-white/[0.06]",children:[(0,i.jsxs)("span",{className:"text-zinc-400 dark:text-zinc-500 shrink-0",children:[(0,F.$j)(e.date),e.endDate&&e.endDate!==e.date?" ~ ".concat((0,F.$j)(e.endDate)):""]}),(0,i.jsxs)("div",{className:"flex-1 flex items-center justify-end gap-1 whitespace-nowrap",children:[(0,i.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300",children:e.reason}),(0,i.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300",children:e.type})]})]},e.id))})}),(0,i.jsx)(ei,{title:"메모",children:(0,i.jsx)("p",{className:"text-xs text-zinc-600 dark:text-zinc-300 whitespace-pre-wrap leading-relaxed min-h-[40px]",children:M||(0,i.jsx)("span",{className:"text-zinc-400 dark:text-zinc-500",children:"등록된 메모가 없습니다"})})}),(0,i.jsx)(ei,{title:"설문 응답",children:S.every(e=>e.answers.every(e=>!e.showOnManagement))?(0,i.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-4 text-[11px]",children:0===S.length?"설문 조사 응답 결과의 일부를 표시할 수 있습니다":"표시되도록 설정된 설문 응답이 없습니다"}):(0,i.jsx)("div",{className:"flex flex-col gap-2",children:S.map(e=>(0,i.jsx)("div",{className:"contents",children:e.answers.filter(e=>e.showOnManagement).map((t,n)=>(0,i.jsxs)("div",{className:"bg-zinc-50 dark:bg-white/[0.04] px-3 py-2 rounded-lg flex flex-col gap-1.5 border border-zinc-100 dark:border-white/[0.06]",children:[(0,i.jsxs)("div",{className:"text-[11px] text-zinc-500 dark:text-zinc-400 flex items-center gap-1.5",children:[(0,i.jsx)("div",{className:"w-1 h-1 rounded-full bg-blue-500"}),t.question]}),(0,i.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,i.jsxs)(ei,{title:"희망 진로 분야",children:[(0,i.jsx)("div",{className:"flex flex-wrap gap-1.5",children:J.FT.map(e=>(0,i.jsx)("span",{className:(0,F.cn)("px-2.5 py-1 rounded-full text-[11px] font-medium border",E.includes(e.id)?"bg-blue-600 text-white border-blue-600":"bg-zinc-50 dark:bg-white/5 text-zinc-400 dark:text-zinc-500 border-zinc-100 dark:border-white/5"),children:e.label},e.id))}),0===E.length&&(0,i.jsxs)("p",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 mt-2 flex items-center gap-1.5 font-medium",children:[(0,i.jsx)(p.Z,{size:12}),"희망 진로 분야를 골라 두세요."]})]}),(0,i.jsx)(ei,{title:"상담 일지",badge:"".concat(g.length,"건"),children:0===g.length?(0,i.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-6 text-xs",children:"기록 없음"}):(0,i.jsx)("div",{className:"flex flex-col gap-2",children:g.slice(0,6).map(e=>(0,i.jsxs)("div",{className:"p-3 bg-zinc-50 dark:bg-white/[0.04] rounded-lg border border-zinc-100 dark:border-white/[0.06]",children:[(0,i.jsxs)("div",{className:"flex items-center justify-between mb-1.5",children:[(0,i.jsx)("span",{className:"text-[11px] font-medium text-zinc-500 dark:text-zinc-400",children:e.category}),(0,i.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 font-mono",children:e.date})]}),(0,i.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,i.jsx)(ei,{title:"역할",children:(null!==(d=null==D?void 0:null===(t=D.columns)||void 0===t?void 0:t.length)&&void 0!==d?d:0)===0?(0,i.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-4 text-xs",children:"배정된 역할 없음"}):(0,i.jsxs)("div",{className:"flex flex-wrap gap-2",children:[null==D?void 0:null===(n=D.columns)||void 0===n?void 0:n.map(e=>{var t,n;let s=u?null==D?void 0:null===(n=D.assignments)||void 0===n?void 0:null===(t=n[u])||void 0===t?void 0:t[e.id]:null;return s?(0,i.jsxs)("div",{className:"bg-zinc-50 dark:bg-white/[0.04] px-3 py-2 rounded-lg border border-zinc-100 dark:border-white/[0.06] flex flex-col gap-1 min-w-[80px]",children:[(0,i.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500",children:e.name}),(0,i.jsx)("span",{className:"text-[13px] text-zinc-900 dark:text-zinc-100 font-medium",children:s})]},e.id):null}),u&&Object.values((null==D?void 0:null===(s=D.assignments)||void 0===s?void 0:s[u])||{}).every(e=>!e)&&(0,i.jsx)("p",{className:"w-full text-center text-zinc-400 dark:text-zinc-500 py-4 text-xs",children:"배정된 역할 없음"})]})}),(0,i.jsx)(ei,{title:"자율활동",children:0===em.length?(0,i.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-4 text-xs",children:"기록 없음"}):(0,i.jsx)("div",{className:"flex flex-col gap-2",children:em.slice(0,3).map(e=>(0,i.jsxs)("div",{className:"p-3 bg-zinc-50 dark:bg-white/[0.04] rounded-lg border border-zinc-100 dark:border-white/[0.06]",children:[(0,i.jsxs)("div",{className:"flex justify-between items-start mb-1",children:[(0,i.jsx)("span",{className:"text-xs font-medium text-zinc-800 dark:text-zinc-200",children:e.activityName}),(0,i.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500",children:e.createdAt})]}),(0,i.jsx)("p",{className:"text-xs text-zinc-600 dark:text-zinc-300 line-clamp-2",children:e.details})]},e.id))})}),(0,i.jsx)(ei,{title:"진로활동",children:0===eh.length?(0,i.jsx)("p",{className:"text-center text-zinc-400 dark:text-zinc-500 py-4 text-xs",children:"기록 없음"}):(0,i.jsx)("div",{className:"flex flex-col gap-2",children:eh.slice(0,3).map(e=>(0,i.jsxs)("div",{className:"p-3 bg-zinc-50 dark:bg-white/[0.04] rounded-lg border border-zinc-100 dark:border-white/[0.06]",children:[(0,i.jsxs)("div",{className:"flex justify-between items-start mb-1",children:[(0,i.jsx)("span",{className:"text-xs font-medium text-zinc-800 dark:text-zinc-200",children:e.activityName}),(0,i.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500",children:e.createdAt})]}),(0,i.jsx)("p",{className:"text-xs text-zinc-600 dark:text-zinc-300 line-clamp-2",children:e.details})]},e.id))})})]}),"admission"===ec&&(0,i.jsx)(V,{studentId:eu.id,studentGrade:eu.grade||0,isGuest:z})]})]},"student-detail-".concat(eu.id)):null:(0,i.jsx)("div",{className:"flex-1 flex flex-col h-full overflow-hidden",children:(0,i.jsx)(R.Z,{students:ep,selectedStudentId:u,onSelectStudent:e=>{el(!1),m(e),ed("counseling"),$("")},onOpenDashboard:()=>{X.MU.tap(),es(!0)},totalStudentsCount:o.length,searchQuery:Y,onSearchChange:$,isAdmin:k,error:L,onRetry:Z})},"student-list")});return(0,i.jsxs)("div",{ref:eo,className:(0,F.cn)("flex flex-col h-full relative bg-[#FBFBF9] dark:bg-zinc-950",eg?"overflow-y-auto scroll-smooth":"overflow-hidden"),children:[eb,!eg&&!K&&(0,i.jsx)("div",{className:"fixed mobile-floating-bar left-0 right-0 px-6 flex justify-center z-40 pointer-events-none",children:(0,i.jsx)("div",{className:"w-full relative pointer-events-auto group",children:(0,i.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,i.jsx)("div",{className:"shrink-0 text-zinc-400 dark:text-zinc-500",children:(0,i.jsx)(x.Z,{size:20,strokeWidth:1.5})}),(0,i.jsx)("input",{type:"text",placeholder:"학생 이름 검색...",value:Y,onChange:e=>{$(e.target.value),u&&m(""),K&&es(!1)},onFocus:()=>{u&&m(""),K&&es(!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")}),Y&&(0,i.jsx)("button",{"aria-label":"검색어 지우기",onClick:()=>$(""),className:"p-1.5 -mr-1 text-zinc-400 active:text-zinc-600 dark:active:text-zinc-200 active:scale-95 transition",children:(0,i.jsx)(Q.Z,{size:18,strokeWidth:1.75})})]})})})]})}function ei(e){let{title:t,badge:n,children:s}=e;return(0,i.jsxs)("div",{className:"bg-white dark:bg-[#1C1C1E] rounded-xl border border-zinc-200/60 dark:border-white/[0.08] shadow-sm overflow-hidden",children:[(0,i.jsxs)("div",{className:"px-4 py-3 flex items-center justify-between",children:[(0,i.jsx)("h3",{className:"text-sm font-semibold text-zinc-800 dark:text-zinc-200",children:t}),n&&(0,i.jsx)("span",{className:"text-[11px] text-zinc-400 dark:text-zinc-500",children:n})]}),(0,i.jsx)("div",{className:"p-3",children:s})]})}function er(e){let{active:t,onClick:n,icon:s,label:r}=e;return(0,i.jsxs)(Y.E.button,{type:"button",whileTap:{scale:.95},transition:{type:"spring",stiffness:500,damping:30},onClick:n,className:(0,K.Fk)(t,"gap-1.5 whitespace-nowrap"),children:[s&&(0,i.jsx)("span",{className:"w-4 h-4 flex items-center justify-center shrink-0 leading-none",children:s}),(0,i.jsx)("span",{className:"leading-none",children:r})]})}var ea=n(14697);n(83079);var el=(0,n(12119).$)("a26fafcc31cad7e7e7bee3682a80fa37074e8806"),ec=n(4908),ed=n(45444),eo=n(53834),ex=n(61858),eu=n(92609),em=n(9244),eh=n(16011),ep=n(
151028);function eg(e){let{title:t,desc:n,icon:s,animateIcon:r,useLogoLoader:a,action:l,minimal:c}=e;return c?(0,i.jsxs)("div",{className:"group relative flex flex-col items-center justify-center h-[320px] gap-3 select-none",children:[(0,i.jsx)("div",{className:"pointer-events-none absolute w-28 h-28 rounded-full bg-orange-300/20 dark:bg-[#d97757]/10 blur-xl opacity-70"}),a?(0,i.jsx)(eo.W,{size:36}):s?(0,i.jsx)("div",{className:"p-3 rounded-2xl bg-zinc-100 dark:bg-white/5 border border-zinc-200/80 dark:border-white/10",children:(0,i.jsx)(s,{className:(0,F.cn)("w-6 h-6 text-zinc-400",r&&"animate-spin text-blue-500")})}):(0,i.jsx)("div",{className:"relative flex items-center justify-center transition-transform duration-300 group-hover:-translate-y-0.5",children:(0,i.jsx)(ep.w,{size:44,showGlow:!1})}),(0,i.jsxs)("div",{className:"text-center",children:[(0,i.jsx)("h3",{className:"text-sm font-semibold text-zinc-800 dark:text-zinc-200 mb-1",children:t}),(0,i.jsx)("p",{className:"text-xs text-zinc-500 dark:text-zinc-400",children:n})]}),l&&(0,i.jsx)("div",{className:"mt-1",children:l})]}):(0,i.jsxs)("div",{className:"group relative flex flex-col items-center justify-center h-[400px] border border-dashed border-zinc-300/80 dark:border-white/10 rounded-2xl bg-zinc-50/50 dark:bg-[#18181b]/30 select-none overflow-hidden",children:[(0,i.jsx)("div",{className:"relative mb-3",children:a?(0,i.jsx)(eo.W,{size:44}):s?(0,i.jsx)("div",{className:"p-4 rounded-2xl bg-zinc-100 dark:bg-[#27272a]",children:(0,i.jsx)(s,{className:(0,F.cn)("w-8 h-8 text-zinc-500",r&&"animate-spin text-blue-500")})}):(0,i.jsx)("div",{className:"relative flex items-center justify-center transition-transform duration-300 group-hover:-translate-y-1",children:(0,i.jsx)(ep.w,{size:56,showGlow:!1})})}),(0,i.jsx)("h3",{className:"text-base md:text-lg font-semibold text-zinc-800 dark:text-zinc-100 mb-1.5",children:t}),(0,i.jsx)("p",{className:"text-xs md:text-sm text-zinc-500 dark:text-zinc-400 max-w-sm text-center",children:n}),l&&(0,i.jsx)("div",{className:"mt-5",children:l})]})}var ef=n(51817),eb=n(91455);function ev(e){let{isOpen:t,onClose:n,onSave:s,initialCategory:r="autonomous",studentName:a}=e,[c,d]=(0,l.useState)(r),[o,x]=(0,l.useState)(""),[u,m]=(0,l.useState)(""),[h,p]=(0,l.useState)(!1),g=(0,l.useId)(),f=(0,l.useCallback)(()=>{x(""),m(""),n()},[n]);(0,l.useEffect)(()=>{if(!t)return;let e=e=>{"Escape"===e.key&&f()},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,f]);let b=async()=>{if(o.trim()&&!h){p(!0);try{await s({category:c,activityName:o.trim(),details:u.trim()})&&(x(""),m(""),n())}finally{p(!1)}}},j=(0,ed.X)(b,!!o.trim()&&!h);return(t&&c!==r&&""===o&&""===u&&d(r),t)?(0,i.jsxs)("div",{className:"modal-viewport z-[110] flex items-center justify-center p-4",children:[(0,i.jsx)("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200",onClick:f}),(0,i.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,i.jsxs)("div",{className:"flex items-center justify-between p-4 pb-0",children:[(0,i.jsxs)("h3",{className:"text-lg font-bold text-zinc-900 dark:text-white",children:["autonomous"===c?"자율활동":"진로활동"," 추가",a&&(0,i.jsxs)("span",{className:"text-sm font-normal text-zinc-500 ml-2",children:["(",a,")"]})]}),(0,i.jsx)("button",{"aria-label":"닫기",onClick:f,className:"p-1.5 text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors",children:(0,i.jsx)(v.Z,{size:20})})]}),(0,i.jsxs)("div",{className:"p-4 space-y-5",children:[(0,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsx)("span",{className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"활동 유형"}),(0,i.jsx)(eb.s,{value:c,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",activeItem
1ClassName:"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,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsx)("label",{htmlFor:"".concat(g,"-name"),className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"활동 제목"}),(0,i.jsx)("input",{id:"".concat(g,"-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,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsx)("label",{htmlFor:"".concat(g,"-details"),className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"활동 내용"}),(0,i.jsx)("textarea",{id:"".concat(g,"-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,i.jsxs)("div",{className:"flex items-center justify-end gap-2 p-4",children:[(0,i.jsx)("button",{onClick:f,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,i.jsx)("button",{onClick:b,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,i.jsx)(ef.Z,{size:16,className:"animate-spin"}):"저장"})]})]})]}):null}var ej=n(34137);function ek(e){let{isOpen:t,onClose:n,activity:s}=e;return((0,ej.j)(n,t&&!!s),t&&s)?(0,i.jsxs)("div",{className:"modal-viewport z-[110] flex items-center justify-center p-4",children:[(0,i.jsx)("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200",onClick:n}),(0,i.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,i.jsxs)("div",{className:"flex items-center justify-between p-4 shrink-0",children:[(0,i.jsxs)("div",{className:"flex items-center gap-3",children:[(0,i.jsx)("span",{className:"px-2.5 py-1 rounded-md text-xs font-bold",style:{backgroundColor:"autonomous"===s.category?"#ede9fe":"#ccfbf1",color:"autonomous"===s.category?"#6d28d9":"#0f766e"},children:"autonomous"===s.category?"자율":"진로"}),(0,i.jsx)("h3",{className:"text-base font-bold text-zinc-900 dark:text-white line-clamp-1",children:s.activityName})]}),(0,i.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,i.jsx)(v.Z,{size:20})})]}),(0,i.jsx)("div",{className:"px-6 py-2 overflow-y-auto custom-scrollbar flex-1",children:(0,i.jsx)("p",{className:"text-sm text-zinc-700 dark:text-zinc-300 whitespace-pre-wrap leading-relaxed",children:s.details})}),(0,i.jsx)("div",{className:"flex justify-end px-6 py-4 shrink-0",children:(0,i.jsxs)("p",{className:"text-xs text-zinc-400 font-medium",children:["등록일: ",s.createdAt]})})]})]}):null}var ez=n(27526),ew=n(96214),eN={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let ey=new Uint8Array(16),eC=[];for(let e=0;e<256;++e)eC.push((e+256).toString(16).slice(1));var eM=function(e,t,n){return!eN.randomUUID||t||e?function(e,t,n){let i=(e=e||{}).random??e.rng?.()??function(){if(!s){if("undefined"==typeof crypto||!crypto.getRandomValues)throw Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");s=crypto.getRandomValues.bind(crypto)}return s(ey)}();if(i.length<16)throw Error("Random bytes length must be >= 16");if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){if((n=n||0)<0||n+16>t.length)throw RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let e=0;e<16;++e)t[n+e]=i[e];return t}
1return function(e,t=0){return(eC[e[t+0]]+eC[e[t+1]]+eC[e[t+2]]+eC[e[t+3]]+"-"+eC[e[t+4]]+eC[e[t+5]]+"-"+eC[e[t+6]]+eC[e[t+7]]+"-"+eC[e[t+8]]+eC[e[t+9]]+"-"+eC[e[t+10]]+eC[e[t+11]]+eC[e[t+12]]+eC[e[t+13]]+eC[e[t+14]]+eC[e[t+15]]).toLowerCase()}(i)}(e,t,n):eN.randomUUID()},eS=n(54392);let eE=(0,c.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,i.jsx)("div",{className:"py-10 text-center text-[13px] text-zinc-400",children:"성적 정보를 불러오는 중…"})}),eA=(0,c.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,i.jsx)("div",{className:"py-10 text-center text-[13px] text-zinc-400",children:"모의고사 정보를 불러오는 중…"})}),e_=(0,c.default)(()=>Promise.all([n.e(1109),n.e(5398),n.e(9620)]).then(n.bind(n,39620)),{loadableGenerated:{webpack:()=>[39620]},ssr:!1}),eR=(0,c.default)(()=>Promise.all([n.e(5398),n.e(5268)]).then(n.bind(n,45268)),{loadableGenerated:{webpack:()=>[45268]},ssr:!1});function eD(e){var t,s,c,A,_,R,L,G,T,O,B,U,H,X,Y,q,$,K,Q,ee,et,en;let{initialStudentId:ei,initialTab:er,onStudentIdConsumed:ep}=e,{data:ef,status:eb}=(0,ez.kP)(),ej=(0,I.Dv)(),{students:eN,updateStudent:ey,error:eC,isLoaded:eD,isLoading:eG,reloadStudents:eT}=(0,ec.AF)(),eO=(0,P.XC)(),eB=(0,a.N)(),{showToast:eW}=(0,r.p)(),[eP,eU]=(0,l.useState)([]),[eH,eV]=(0,l.useState)(null);(0,l.useEffect)(()=>{ej&&(async()=>{let e=await (0,ew.getGuestData)();eU(e.students),eV(e)})()},[ej]);let eX=ej?eP:eN,eY=(0,l.useMemo)(()=>{var e;return null!=ef&&!!ef.user&&["OWNER","SCHOOL_ADMIN","GRADE_ADMIN","ADMIN"].includes((null===(e=ef.user.role)||void 0===e?void 0:e.toUpperCase())||"")},[ef]),eq=(0,l.useMemo)(()=>{var e;return null!=ef&&!!ef.user&&["OWNER","SCHOOL_ADMIN","GRADE_ADMIN","TEACHER","ADMIN"].includes((null===(e=ef.user.role)||void 0===e?void 0:e.toUpperCase())||"")},[ef]),e$=(0,l.useMemo)(()=>[...eX].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),[eX]),eK=(0,l.useMemo)(()=>ej?e$:e$.filter(e=>"담임 학급"===e.homeClassId),[e$,ej]),[eQ,eJ]=(0,l.useState)(null),[e0,e1]=(0,l.useState)(!0);(0,l.useEffect)(()=>{ei&&eK.length>0&&eK.some(e=>e.id===ei)&&(eJ(ei),e1(!1),null==ep||ep())},[ei,eK,ep]);let[e2,e4]=(0,l.useState)(""),e5=(0,l.useRef)(eQ);e5.current=eQ;let e3=(0,l.useMemo)(()=>eK.find(e=>e.id===eQ),[eK,eQ]),[e6,e9]=(0,l.useState)([]),[e8,e7]=(0,l.useState)([]),[te,tt]=(0,l.useState)([]),[tn,ts]=(0,l.useState)([]),[ti,tr]=(0,l.useState)([]),[ta,tl]=(0,l.useState)(!1),[tc,td]=(0,l.useState)([]),[to,tx]=(0,l.useState)([]),[tu,tm]=(0,l.useState)(0),[th,tp]=(0,l.useState)([]),[tg,tf]=(0,l.useState)(!1),tb=(0,d.NL)(),tv=["국어","수학","영어","사회(역사/도덕 포함)","과학"],tj=(0,l.useMemo)(()=>eK.map(e=>e.id).sort().join(","),[eK]),tk=(0,o.a)({queryKey:["smv-dashboard-grades",ej,tj],enabled:ej?!!eH:eK.length>0,staleTime:6e4,queryFn:async()=>{let e={},t={},n={},s={};if(ej&&eH){let i=eH.gradeRecords||[],r=eH.mockExamRecords||[];return eK.forEach(n=>{let s=i.filter(e=>e.studentId===n.id).filter(e=>null!==e.gradeLevel&&void 0!==e.gradeLevel&&tv.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}),eK.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 i=t[0].year,r=t[0].month,a=t.filter(e=>e.year===i&&e.month===r);s[e.id]=a;let l=0,c=0;for(let e of["국어","수학","영어","탐구"]){let t=a.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 i=eK.map(e=>e.id),[r,a]=await Promise.all([(0,D.X)("getGradeRecordsByStudents",{studentIds:i},eO),(0,eh.W)(i)]);if(r.success&&r.data){let n=r.data;eK.forEach(s=>{let i=n.filter(e=>e.studentId===s.id).filter(e=>null!==e.gradeLevel&&void 0!==e.gradeLevel&&tv.includes(e.subjectCategory)),r=i.length>0?i.reduce((e,t)=>
1e+(t.gradeLevel||0),0)/i.length:null;e[s.id]=r,t[s.id]=i})}if(a.success&&a.data){let e=a.data;eK.forEach(t=>{let i=e.filter(e=>e.studentId===t.id);if(i.length>0){i.sort((e,t)=>t.year-e.year||t.month-e.month);let e=i[0].year,r=i[0].month,a=i.filter(t=>t.year===e&&t.month===r);s[t.id]=a;let l=0,c=0;for(let e of["국어","수학","영어","탐구"]){let t=a.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}}}),tz=(0,o.a)({queryKey:["smv-student-roles",ej,!!(null==eH?void 0:eH.roleAssignments)],enabled:!ej||!!(null==eH?void 0:eH.roleAssignments),staleTime:6e4,queryFn:async()=>{if(ej&&(null==eH?void 0:eH.roleAssignments)){let e=eH.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,D.X)("getTimetable",{type:"student-roles"},eO)).data;return{columns:(null==e?void 0:e.columns)||[],assignments:(null==e?void 0:e.assignments)||{}}}}),tw=null!==(q=null===(t=tk.data)||void 0===t?void 0:t.averages)&&void 0!==q?q:{},tN=null!==($=null===(s=tk.data)||void 0===s?void 0:s.gradeRecordsByStudent)&&void 0!==$?$:{},ty=null!==(K=null===(c=tk.data)||void 0===c?void 0:c.mockAverages)&&void 0!==K?K:{},tC=null!==(Q=null===(A=tk.data)||void 0===A?void 0:A.latestExamsByStudent)&&void 0!==Q?Q:{},tM=null!==(ee=tz.data)&&void 0!==ee?ee:{columns:[],assignments:{}};(0,l.useEffect)(()=>{tu>0&&tb.invalidateQueries({queryKey:["smv-dashboard-grades"]})},[tu,tb]);let[tS,tE]=(0,l.useState)(null),[tA,t_]=(0,l.useState)(!1),[tR,tD]=(0,l.useState)(""),[tL,tF]=(0,l.useState)(!1),[tZ,tI]=(0,l.useState)(!1),[tG,tT]=(0,l.useState)("상담"),[tO,tB]=(0,l.useState)(""),[tW,tP]=(0,l.useState)(!1),[tU,tH]=(0,l.useState)(!1),[tV,tX]=(0,l.useState)("autonomous"),[tY,tq]=(0,l.useState)(null);(0,l.useEffect)(()=>{tE(null),t_(!1),tD(""),tq(null),tH(!1),nC(null),tI(!1),tT("상담"),tB("")},[eQ]),(0,l.useEffect)(()=>{if(eQ&&!ej){let e="counseling-draft:".concat(eQ),t=localStorage.getItem(e);t&&(tB(t),tI(!0))}},[eQ,ej]);let[t$,tK]=(0,l.useState)(""),tQ=(0,l.useRef)(""),tJ=(0,l.useRef)(ey),t0=(0,l.useRef)(eK);(0,l.useEffect)(()=>{tJ.current=ey},[ey]),(0,l.useEffect)(()=>{t0.current=eK},[eK]),(0,l.useEffect)(()=>{if(eQ){let e=eK.find(e=>e.id===eQ);if(!e)return;let t=(null==e?void 0:e.memo)||"";t$!==t&&tQ.current!==t&&(tK(t),tQ.current=t)}else""!==t$&&(tK(""),tQ.current="")},[eQ,ej,eK]),(0,l.useEffect)(()=>{if(eQ&&!ej){let e=setTimeout(async()=>{let e=t0.current.find(e=>e.id===eQ);t$!==((null==e?void 0:e.memo)||"")&&t$!==tQ.current&&await tJ.current(eQ,{memo:t$})&&(tQ.current=t$)},500);return()=>clearTimeout(e)}},[t$,eQ,ej]);let t1=(0,l.useMemo)(()=>eK.filter(e=>{var t,n,s,i;return e.name.includes(e2)||String(e.number).includes(e2)||eY&&e2.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(e2.replace(/[^0-9]/g,""))||eY&&"".concat(null!==(s=e.grade)&&void 0!==s?s:"?","학년 ").concat(null!==(i=e.classNum)&&void 0!==i?i:"?","반 ").concat(e.number,"번").includes(e2)}),[eK,e2,eY]),[t2,t4]=(0,l.useState)("basic");(0,l.useEffect)(()=>{ei&&er&&["basic","grade","mock","record","admission"].includes(er)&&t4(er)},[ei,er]);let[t5,t3]=(0,l.useState)(null),[t6,t9]=(0,l.useState)(!1),[t8,t7]=(0,l.useState)(!1);(0,l.useRef)(null);let ne=(0,l.useRef)(null),{openSettings:nt}=(0,Z.Y)();(0,l.useEffect)(()=>{if(eQ){let e=!1;return(async()=>{t9(!0);try{if(ej&&eH){let t=eH.gradeRecords.filter(e=>e.studentId===eQ).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,i]=t.split("-").map(Number),r=n.reduce((e,t)=>e+(t.gradeLevel||t.gradeRank||0),0)/n.length;return{year:s,semester:i,averageGrade:r.toFixed(2),records:n.map(e=>{var t,n,s,i,r,a,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!==(i=e.rank)&&void 0!==i?i:null,total_students:null!==(r=e.total_students)&&void 0!==r?r:null,percentile:null!==(a=e.percentile)&&void 0!==a?a:null,credits:null!==(l=e.credits)&&void 0!==l?l:null,exam_type:"final"}})}}).sort((e,t)=>
1e.year-t.year||e.semester-t.semester);if(e)return;t3({analysis:s})}else{let t=await el(eQ);if(e)return;t.success?t3(t.data):t3(null)}}catch(t){console.error("Failed to fetch grade analysis",t),e||t3(null)}finally{e||t9(!1)}})(),()=>{e=!0}}},[eQ,ej,eH,tu]),(0,l.useEffect)(()=>{if(eQ){let e=!1;return(async()=>{tf(!0);try{if(ej&&eH&&eH.mockExamRecords){let t=eH.mockExamRecords.filter(e=>e.studentId===eQ);if(t.sort((e,t)=>t.year-e.year||t.month-e.month),e)return;tp(t)}else{let t=await (0,eh.J5)(eQ);if(e)return;t.success&&t.data?tp(t.data):tp([])}}catch(t){console.error("Error fetching mock exams:",t),e||tp([])}finally{e||tf(!1)}})(),()=>{e=!0}}},[eQ,ej,eH,tu]);let nn=(0,l.useCallback)(async()=>{if(ej){let e=await Promise.resolve().then(n.bind(n,96214));td(await e.getGuestCleaningZones());return}let e=await (0,D.X)("getCleaningZones",{},eO);e.success&&e.data&&td(e.data)},[eO,ej]);(0,l.useEffect)(()=>{nn()},[nn]);let ns=(0,l.useCallback)(async()=>{if(!eQ){e9([]),e7([]),tt([]),ts([]),tx([]);return}if(ej&&eH){e9(eH.attendanceRecords.filter(e=>e.studentId===eQ));let e=eH.counselingRecords.filter(e=>e.studentId===eQ);e.sort((e,t)=>new Date(t.date).getTime()-new Date(e.date).getTime()),e7(e),tt((await eS.iT()).filter(e=>e.studentId===eQ)),tx(eH.gradeRecords.filter(e=>e.studentId===eQ));return}let e=await (0,D.X)("getStudentRecords",{studentId:eQ},eO);if(e5.current!==eQ)return;if(e.success&&e.data){var t,n;let s=e.data;null===(t=s.attendance)||void 0===t||t.sort((e,t)=>new Date(t.date).getTime()-new Date(e.date).getTime()),null===(n=s.counseling)||void 0===n||n.sort((e,t)=>new Date(t.date).getTime()-new Date(e.date).getTime()),e9(s.attendance||[]),e7(s.counseling||[]),tt(s.activities||[]),ts(s.seteuk||[]),tr(s.surveys||[])}let s=await (0,D.X)("getGradeRecordsByStudent",{studentId:eQ},eO);e5.current===eQ&&s.success&&s.data&&tx(s.data)},[eQ,ej,eH,eO,tu]);(0,l.useEffect)(()=>{ns()},[ns]),(0,l.useEffect)(()=>{function e(){"visible"===document.visibilityState&&(tm(e=>e+1),ns(),nn(),eT(),tb.invalidateQueries({queryKey:["smv-dashboard-grades"]}),tb.invalidateQueries({queryKey:["smv-student-roles"]}))}return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[ns,nn,tb,eT]);let ni=tc.find(e=>e.studentIds.includes(eQ||"")),nr=!ej&&e3&&e3.userId!==(null==ef?void 0:null===(_=ef.user)||void 0===_?void 0:_.id)&&!eY,na=!ej&&e3&&e3.userId!==(null==ef?void 0:null===(R=ef.user)||void 0===R?void 0:R.id),nl=!ej&&e3&&e3.userId!==(null==ef?void 0:null===(L=ef.user)||void 0===L?void 0:L.id),nc=te.filter(e=>"autonomous"===e.category),nd=te.filter(e=>"career"===e.category),no=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,i=new Date(t);for(;i<=n;){let e=i.getDay();0!==e&&6!==e&&s++,i.setDate(i.getDate()+1)}return s},nx={absent:e6.filter(e=>"결석"===e.type).reduce((e,t)=>e+no(t),0),late:e6.filter(e=>"지각"===e.type).reduce((e,t)=>e+no(t),0),early:e6.filter(e=>"조퇴"===e.type).reduce((e,t)=>e+no(t),0),leave:e6.filter(e=>"결과"===e.type).reduce((e,t)=>e+no(t),0)},nu=Object.entries(to.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&&tv.includes(e.subjectCategory)),i=s.length>0?s.reduce((e,t)=>e+(t.gradeLevel||0),0)/s.length:null,[r,a]=t.split("-").map(Number);return{year:r,semester:a,average:i,count:n.length}}).sort((e,t)=>e.year-t.year||e.semester-t.semester),nm=nu.length>0?nu.filter(e=>null!==e.average).reduce((e,t)=>e+(t.average||0),0)/nu.filter(e=>null!==e.average).length:null,[nh,np]=(0,l.useState)([]);(0,l.useEffect)(()=>{e3&&np((0,J.k_)(e3.careerCategory))},[e3]);let ng=e=>{let t;if(!na){if(nh.includes(e))t=nh.filter(t=>t!==e);else if((0,J.Wn)(e))t=[e];else{let n=nh.filter(e=>!(0,J.Wn)(e));if(n.length>=J.Cd)return;t=[...n,e]}nf(t)}},nf=async e=>{if(!eQ||na)return;let t=(0,J.H6)(e);if(np((0,J.k_)(t)),ej){let e=(await (0,ew.getGuestData)()).students.map(e=>e.id===eQ?{...e,careerCategory:t}:e);await (0,ew.saveGuestData)("students",e),eU(e);return}try{await ey(eQ,{careerCategory:t})||(np(nh),eW("진로 설정 중 오류가 발생했습니다.","error"))}catch(e){console.error("Failed to update career category:",e),np(nh)}},nb=nh.length>0?nh.map(e=>{var t;return null===(t=J.FT.find(t=>
1t.id===e))||void 0===t?void 0:t.label}).filter(Boolean).join(" \xb7 "):"-",nv=async()=>{if(eQ&&tO.trim()&&!na){if(tP(!0),ej){let e={id:eM(),studentId:eQ,studentName:(null==e3?void 0:e3.name)||"",date:(0,F.RJ)(),category:tG,content:tO.trim(),createdAt:new Date().toISOString()},t=[...(await (0,ew.getGuestData)()).counselingRecords,e];await (0,ew.saveGuestData)("counselingRecords",t),eV(e=>({...e,counselingRecords:t})),tB(""),tT("상담"),tI(!1),tP(!1);return}try{(await (0,D.X)("upsertCounselingRecord",{studentId:eQ,date:(0,F.RJ)(),category:tG,content:tO.trim()},eO)).success&&(localStorage.removeItem("counseling-draft:".concat(eQ)),await ns(),tB(""),tT("상담"),tI(!1))}catch(e){console.error("Failed to save counseling record:",e)}finally{tP(!1)}}},nj=(0,ed.X)(nv,tO.trim().length>0&&!tW),nk=e=>{na||(tX(e),tH(!0))},nz=async e=>{if(!eQ||na)return!1;try{if(ej){let t={id:eM(),studentId:eQ,category:e.category,activityName:e.activityName,details:e.details,createdAt:new Date().toISOString()};return await eS.LI(t),await ns(),!0}if((await (0,D.X)("upsertActivityRecord",{studentId:eQ,category:e.category,activityName:e.activityName,details:e.details},eO)).success)return await ns(),!0;return eW("활동 저장 중 오류가 발생했습니다.","error"),!1}catch(e){return console.error("Failed to save activity:",e),eW("활동 저장 중 오류가 발생했습니다.","error"),!1}},nw=async()=>{tS&&tR.trim()&&!tL&&(tF(!0),(await (0,D.X)("upsertCounselingRecord",{studentId:tS.studentId,id:tS.id,date:tS.date,category:tS.category,content:tR.trim()},eO)).success?(e7(e=>e.map(e=>e.id===tS.id?{...e,content:tR.trim()}:e)),tE(e=>e?{...e,content:tR.trim()}:null),t_(!1)):eW("상담 일지 저장 중 오류가 발생했습니다.","error"),tF(!1))},nN=async(e,t)=>{if(e.stopPropagation(),await eB({title:"상담 일지를 삭제할까요?",description:"삭제한 상담 기록은 되돌릴 수 없습니다."})){if(ej){let e=(await (0,ew.getGuestData)()).counselingRecords.filter(e=>e.id!==t);await (0,ew.saveGuestData)("counselingRecords",e),eV(t=>({...t,counselingRecords:e})),e7(e=>e.filter(e=>e.id!==t));return}try{(await (0,D.X)("deleteCounselingRecord",{id:t},eO)).success?e7(e=>e.filter(e=>e.id!==t)):eW("상담 일지 삭제 중 오류가 발생했습니다.","error")}catch(e){console.error("Failed to delete counseling record:",e),eW("상담 일지 삭제 중 오류가 발생했습니다.","error")}}},[ny,nC]=(0,l.useState)(null),nM=(0,l.useMemo)(()=>t5&&t5.analysis?t5.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}))):[],[t5]),nS=(0,l.useMemo)(()=>t5&&t5.analysis?{semester_averages:t5.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:[]},[t5]),nE=e3?(0,ex.Bz)(e3.grade||0):2025,nA=(0,ex.RQ)(nE),n_=(0,ex.f6)(nA),[nR,nD]=(0,l.useState)(!1),[nL,nF]=(0,l.useState)(!1),nZ=!(0,em.c)()&&(nM.length>0||th.length>0),nI=(0,l.useMemo)(()=>nR&&e3?(0,eu._)({student:{name:e3.name,grade:e3.grade,classNum:e3.classNum,number:e3.number},grades:nM,mockExams:th,naesinScale:"5-GRADE"===nA?5:9}):null,[nR,e3,nM,th,nA]);return((0,l.useEffect)(()=>{nD(!1)},[eQ]),"loading"!==eb||(0,I.YY)())?(0,i.jsxs)("div",{className:"h-full flex flex-col md:flex-row bg-zinc-50 dark:bg-[#0c0c0e] text-sm font-sans",children:[(0,i.jsx)("div",{className:"md:hidden w-full h-full absolute inset-0 z-50 bg-[#FBFBF9] dark:bg-zinc-950",children:(0,i.jsx)(es,{students:t1,selectedStudentId:eQ,onSelectStudent:e=>{eJ(e)},attendanceRecords:e6,counselingRecords:e8,activityRecords:te,seteukRecords:tn,gradeRecords:to,mockExams:th,isAdmin:eY,isGuest:ej,grades:nM,statistics:nS,gradingSystem:nA,chartConfig:n_,studentMemo:t$,surveyRecords:ti,selectedCareerCategories:nh,rolesData:tM,studentError:eC,onRetryStudents:eT,studentGradeAverages:tw,studentGradeRecords:tN,studentMockAverages:ty,latestMockExams:tC,isDashboardLoading:eG||tk.isLoading,dashboardError:eC||tk.error,onRetryDashboard:()=>{eT(),tk.refetch()},isSystemAdmin:!!(null==ef?void 0:null===(G=ef.user)||void 0===G?void 0:G.isSystemAdmin)})}),(0,i.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 sub-sidebar-enter",children:[(0,i.jsx)("div",{className:"p-3 border-b border-zinc-200 dark:border-white/5",children:(0,i.jsxs)("div",{className:"relative",children:[(0,i.jsx)(x.Z,{className:"absolute left-2.5 top-2.5 text-zinc-400 dark:text-white/30",size:14}),(0,i.jsx)("input",{type:"text",placeholder:"학생 검색...",value:e2,onChange:e=>e4(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,i.jsxs)("div",{className:"flex-1 overflow-y-auto custom-scrollbar p-2 space-y-0.5",children:[(0,i.jsx)("button",{onPointerDown:e=>{0===e.button&&(e1(!0),eJ(null))},onKeyDown:e=>
1{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),e1(!0),eJ(null))},"data-selected":e0,className:(0,F.cn)("w-full flex items-center gap-3 px-3 py-2.5 rounded-md transition group student-sidebar-item",e0?"bg-zinc-100 dark:bg-white/10 text-zinc-900 dark:text-white":"text-zinc-500 dark:text-[#a1a1aa] hover:bg-zinc-50 dark:hover:bg-white/5 hover:text-zinc-900 dark:hover:text-white"),children:eq?(0,i.jsxs)("div",{className:"flex items-baseline gap-2 overflow-hidden w-full",children:[(0,i.jsx)("span",{className:(0,F.cn)("truncate text-[15px] font-medium transition-colors shrink-0 student-sidebar-name",e0?"text-zinc-900 dark:text-white":"text-zinc-600 dark:text-zinc-400"),children:"전체 학생"}),(0,i.jsxs)("span",{className:(0,F.cn)("text-[13px] font-medium tracking-tight whitespace-nowrap transition-colors student-sidebar-name",e0?"text-zinc-500 dark:text-white/40":"text-zinc-400 dark:text-white/20"),children:[eK.length,"명"]})]}):(0,i.jsxs)("div",{className:"flex items-center gap-3 overflow-hidden w-full",children:[(0,i.jsx)("span",{className:(0,F.cn)("w-5 h-5 rounded-full flex items-center justify-center shrink-0 transition-colors border student-sidebar-number",e0?"bg-zinc-100 dark:bg-white text-zinc-900 dark:text-zinc-900 border-zinc-200 dark:border-transparent":"bg-[#f4f4f5] dark:bg-zinc-800 text-zinc-500 dark:text-zinc-400 group-hover:bg-zinc-100 dark:group-hover:bg-zinc-700 border-zinc-200 dark:border-zinc-700/50"),children:(0,i.jsx)(u.Z,{size:10})}),(0,i.jsx)("span",{className:(0,F.cn)("truncate text-[15px] font-medium transition-colors student-sidebar-name",e0?"text-zinc-900 dark:text-white":"text-zinc-600 dark:text-zinc-400"),children:"전체 학생"})]})}),0!==t1.length||ej||eD?0===t1.length?(0,i.jsx)("div",{className:"text-center py-8 text-white/30 text-xs",children:"학생 없음"}):t1.map(e=>(0,i.jsx)("button",{onPointerDown:t=>{0===t.button&&(eJ(e.id),e1(!1))},onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),eJ(e.id),e1(!1))},"data-selected":eQ===e.id,className:(0,F.cn)("w-full flex items-center gap-3 px-3 py-2.5 rounded-md transition group student-sidebar-item",eQ===e.id?"bg-zinc-100 dark:bg-white/10 text-zinc-900 dark:text-white":"text-zinc-500 dark:text-[#a1a1aa] hover:bg-zinc-50 dark:hover:bg-white/5 hover:text-zinc-900 dark:hover:text-white"),children:eq?(0,i.jsxs)("div",{className:"flex items-baseline gap-2 overflow-hidden w-full",children:[(0,i.jsx)("span",{className:(0,F.cn)("truncate text-[15px] font-medium transition-colors shrink-0 student-sidebar-name",eQ===e.id?"text-zinc-900 dark:text-white":"text-zinc-600 dark:text-zinc-400"),children:e.name}),(0,i.jsxs)("span",{className:(0,F.cn)("text-[13px] font-medium tracking-tight whitespace-nowrap transition-colors student-sidebar-name",eQ===e.id?"text-zinc-500 dark:text-white/40":"text-zinc-400 dark:text-white/20"),children:[e.grade,"학년 ",e.classNum,"반 ",e.number,"번"]})]}):(0,i.jsxs)("div",{className:"flex items-center gap-3 overflow-hidden w-full",children:[(0,i.jsx)("span",{className:(0,F.cn)("w-5 h-5 rounded-full flex items-center justify-center text-[10px] font-bold shrink-0 transition-colors border student-sidebar-number",eQ===e.id?"bg-zinc-100 dark:bg-white text-zinc-900 dark:text-zinc-900 border-zinc-200 dark:border-transparent":"bg-[#fafaf9] dark:bg-zinc-800 text-zinc-500 dark:text-zinc-400 group-hover:bg-zinc-100 dark:group-hover:bg-zinc-700 border-zinc-200 dark:border-zinc-700/50"),children:e.number}),(0,i.jsx)("span",{className:(0,F.cn)("truncate text-[15px] font-medium transition-colors student-sidebar-name",eQ===e.id?"text-zinc-900 dark:text-white":"text-zinc-600 dark:text-zinc-400"),children:e.name})]})},e.id)):(0,i.jsx)("div",{className:"flex justify-center py-8",children:(0,i.jsx)(eo.W,{size:20,speed:1.2})})]})]}),(0,i.jsx)("div",{className:"hidden md:flex md:flex-1 md:flex-col overflow-hidden bg-white dark:bg-[#0c0c0e] overflow-x-hidden",children:e0?(0,i.jsx)(ea.default,{students:eK,isAdmin:eY,isSystemAdmin:!!(null==ef?void 0:null===(T=ef.user)||void 0===T?void 0:T.isSystemAdmin),studentGradeAverages:tw,studentGradeRecords:tN,studentMockAverages:ty,latestMockExams:tC,studentRoles:tM.assignments||{},isLoading:eG,error:eC,onRetry:eT,onSelectStudent:e=>{eJ(e),e1(!1)}}):0!==eK.length||ej||eD?0===eK.length?(0,i.jsx)("div",{className:"hidden md:flex flex-1 items-center justify-center p-6",children:(0,i.jsx)(S.Z,{size:"lg",title:"등록된 학생이 없습니다",description:"담임 학급 학생 명단을 먼저 등록하여 학생 관리와 성장 리포트를 시작해 보세요.",action:(0,i.jsx)("button",{onClick:()=>nt("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:"학생 등록하기"})})}):e3?(0,i.jsxs)("div",{className:"flex flex-col h-full",children:[(0,i.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,i.jsxs)("button",{onClick:()=>eJ(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,i.jsx)(m.Z,{size:18}),(0,i.jsx)("span",{children:"목록"})]}),(0,i.jsx)("div",{className:"flex items-start justify-between mb-4 md:mb-6",children:(0,i.jsxs)("div",{className:"flex items-center gap-3 md:gap-5",children:[(0,i.jsx)("div",{className:"hidden md:flex w-14 h-14 roun
1ded-xl bg-zinc-50 dark:bg-[#18181b] items-center justify-center shrink-0 border border-zinc-200 dark:border-white/5",children:(0,i.jsx)("span",{className:"text-lg font-bold text-zinc-900 dark:text-white",children:e3.number})}),(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsxs)("h2",{className:"text-[var(--mobile-font-h1)] md:text-xl font-bold text-zinc-900 dark:text-white flex items-center gap-2",children:[(0,i.jsxs)("span",{className:"md:hidden text-[var(--mobile-font-caption)] font-semibold text-zinc-400 dark:text-zinc-500",children:[e3.number,"번"]}),e3.name,(0,i.jsxs)("span",{className:"text-xs font-normal text-zinc-500 bg-zinc-100 dark:bg-[#18181b] px-2 py-0.5 rounded border border-zinc-200 dark:border-white/5",children:[e3.grade,"학년 ",e3.classNum,"반"]})]}),(0,i.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-zinc-500 mt-2",children:[(0,i.jsxs)("div",{className:"flex flex-col",children:[(0,i.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mb-0.5",children:"평균 내신"}),(0,i.jsxs)("span",{className:"text-zinc-700 dark:text-zinc-300 font-medium text-sm",children:[null!==nm&&Number.isFinite(nm)?nm.toFixed(1):"-","등급"]})]}),(0,i.jsx)("div",{className:"w-px h-6 bg-zinc-200 dark:bg-zinc-800"}),(0,i.jsxs)("div",{className:"flex flex-col",children:[(0,i.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mb-0.5",children:"출결 기록"}),(0,i.jsxs)("div",{className:"flex items-center gap-2 text-zinc-700 dark:text-zinc-300 font-medium text-sm",children:[(0,i.jsxs)("span",{children:["결석 ",nx.absent]}),(0,i.jsxs)("span",{children:["지각 ",nx.late]}),(0,i.jsxs)("span",{children:["조퇴 ",nx.early]}),(0,i.jsxs)("span",{children:["결과 ",nx.leave]})]})]}),(0,i.jsx)("div",{className:"w-px h-6 bg-zinc-200 dark:bg-zinc-800"}),(0,i.jsxs)("div",{className:"flex flex-col",children:[(0,i.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mb-0.5",children:"희망 진로"}),(0,i.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300 font-medium text-sm",children:nb})]}),(0,i.jsx)("div",{className:"w-px h-6 bg-zinc-200 dark:bg-zinc-800"}),(0,i.jsxs)("div",{className:"flex flex-col",children:[(0,i.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mb-0.5",children:"역할"}),(0,i.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300 font-medium text-sm",children:(null==tM?void 0:null===(O=tM.assignments)||void 0===O?void 0:O[eQ])&&Object.values(null!==(et=null==tM?void 0:null===(B=tM.assignments)||void 0===B?void 0:B[eQ])&&void 0!==et?et:{}).filter(Boolean).join(", ")||"-"})]}),(0,i.jsx)("div",{className:"w-px h-6 bg-zinc-200 dark:bg-zinc-800"}),(0,i.jsxs)("div",{className:"flex flex-col",children:[(0,i.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mb-0.5",children:"청소"}),(0,i.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300 font-medium text-sm",children:(null==ni?void 0:ni.name)||"-"})]})]})]})]})}),(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[(0,i.jsxs)("div",{className:"flex-1 min-w-0 flex items-center gap-1 overflow-x-auto flex-nowrap student-tabs-container [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:[(0,i.jsx)(eI,{isActive:"basic"===t2,onClick:()=>t4("basic"),icon:k,label:"기본"}),(0,i.jsx)(eI,{isActive:"grade"===t2,onClick:()=>t4("grade"),icon:z,label:"내신"}),(0,i.jsx)(eI,{isActive:"mock"===t2,onClick:()=>t4("mock"),icon:w,label:"모의고사"}),(0,i.jsx)(eI,{isActive:"record"===t2,onClick:()=>t4("record"),icon:N,label:"생활기록부"}),(0,i.jsx)(eI,{isActive:"admission"===t2,onClick:()=>t4("admission"),icon:y,label:"대입"})]}),eK.length>0&&(0,i.jsx)(eZ,{onClick:()=>nF(!0),icon:M,label:"모바일 성적표"}),nZ&&(0,i.jsx)(eZ,{onClick:()=>nD(!0),icon:C,label:"성적 리포트 인쇄"})]})]}),(0,i.jsxs)("div",{ref:ne,className:"flex-1 overflow-y-auto custom-scrollbar p-4",children:["basic"===t2&&(0,i.jsx)("div",{className:"max-w-[1400px] mx-auto space-y-4",children:(0,i.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[(0,i.jsx)(eL,{title:"최근 출결",action:(0,i.jsxs)("span",{className:"text-xs text-zinc-400 dark:text-zinc-500",children:[e6.length,"건"]}),children:0===e6.length?(0,i.jsx)("div",{className:"py-8 text-center text-zinc-400 dark:text-zinc-400 text-xs",children:"기록 없음"}):(0,i.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:e6.slice(0,6).map(e=>(0,i.jsxs)("div",{className:"flex items-center text-xs py-2 px-3 bg-white dark:bg-zinc-800/50 hover:bg-zinc-50 dark:hover:bg-zinc-700/50 rounded transition-colors gap-3 student-detail-attendance-card border border-zinc-100 dark:border-white/5",children:[(0,i.jsxs)("span",{className:"text-zinc-400 dark:text-zinc-500 whitespace-nowrap",children:[(0,F.$j)(e.date),e.endDate&&e.endDate!==e.date?" ~ ".concat((0,F.$j)(e.endDate)):""]}),(0,i.jsxs)("div",{className:"flex-1 flex items-center justify-end gap-1 whitespace-nowrap",children:[(0,i.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300",children:e.reason}),(0,i.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300",children:e.type})]})]},e.id))})}),(0,i.jsx)(eL,{title:"메모",flush:!0,children:(0,i.jsx)("div",{className:"px-2 pb-1",children:(0,i.jsx)("textarea",{placeholder:na?"등록된 메모가 없습니다":"학생에 대한 메모를 입력하세요...",value:t$,onCh
1ange:e=>tK(e.target.value),readOnly:na,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",na&&"cursor-default")})})}),(0,i.jsx)(eL,{title:"설문 응답",action:ti.length>0&&!na&&(0,i.jsx)("button",{"aria-label":"설문 공개 설정",onClick:()=>tl(!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,i.jsx)(h.Z,{size:14})}),children:ti.every(e=>e.answers.every(e=>!e.showOnManagement))?(0,i.jsx)("div",{className:"py-4 text-center text-zinc-400 dark:text-zinc-400 text-[11px]",children:0===ti.length?"설문 조사 응답 결과의 일부를 표시할 수 있습니다":"표시되도록 설정된 설문 응답이 없습니다"}):(0,i.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:ti.map(e=>(0,i.jsx)("div",{className:"contents",children:e.answers.filter(e=>e.showOnManagement).map((t,n)=>(0,i.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,i.jsxs)("div",{className:"text-[11px] text-zinc-500 flex items-center gap-1.5",children:[(0,i.jsx)("div",{className:"w-1 h-1 rounded-full bg-blue-500"}),t.question]}),(0,i.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,i.jsxs)(eL,{title:"희망 진로 분야",children:[(0,i.jsx)("div",{className:"flex flex-wrap gap-2",children:J.FT.map(e=>{let t=nh.includes(e.id),n=!t&&!(0,J.Wn)(e.id)&&nh.length>=J.Cd,s=na||n;return(0,i.jsx)("button",{onClick:()=>ng(e.id),disabled:s,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",na&&"cursor-default"),children:e.label},e.id)})}),0===nh.length?(0,i.jsxs)("p",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 mt-3 flex items-center gap-1.5 font-medium",children:[(0,i.jsx)(p.Z,{size:12}),"희망 진로 분야를 골라 두세요. (최대 ",J.Cd,"개)"]}):nh.length>=J.Cd&&(0,i.jsxs)("p",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 mt-3 flex items-center gap-1.5 font-medium",children:[(0,i.jsx)(p.Z,{size:12}),"최대 ",J.Cd,"개까지 선택할 수 있어요. 변경하려면 선택된 분야를 먼저 해제하세요."]})]}),(0,i.jsxs)(eL,{title:"상담 일지",action:!na&&(0,i.jsx)("button",{"aria-label":"상담 기록 추가",onClick:()=>tI(!0),className:"p-1 text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-200 transition-colors",children:(0,i.jsx)(g.Z,{size:16})}),children:[tZ&&(0,i.jsxs)("div",{className:"mb-4 bg-zinc-900 rounded-lg p-4 student-detail-counseling-creation",children:[(0,i.jsx)("textarea",{value:tO,onKeyDown:nj,onChange:e=>{let t=e.target.value;if(tB(t),eQ&&!ej){let e="counseling-draft:".concat(eQ);t.trim()?localStorage.setItem(e,t):localStorage.removeItem(e)}},placeholder:"상담 내용을 입력하세요...",className:"w-full bg-transparent text-sm text-white 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,i.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,i.jsx)("button",{onClick:()=>{tI(!1),tB(""),tT("상담"),eQ&&!ej&&localStorage.removeItem("counseling-draft:".concat(eQ))},className:"px-3 py-1 text-xs text-zinc-500 hover:text-zinc-300",children:"취소"}),(0,i.jsx)("button",{onClick:nv,disabled:!tO.trim()||tW,className:"px-3 py-1 bg-white hover:bg-zinc-200 text-black text-xs font-medium rounded disabled:opacity-50",children:"등록"})]})]}),nl?(0,i.jsxs)("div",{className:"flex flex-col items-center justify-center py-12 px-4 text-center",children:[(0,i.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,i.jsx)(p.Z,{className:"text-zinc-400",size:24})}),(0,i.jsx)("h3",{className:"text-sm font-medium text-zinc-900 dark:text-zinc-100 mb-1",children:"상담 내역 보호"}),(0,i.jsx)("p",{className:"text-xs text-zinc-500 dark:text-zinc-400 max-w-[200px] leading-relaxed",children:"상담 내용은 담임선생님만 조회할 수 있습니다."})]}):0!==e8.length||tZ?(0,i.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:e8.slice(0,6).map(e=>(0,i.jsxs)("div",{onClick:()=>{nl||(tE(e),tD(e.content),t_(!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",!nl&&"curs
1or-pointer hover:bg-zinc-50 dark:hover:bg-zinc-800"),children:[(0,i.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,i.jsx)("span",{className:"text-[10px] text-zinc-400 font-mono",children:e.date}),!na&&(0,i.jsx)("button",{onClick:t=>nN(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,i.jsx)(f.Z,{size:13})})]}),(0,i.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,i.jsx)("div",{className:"py-8 text-center text-zinc-600 dark:text-zinc-400 text-xs",children:"기록 없음"})]}),(0,i.jsx)(eL,{title:"역할",action:!na&&(0,i.jsx)("button",{"aria-label":"역할 설정",onClick:()=>nt("student-roles",eQ,{onClose:ns}),className:"p-1 text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-200 transition-colors",children:(0,i.jsx)(g.Z,{size:16})}),children:(null!==(en=null==tM?void 0:null===(U=tM.columns)||void 0===U?void 0:U.length)&&void 0!==en?en:0)===0?(0,i.jsx)("div",{className:"py-4 text-center text-zinc-400 dark:text-zinc-400 text-xs",children:"배정된 역할 없음"}):(0,i.jsxs)("div",{className:"flex flex-wrap gap-2",children:[null==tM?void 0:null===(H=tM.columns)||void 0===H?void 0:H.map(e=>{var t,n;let s=null==tM?void 0:null===(n=tM.assignments)||void 0===n?void 0:null===(t=n[eQ])||void 0===t?void 0:t[e.id];return s?(0,i.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,i.jsx)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500",children:e.name}),(0,i.jsx)("span",{className:"text-[13px] text-zinc-900 dark:text-zinc-200 font-medium",children:s})]},e.id):null}),Object.values((null==tM?void 0:null===(X=tM.assignments)||void 0===X?void 0:X[eQ])||{}).every(e=>!e)&&(0,i.jsx)("div",{className:"w-full py-4 text-center text-zinc-400 dark:text-zinc-400 text-xs",children:"배정된 역할 없음"})]})}),(0,i.jsx)(eL,{title:"자율활동",action:!na&&(0,i.jsx)("button",{"aria-label":"활동 추가",onClick:()=>nk("autonomous"),className:"p-1 text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-200 transition-colors",children:(0,i.jsx)(g.Z,{size:16})}),children:0===nc.length?(0,i.jsx)("div",{className:"py-4 text-center text-zinc-600 dark:text-zinc-400 text-xs",children:"기록 없음"}):(0,i.jsx)("div",{className:"space-y-2",children:nc.slice(0,3).map(e=>(0,i.jsx)("div",{onClick:t=>{t.stopPropagation(),tq(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,i.jsx)("div",{className:"flex items-center",children:(0,i.jsx)("span",{className:"text-[13px] font-medium text-zinc-800 dark:text-zinc-300 line-clamp-1",children:e.activityName})})},e.id))})}),(0,i.jsx)(eL,{title:"진로활동",action:!na&&(0,i.jsx)("button",{"aria-label":"활동 추가",onClick:()=>nk("career"),className:"p-1 text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-200 transition-colors",children:(0,i.jsx)(g.Z,{size:16})}),children:0===nd.length?(0,i.jsx)("div",{className:"py-4 text-center text-zinc-600 dark:text-zinc-400 text-xs",children:"기록 없음"}):(0,i.jsx)("div",{className:"space-y-2",children:nd.slice(0,3).map(e=>(0,i.jsx)("div",{onClick:t=>{t.stopPropagation(),tq(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,i.jsx)("div",{className:"flex items-center",children:(0,i.jsx)("span",{className:"text-[13px] font-medium text-zinc-800 dark:text-zinc-300 line-clamp-1",children:e.activityName})})},e.id))})})]})}),"grade"===t2&&(0,i.jsx)("div",{className:"space-y-4",children:t6?(0,i.jsx)(eg,{title:"데이터 분석 중...",desc:"내신 성적 데이터를 불러오고 있습니다.",useLogoLoader:!0,minimal:!0}):t5&&0!==t5.analysis.length?(()=>{let e=e3?(0,ex.Bz)(e3.grade||0):2025,t=(0,ex.RQ)(e),n=(0,ex.f6)(t),s=t5.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:t5.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,i.jsx)(eE,{grades:s,statistics:r,gradingSystem:t,chartConfig:n,studentGrade:null==e3?void 0:e3.grade},eQ)})():(0,i.jsx)(eg,{title:"데이터 없음",desc:"등록된 내신 성적 데이터가 없습니다.",minimal:!0,action:!nr&&(0,i.jsxs)("button",{onClick:()=>{ej?window.dispatchEvent(new CustomEvent("open-login-modal")):nt("grade-file")},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,i.jsx)(b.Z,{size:14}),"성적 파일 업로드"]})})}),"mock"===t2&&(0,i.jsx)("div",{className:"space-y-6",children:tg?(0,i.jsx)(eg,{title:"데이터 불러오는 중...",desc:"모의고사 성적 데이터를 불러오고 있습니다.",useLogoLoader:!0,minimal:!0}):th.length>0?(0,i.jsx)(eA,{mockExams:th},eQ):(0,i.jsx)(eg,{title:"데이터 없음",desc:"등록된 모의고사 성적 데이터가 없습니다.",minimal:!0,action:!nr&&(0,i.jsxs)("button",{onClick:()=>{ej?window.dispatchEvent(new CustomEvent("open-login-modal")):nt("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,i.jsx)(b.Z,{size:14}),"성적 파일 업로드"]})})}),"record"===t2&&(0,i.jsx)("div",{className:"space-y-6",children:eD||ej?(null==e3?void 0:e3.lifeRecordAnalysis)?(0,i.jsx)(W,{studentId:e3.id,attendanceRecords:e6,activityRecords:te,seteukRecords:tn,studentName:e3.name,studentGrade:e3.grade||0,studentClass:e3.classNum||0,studentNumber:e3.number,lifeRecordAnalysis:e3.lifeRecordAnalysis,overallOpinion:e3.overallOpinion}):(0,i.jsx)(eg,{title:"데이터 없음",desc:"등록된 생활기록부 데이터가 없습니다.",minimal:!0,action:!nr&&(0,i.jsxs)("button",{onClick:()=>{ej?window.dispatchEvent(new CustomEvent("open-login-modal")):nt("record-grade",e3.id,{onClose:()=>{eT()}})},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,i.jsx)(b.Z,{size:14}),"생활기록부 pdf 업로드"]})}):(0,i.jsx)(eg,{title:"데이터 불러오는 중...",desc:"생활기록부 데이터를 불러오고 있습니다.",useLogoLoader:!0,minimal:!0})}),"admission"===t2&&eQ&&(0,i.jsx)(V,{studentId:eQ,studentGrade:e3.grade||0,isGuest:ej,desktop:!0})]})]}):(0,i.jsx)("div",{className:"hidden md:flex flex-1 items-center justify-center p-6",children:(0,i.jsx)(S.Z,{size:"lg",title:"학생을 선택해 주세요",description:"왼쪽 명단에서 학생을 선택하면 상세 정보 및 맞춤 리포트를 확인할 수 있습니다."})}):(0,i.jsxs)("div",{className:"hidden md:flex flex-1 flex-col items-center justify-center text-gray-400",children:[(0,i.jsx)(eo.W,{size:40,speed:1.2}),(0,i.jsx)("p",{className:"mt-4 text-sm",children:"학생 데이터를 불러오는 중..."})]})}),tS&&(0,i.jsxs)("div",{className:"modal-viewport z-[110] flex items-center justify-center p-4",children:[(0,i.jsx)("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200",onClick:()=>tE(null)}),(0,i.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"상담 일지",onKeyDown:e=>{"Escape"===e.key&&tE(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,i.jsx)("button",{"aria-label":"닫기",onClick:()=>tE(null),className:"absolute top-4 right-4 text-zinc-500 hover:text-zinc-900 dark:hover:text-white transition-colors",children:(0,i.jsx)(v.Z,{size:20})}),(0,i.jsxs)("div",{className:"flex items-center justify-between mb-4 pr-8",children:[(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[(0,i.jsx)("h3",{className:"text-lg font-bold text-zinc-900 dark:text-white leading-none",children:null==e3?void 0:e3.name}),(0,i.jsx)("span",{className:"text-xs text-zinc-500 font-mono mt-0.5",children:tS.date}),(0,i.jsx)("button",{onClick:()=>tA?nw():t_(!0),disabled:tL,className:(0,F.cn)("p-1 ml-1 rounded transition-colors",tA?"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:tL?(0,i.jsx)(eo.W,{size:14}):tA?(0,i.jsx)(j.Z,{size:14}):(0,i.jsx)(h.Z,{size:14})})]}),(0,i.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:tS.category})]}),(0,i.jsx)("div",{className:"",children:tA?(0,i.jsx)("textarea",{value:tR,onChange:e=>tD(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] focu
1s:outline-none focus:border-blue-500/50 min-h-[150px] resize-none",autoFocus:!0}):(0,i.jsx)("p",{className:"text-sm text-zinc-700 dark:text-zinc-300 leading-relaxed whitespace-pre-wrap",children:tS.content})})]})]}),(0,i.jsx)(ev,{isOpen:tU,onClose:()=>tH(!1),onSave:nz,initialCategory:tV,studentName:null==e3?void 0:e3.name}),(0,i.jsx)(ek,{isOpen:!!tY,onClose:()=>tq(null),activity:tY}),nI&&eQ&&(0,i.jsx)(e_,{model:nI,studentId:eQ,isGuest:ej,onClose:()=>nD(!1)}),nL&&(0,i.jsx)(eR,{students:eK.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!=eQ?eQ:void 0,onClose:()=>nF(!1),isSystemAdmin:!!(null==ef?void 0:null===(Y=ef.user)||void 0===Y?void 0:Y.isSystemAdmin)}),ta&&(0,i.jsx)(eF,{responses:ti,onClose:()=>tl(!1),onToggle:async(e,t)=>{let n=ti.flatMap(e=>e.answers).find(t=>t.id===e);if(!n)return;let s=n.question;tr(e=>e.map(e=>({...e,answers:e.answers.map(e=>e.question===s?{...e,showOnManagement:t}:e)}))),(0,D.X)("updateSurveyAnswerVisibility",{answerId:e,showOnManagement:t},eO)}}),(0,i.jsx)(E.Z,{isOpen:!!ny,onClose:()=>nC(null),title:null==ny?void 0:ny.title,children:(0,i.jsx)("p",{className:"text-[var(--mobile-font-body)] text-zinc-700 dark:text-zinc-300 leading-relaxed",children:null==ny?void 0:ny.content})})]}):(0,i.jsx)("div",{className:"flex items-center justify-center h-full w-full",children:(0,i.jsx)(eo.W,{size:28})})}function eL(e){let{title:t,action:n,children:s,className:r,flush:a=!1}=e;return(0,i.jsxs)("div",{className:(0,F.cn)("bg-[#fafaf9] dark:bg-[#18181b] rounded-xl overflow-hidden",r),children:[(0,i.jsxs)("div",{className:"flex justify-between items-center px-4 py-3",children:[(0,i.jsx)("h3",{className:"font-semibold text-zinc-900 dark:text-zinc-200 text-sm",children:t}),n]}),(0,i.jsx)("div",{className:a?"":"px-4 pb-4",children:s})]})}function eF(e){let{responses:t,onClose:n,onToggle:s}=e;return(0,i.jsxs)("div",{className:"modal-viewport z-[100] flex items-center justify-center p-4",children:[(0,i.jsx)("div",{className:"absolute inset-0 bg-black/50 backdrop-blur-sm",onClick:n}),(0,i.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,i.jsxs)("div",{className:"flex justify-between items-center px-6 py-4 border-b border-zinc-100 dark:border-white/5",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("h3",{className:"text-lg font-bold text-zinc-900 dark:text-white",children:"설문 응답 노출 설정"}),(0,i.jsx)("p",{className:"text-xs text-zinc-500 mt-1",children:"설문에 참여한 모든 학생들에게 공통으로 적용됩니다."})]}),(0,i.jsxs)("div",{className:"flex items-center gap-1",children:[(0,i.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,i.jsx)(j.Z,{size:20})}),(0,i.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,i.jsx)(v.Z,{size:20})})]})]}),(0,i.jsx)("div",{className:"p-6 max-h-[70vh] overflow-y-auto custom-scrollbar",children:0===t.length?(0,i.jsx)(S.Z,{size:"sm",title:"참여한 설문이 없습니다",description:"해당 학생이 참여하여 제출한 설문 응답 내역이 없습니다."}):(0,i.jsx)("div",{className:"space-y-8",children:t.map(e=>(0,i.jsxs)("div",{className:"space-y-3",children:[(0,i.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,i.jsx)("div",{className:"w-1 h-4 bg-blue-500 rounded-full"}),(0,i.jsx)("h4",{className:"text-sm font-bold text-zinc-900 dark:text-zinc-100",children:e.surveyTitle}),(0,i.jsxs)("span",{className:"text-[10px] text-zinc-400 font-normal",children:[e.submittedAt," 제출"]})]}),(0,i.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:e.answers.map(e=>(0,i.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,i.jsxs)("div",{className:"flex flex-col gap-0.5 flex-1 min-w-0 pr-3",children:[(0,i.jsx)("span",{className:"text-[11px] font-medium text-zinc-500 dark:text-zinc-400 truncate",children:e.question}),(0,i.jsx)("span",{className:"text-[13px] text-zinc-900 dark:text-zinc-200 line-clamp-2",children:e.answer})]}),(0,i.jsx)("input",{type:"checkbox",checked:e.showOnManagement,onChange:t=>s(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 eZ(e){let{onClick:t,icon:n,label:s}=e;return(0,i.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,i.jsx)(n,{size:16,className:"group-hover:[&_g]:[stroke-width:30]"}),(0,i.jsxs)("span",{className:"grid justify-items-center",children:[(0,i.jsx)("span",{"aria-hidden":!0,
1className:"invisible col-start-1 row-start-1 font-semibold",children:s}),(0,i.jsx)("span",{className:"col-start-1 row-start-1 group-hover:font-semibold",children:s})]})]})}function eI(e){let{isActive:t,onClick:n,icon:s,label:r}=e;return(0,i.jsxs)("button",{onClick:n,className:(0,F.cn)("flex items-center gap-1.5 md:gap-2 px-2.5 md:px-4 py-2.5 md:py-3 text-xs md:text-sm font-medium border-b-2 transition-colors relative whitespace-nowrap shrink-0",t?"border-blue-500 text-blue-600 dark:border-[#2883DE] dark:text-[#2883DE] md:border-[#416FAD] md:text-[#416FAD] dark:md:border-[#9CBBEB] dark:md:text-[#9CBBEB]":"border-transparent text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-200 hover:bg-zinc-100 dark:hover:bg-zinc-800/50 rounded-t-md"),children:[(0,i.jsx)(s,{size:16,className:"md:block hidden shrink-0"}),(0,i.jsx)(s,{size:14,className:"md:hidden shrink-0"}),r]})}},37456:function(e,t,n){n.d(t,{Cd:function(){return i},FT:function(){return s},H6:function(){return d},Wn:function(){return a},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:["자유전공","자율전공","무전공"]}],i=3,r=["undecided"];function a(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>=i))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}},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 i}});var s=n(93448);function i(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];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.