PageSourceSearch

https://naemo.ai/_next/static/chunks/8280.ab59e017eb9fb46f.js

js naemo.ai collected 2026-09-24 14:31:50 UTC 110,931 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8280],{92735:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]])},21047:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("Minus",[["path",{d:"M5 12h14",key:"1ays0h"}]])},89227:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("Pause",[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]])},82431:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(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"}]])},14064:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("Undo2",[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5v0a5.5 5.5 0 0 1-5.5 5.5H11",key:"llx8ln"}]])},62883:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("WandSparkles",[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]])},72173:function(e,t,r){r.d(t,{R:function(){return d}});var n=r(57437),s=r(2265);let a=(0,r(79205).Z)("CloudOff",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193",key:"yfwify"}],["path",{d:"M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07",key:"jlfiyv"}]]);var i=r(82431),l=r(51817),c=r(30401),o=r(93448);function d(e){let{isSaving:t,hasUnsavedChanges:r,error:d=null,onRetry:u,className:x}=e,h=t||r,[m,p]=(0,s.useState)(!1),f=(0,s.useRef)(!1);(0,s.useEffect)(()=>{h?f.current=!0:f.current&&(f.current=!1,d||p(!0))},[h,d]);let b=(0,o.cn)("flex items-center gap-1.5 text-xs font-medium select-none transition-opacity duration-300",x);return d?(0,n.jsxs)("div",{role:"status","aria-live":"assertive",className:b,children:[(0,n.jsxs)("span",{className:"flex items-center gap-1.5 text-red-600 dark:text-red-400",children:[(0,n.jsx)(a,{size:13,strokeWidth:2.25,"aria-hidden":"true"}),"저장 안 됨"]}),u&&(0,n.jsxs)("button",{type:"button",onClick:u,className:"inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-red-700 dark:text-red-300 hover:bg-red-50 dark:hover:bg-red-500/10 transition-colors",children:[(0,n.jsx)(i.Z,{size:11,strokeWidth:2.5,"aria-hidden":"true"}),"다시 시도"]})]}):(0,n.jsx)("div",{role:"status","aria-live":"polite",className:b,children:h?(0,n.jsxs)("span",{className:"flex items-center gap-1.5 text-zinc-600 dark:text-zinc-300",children:[(0,n.jsx)(l.Z,{size:13,className:"animate-spin",strokeWidth:2.25,"aria-hidden":"true"}),"저장 중"]}):m?(0,n.jsxs)("span",{className:"flex items-center gap-1.5 text-zinc-600 dark:text-zinc-300",children:[(0,n.jsx)(c.Z,{size:13,className:"text-emerald-600 dark:text-emerald-400",strokeWidth:2.5,"aria-hidden":"true"}),"저장됨"]}):(0,n.jsxs)("span",{className:"flex items-center gap-1.5 text-zinc-500 dark:text-zinc-400",children:[(0,n.jsx)("span",{"aria-hidden":"true",className:"inline-block w-1.5 h-1.5 rounded-full bg-zinc-400 dark:bg-zinc-500"}),"자동 저장"]})})}},43059:function(e,t,r){r.d(t,{Lz:function(){return d},ZP:function(){return o}});var n=r(57437),s=r(93448);r(2265);var a=r(52345),i=r(13100),l=r(92846);let c={type:"spring",stiffness:450,damping:30,mass:.5};function o(e){let{children:t,className:r,onClick:o,hapticFeedback:d=!0}=e,u=(0,a.J)(),x=()=>{o&&(d&&l.MU.tap(),o())},h=(0,s.cn)("relative overflow-hidden","bg-white dark:bg-[#1C1C1E]","border border-zinc-200/70 dark:border-white/[0.08] shadow-[0_1px_3px_rgba(0,0,0,0.03)] dark:shadow-none","rounded-[var(--mobile-radius-card)]","p-4 transition-[background-color,border-color] duration-200",o&&"cursor-pointer touch-p
1an-y select-none",r);return o?(0,n.jsx)(i.E.div,{role:"button",tabIndex:0,whileTap:u?void 0:{scale:.975},transition:c,onClick:x,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),x())},className:h,style:{borderRadius:"var(--mobile-radius-card)"},children:t}):(0,n.jsx)("div",{className:h,style:{borderRadius:"var(--mobile-radius-card)"},children:t})}function d(e){let{children:t,className:r}=e;return(0,n.jsx)("div",{className:(0,s.cn)("flex items-center justify-between mb-2 text-zinc-900 dark:text-zinc-100",r),children:t})}},84200:function(e,t,r){r.d(t,{Z:function(){return u}});var n=r(57437),s=r(2265),a=r(7888),i=r(93448),l=r(45007),c=r(13100),o=r(92846),d=r(17829);function u(e){let{students:t,selectedStudentId:r,onSelectStudent:s,onOpenDashboard:l,totalStudentsCount:u,searchQuery:x,onSearchChange:m,isAdmin:p,error:f,onRetry:b}=e;return(0,n.jsx)("div",{className:"flex flex-col h-full min-h-0 flex-1 bg-[#FBFBF9] dark:bg-zinc-950",children:(0,n.jsx)(d.Z,{children:(0,n.jsx)("div",{className:"flex-1 overflow-y-auto px-4 mobile-scroll-with-floating","data-pull-scroll":!0,children:0===t.length?(0,n.jsx)("div",{className:"text-center py-16 flex flex-col items-center justify-center",children:f?(0,n.jsxs)("div",{className:"flex flex-col items-center gap-3 px-6",children:[(0,n.jsx)("div",{className:"text-red-600 dark:text-red-400 text-sm font-semibold",children:"학생 명단을 불러오지 못했습니다"}),(0,n.jsx)("div",{className:"text-zinc-600 dark:text-zinc-300 text-xs break-keep max-w-[260px]",children:(0,a.q)(f,"잠시 후 다시 시도해 주세요. 계속 안 되면 네트워크 상태를 확인해 주세요.")}),b&&(0,n.jsx)("button",{type:"button",onClick:b,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,n.jsx)(h,{})}):(0,n.jsxs)("div",{className:"space-y-[2px]",children:[!x&&l&&(0,n.jsxs)(c.E.button,{type:"button",whileTap:{scale:.98},transition:{type:"spring",stiffness:500,damping:30},onClick:l,className:(0,i.cn)("w-full flex items-center gap-3 px-3 py-[10px] rounded-2xl transition mt-1.5","text-left active:bg-zinc-100/60 dark:active:bg-zinc-800/60"),children:[(0,n.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,n.jsx)("div",{className:"flex-1 min-w-0 flex flex-col justify-center",children:(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"text-[14px] font-medium truncate text-zinc-900 dark:text-zinc-100",children:"전체 학생"}),(0,n.jsxs)("span",{className:"text-[11px] whitespace-nowrap shrink-0 font-medium text-zinc-400 dark:text-zinc-500",children:[null!=u?u:t.length,"명"]})]})})]}),t.map(e=>(0,n.jsxs)(c.E.button,{whileTap:{scale:.98},transition:{type:"spring",stiffness:500,damping:30},onClick:()=>{o.MU.tap(),s(e.id)},className:(0,i.cn)("w-full flex items-center gap-3 px-3 py-[10px] rounded-2xl transition","text-left",r===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,n.jsx)("span",{className:(0,i.cn)("w-5 h-5 rounded-md flex items-center justify-center text-[10.5px] font-semibold shrink-0",r===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,n.jsx)("div",{className:"flex-1 min-w-0 flex flex-col justify-center",children:(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:(0,i.cn)("text-[14px] font-medium truncate",r===e.id?"text-white dark:text-zinc-900 font-semibold":"text-zinc-900 dark:text-zinc-100"),children:e.name}),p&&(0,n.jsxs)("span",{className:(0,i.cn)("text-[11px] whitespace-nowrap shrink-0 font-medium",r===e.id?"text-white/70 dark:text-zinc-500":"text-zinc-400 dark:text-zinc-500"),children:[e.grade,"학년 ",e.classNum,"반"]})]})}),r===e.id&&(0,n.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 x="naemo.studentEmptyGhostPlayed";
1function h(){let[e,t]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{if(!window.matchMedia("(prefers-reduced-motion: reduce)").matches){try{if(sessionStorage.getItem(x))return;sessionStorage.setItem(x,"1")}catch(e){}t(!0)}},[]),(0,n.jsxs)("div",{className:"flex flex-col items-center justify-center text-center",children:[(0,n.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,n.jsx)(l.w,{src:"/lordicons/ghost-angry-pinch.json",size:32,trigger:"morph",playOnMount:e,originalColors:!0,className:"text-zinc-400"})}),(0,n.jsx)("p",{className:"text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1",children:"등록된 학생이 없습니다"}),(0,n.jsx)("p",{className:"text-xs text-zinc-400 dark:text-zinc-500 max-w-[200px] leading-relaxed",children:"설정에서 학생 명렬표를 등록하면 출결, 상담, 성적을 관리할 수 있습니다."})]})}},24754:function(e,t,r){r.d(t,{Z:function(){return m}});var n=r(57437),s=r(2265),a=r(54887),i=r(32489),l=r(21047),c=r(99397),o=r(93448),d=r(98319),u=r(34137),x=r(43232);let h="live_ck_4yKeq5bgrpWgyX6jdZjZVGX0lzW6";function m(e){let{isOpen:t,onClose:r,currentBalance:m}=e,[p,f]=(0,s.useState)(!1),[b,g]=(0,s.useState)(1),[v,k]=(0,s.useState)(!1),[w,y]=(0,s.useState)(!1),{showToast:j}=(0,d.p)(),z=100*b,N=8900*b;(0,s.useEffect)(()=>(f(!0),()=>f(!1)),[]),(0,s.useEffect)(()=>{if(t){if(window.TossPayments)k(!0);else{let e=document.createElement("script");e.src="https://js.tosspayments.com/v2/standard",e.async=!0,e.onload=()=>k(!0),e.onerror=()=>j("결제 시스템을 불러오는데 실패했습니다.","error"),document.head.appendChild(e)}}},[t,j]),(0,u.j)(r,t);let C=(0,s.useCallback)(()=>{let e=Date.now(),t=Math.random().toString(36).substring(2,8).toUpperCase();return"CREDIT-".concat(e,"-").concat(t)},[]),S=async()=>{if(!h){j("결제 시스템이 설정되지 않았습니다.","error");return}if(!v||!window.TossPayments){j("결제 시스템을 불러오는 중입니다.","info");return}y(!0);try{let e=window.TossPayments(h).payment({customerKey:"customer-".concat(Date.now())}),t=window.location.origin;await e.requestPayment({method:"CARD",amount:{currency:"KRW",value:N},orderId:C(),orderName:"내모 크레딧 ".concat(z,"개"),successUrl:"".concat(t,"/payment/credit-success?quantity=").concat(b),failUrl:"".concat(t,"/payment/credit-fail")})}catch(e){(null==e?void 0:e.code)!=="USER_CANCEL"&&j((null==e?void 0:e.message)||"결제 요청 중 오류가 발생했습니다.","error")}finally{y(!1)}};return t&&p?(0,a.createPortal)((0,n.jsx)("div",{className:"modal-viewport z-[300] flex items-center justify-center bg-black/60 backdrop-blur-sm p-4",onClick:e=>e.target===e.currentTarget&&r(),children:(0,n.jsxs)("div",{className:"relative w-full max-w-[400px] h-[540px] max-h-full bg-white dark:bg-[#0D0D0D] border border-zinc-200 dark:border-white/10 rounded-xl overflow-hidden animate-in fade-in zoom-in-95 duration-150 flex flex-col",children:[(0,n.jsx)("button",{"aria-label":"닫기",onClick:r,className:"absolute top-4 right-4 p-1 text-zinc-400 hover:text-zinc-600 dark:hover:text-white transition-colors",children:(0,n.jsx)(i.Z,{size:18})}),(0,n.jsxs)("div",{className:"px-8 pb-4 pt-10 flex-1 flex flex-col overflow-y-auto",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"text-sm text-zinc-500 mb-3",children:"충전하는 크레딧"}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("div",{className:"flex-1 h-12 bg-white dark:bg-white/5 border border-zinc-200 dark:border-white/10 rounded-lg flex items-center justify-center",children:(0,n.jsx)("span",{className:"text-xl font-semibold text-zinc-900 dark:text-white",children:z.toLocaleString()})}),(0,n.jsx)("button",{"aria-label":"수량 줄이기",onClick:()=>g(e=>Math.max(1,e-1)),disabled:b<=1,className:"w-12 h-12 flex items-center justify-center border border-zinc-200 dark:border-white/10 rounded-lg text-zinc-500 hover:text-zinc-700 dark:hover:text-white hover:border-zinc-300 dark:hover:border-white/20 hover:bg-zinc-50 dark:hover:bg-white/5 disabled:opacity-30 disabled:cursor-not-allowed transition",children:(0,n.jsx)(l.Z,{size:18})}),(0,n.jsx)("button",{"aria-label":"수량 늘리기",onClick:()=>g(e=>e+1),className:"w-12 h-12 flex items-center justify-center border border-zinc-200 dark:border-white/10 rounded-lg text-zinc-500 hover:text-zinc-700 dark:hover:text-white hover:border-zinc-300 dark:hover:border-white/20 hover:bg-zinc-50 dark:hover:bg-white/5 transition",children:(0,n.jsx)(c.Z,{size:18})})]}),(0,n.jsxs)("p",{className:"text-sm text-zinc-400 dark:text-zinc-500 mt-3",children:["AI 생활기록부 작성 기능을 ",z.toLocaleStr
1ing(),"회 이용할 수 있어요"]})]}),(0,n.jsx)("div",{className:"flex-1"}),(0,n.jsxs)("div",{className:"space-y-3 mb-6",children:[(0,n.jsxs)("div",{className:"flex justify-between items-center text-sm",children:[(0,n.jsx)("span",{className:"text-zinc-500",children:"보유 크레딧:"}),(0,n.jsx)("span",{className:"text-zinc-700 dark:text-zinc-300 font-medium",children:m.toLocaleString()})]}),(0,n.jsxs)("div",{className:"flex justify-between items-center text-sm",children:[(0,n.jsx)("span",{className:"text-zinc-500",children:"충전 크레딧:"}),(0,n.jsxs)("span",{className:"text-zinc-700 dark:text-zinc-300 font-medium",children:["+",z.toLocaleString()]})]}),(0,n.jsxs)("div",{className:"flex justify-between items-center text-sm",children:[(0,n.jsx)("span",{className:"text-zinc-900 dark:text-white font-semibold",children:"충전 후 크레딧:"}),(0,n.jsx)("span",{className:"text-zinc-900 dark:text-white font-bold",children:(m+z).toLocaleString()})]})]}),(0,n.jsx)("div",{className:"h-px bg-zinc-100 dark:bg-white/10 mb-6"}),(0,n.jsxs)("div",{className:"flex justify-between items-baseline mb-8",children:[(0,n.jsxs)("div",{className:"flex items-baseline gap-4",children:[(0,n.jsxs)("span",{className:"text-sm text-zinc-500",children:["100 크레딧 \xd7 ",b]}),(0,n.jsx)("span",{className:"text-sm text-zinc-500 font-medium",children:"총 결제금액"})]}),(0,n.jsxs)("span",{className:"text-xl font-bold text-zinc-900 dark:text-white",children:["₩",N.toLocaleString()]})]}),(0,n.jsx)("div",{onClick:w?void 0:S,role:"button",tabIndex:w?-1:0,className:(0,o.cn)("w-full h-12 font-medium text-sm rounded-lg transition flex items-center justify-center gap-2 select-none",w?"bg-zinc-100 dark:bg-white/5 text-zinc-400 cursor-not-allowed":"bg-zinc-900 dark:bg-zinc-100 [color:#fff] dark:[color:#18181b] cursor-pointer"),onMouseEnter:e=>{w||(e.currentTarget.style.backgroundColor="#27272a")},onMouseLeave:e=>{w||(e.currentTarget.style.backgroundColor="")},children:w?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(x.O,{size:16,strokeWidth:3,className:"animate-spin"}),"처리 중"]}):"결제"}),(0,n.jsx)("div",{className:"mt-4 text-center",children:(0,n.jsxs)("p",{className:"text-[11px] text-zinc-400 dark:text-zinc-500",children:["결제 시 ",(0,n.jsx)("a",{href:"/terms",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-zinc-600 dark:hover:text-zinc-400",children:"이용약관"}),"을 확인하였으며 이에 동의합니다."]})})]})]})}),document.body):null}},48280:function(e,t,r){r.r(t),r.d(t,{default:function(){return ep}});var n=r(57437),s=r(2265),a=r(54887),i=r(40875),l=r(99397),c=r(92735),o=r(18930),d=r(51817),u=r(45007),x=r(92451),h=r(14064);let m=(0,r(79205).Z)("Calculator",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["line",{x1:"8",x2:"16",y1:"6",y2:"6",key:"x4nwl0"}],["line",{x1:"16",x2:"16",y1:"14",y2:"18",key:"wjye3r"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M8 18h.01",key:"lrp35t"}]]);var p=r(73247),f=r(99388),b=r(21751),g=r(84200),v=r(43059),k=r(72173),w=r(9235),y=r(93448),j=r(25450);function z(e){var t,r,a;let{students:i,selectedStudentId:l,onSelectStudent:c,perfRowData:o,seteukRowData:d,updatePerfSource:u,updateSeteukField:z,updateSeteukSource:N,perfSourceCount:C,perfSourceNames:S,seteukSourceCount:E,calculateTotal:M,targetRange:I,availableClasses:D,selectedClass:R,onSelectClass:L,isAutoSaving:A=!1,hasAutoSaveDirty:Z=!1,autoSaveError:T=null,onRetryAutoSave:F,onUndo:K,canUndo:_=!1}
1=e,[O,B]=(0,s.useState)(""),[P,H]=(0,s.useState)("perf"),W=(0,s.useMemo)(()=>i.filter(e=>{var t,r;let n=!!(e.homeClassId||(null===(t=e.customClassIds)||void 0===t?void 0:t.length));return!R||!n||e.homeClassId===R||(null===(r=e.customClassIds)||void 0===r?void 0:r.includes(R))}),[i,R]),U=(0,s.useMemo)(()=>W.find(e=>e.id===l),[W,l]);(0,s.useEffect)(()=>{l&&!U&&c("")},[l,U,c]);let X=(0,s.useMemo)(()=>W.filter(e=>e.name.includes(O)||String(e.number).includes(O)),[W,O]),q=l?o[l]||{studentId:l,sources:Array(C).fill("")}:null,J=l?d[l]||{studentId:l,attitude:"",sources:Array(E).fill(""),draft:""}:null,V=q?M(q.sources):0,Y="750"===I?750:1500,G=(0,w.C)(null!==(t=null==J?void 0:J.draft)&&void 0!==t?t:"");(0,b.rr)(l&&U?"".concat(U.name," (수행\xb7세특)"):null,(0,s.useCallback)(()=>c(""),[c]));let Q=l&&U?(0,n.jsxs)("div",{className:"flex flex-col h-full bg-[#FBFBF9] dark:bg-zinc-950",children:[(0,n.jsx)("div",{className:"px-5 pt-8 pb-4 sticky top-0 z-40 bg-[#FBFBF9]/80 dark:bg-zinc-950/80 backdrop-blur-md",children:(0,n.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)("button",{"aria-label":"뒤로가기",onClick:()=>c(""),className:"p-1 -ml-2 mr-3 text-zinc-400 dark:text-zinc-500 active:scale-95 transition",children:(0,n.jsx)(x.Z,{size:24,strokeWidth:2.5})}),(0,n.jsxs)("div",{className:"flex flex-col",children:[(0,n.jsx)("h2",{className:"text-[17px] font-bold text-zinc-900 dark:text-zinc-100 leading-tight",children:U.name}),(0,n.jsxs)("div",{className:"flex items-center gap-2 mt-0.5",children:[(0,n.jsxs)("p",{className:"text-[11px] font-medium text-zinc-500 dark:text-zinc-400",children:[U.grade,"학년 ",U.classNum,"반 ",U.number,"번"]}),(0,n.jsx)(k.R,{isSaving:A,hasUnsavedChanges:Z,error:T,onRetry:F,className:"shrink-0"})]})]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1.5 pointer-events-auto",children:[K&&(0,n.jsx)("button",{type:"button",onClick:K,disabled:!_,"aria-label":"마지막 변경 되돌리기",className:"flex items-center justify-center w-11 h-11 -mr-1 rounded-2xl text-zinc-500 dark:text-zinc-300 active:bg-zinc-100 dark:active:bg-white/10 active:scale-[0.95] transition disabled:opacity-35",children:(0,n.jsx)(h.Z,{size:18})}),(0,n.jsx)("button",{onClick:()=>H("perf"),className:(0,j.Fk)("perf"===P,"whitespace-nowrap"),children:"수행"}),(0,n.jsx)("button",{onClick:()=>H("seteuk"),className:(0,j.Fk)("seteuk"===P,"whitespace-nowrap"),children:"세특"})]})]})}),(0,n.jsxs)("div",{className:"flex-1 px-4 mobile-scroll-with-floating overflow-y-auto",children:["perf"===P&&(0,n.jsx)("div",{className:"flex flex-col gap-4",children:(0,n.jsxs)(v.ZP,{children:[(0,n.jsx)(v.Lz,{children:(0,n.jsx)("h3",{className:"text-sm font-semibold text-zinc-800 dark:text-zinc-200",children:"평가 점수 입력"})}),(0,n.jsxs)("div",{className:"flex flex-col gap-4",children:[Array.from({length:C}).map((e,t)=>{var r;return(0,n.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,n.jsx)("label",{className:"text-xs font-medium text-zinc-500 dark:text-zinc-400 shrink-0",children:S[t]||"영역 ".concat(t+1)}),(0,n.jsx)("div",{className:"flex-1",children:(0,n.jsx)("input",{type:"text",inputMode:"decimal",value:null!==(r=null==q?void 0:q.sources[t])&&void 0!==r?r:"",onChange:e=>l&&u(l,t,e.target.value),placeholder:"-",className:"w-full bg-zinc-50 dark:bg-zinc-900/60 border border-zinc-200 dark:border-white/10 rounded-lg px-3 py-2 text-sm text-zinc-900 dark:text-zinc-100 font-mono text-right min-h-[38px] focus:outline-none focus:ring-2 focus:ring-blue-500 transition"})})]},t)}),(0,n.jsxs)("div",{className:"mt-2 pt-4 border-t border-zinc-100 dark:border-zinc-800 flex items-center justify-between",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5 text-zinc-400 dark:text-zinc-500",children:[(0,n.jsx)(m,{size:14}),(0,n.jsx)("span",{className:"text-[11px] font-medium tracking-wider",children:"총점"})]}),(0,n.jsx)("span",{className:"text-lg font-bold text-zinc-900 dark:text-zinc-100 font-mono",children:V})]})]})]})}),"seteuk"===P&&(0,n.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,n.jsxs)(v.ZP,{children:[(0,n.jsx)(v.Lz,{children:(0,n.jsx)("h3",{className:"text-sm font-semibold text-zinc-800 dark:text-zinc-200",children:"태도 및 특성"})}),(0,n.jsx)("textarea",{rows:3,value:null!==(r=null==J?void 0:J.attitude)&&void 0!==r?r:"",onChange:e=>l&&z(l,"attitude",e.target.value),placeholder:"태도 및 특성을 입력하세요...",className:"w-full bg-zinc-50 dark:bg-zinc-900/60 border border-zinc-200 dark:border-white/10 rounded-lg p-3 text-[13px] text-zinc-900 dark:text-zinc-100 min-h-[90px] leading-relaxed resize-none focus:outline-none focus:ring-2 focus:ring-blue-500 transition"})]}),(0,n.jsxs)(v.ZP,{children:[(0,n.jsx)(v.Lz,{children:(0,n.jsx)("h3",{className:"text-sm font-semibold text-zinc-800 dark:text-zinc-200",children:"평가 자료"})}),(0,n.jsx)("div",{className:"flex flex-col gap-3",children:Array.from({length:E}).map((e,t)=>{var r;return(0,n.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,n.jsxs)("label",{className:"text-[10px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest pl-1",children:["자료 ",t+1
1]}),(0,n.jsx)("textarea",{rows:2,value:null!==(r=null==J?void 0:J.sources[t])&&void 0!==r?r:"",onChange:e=>l&&N(l,t,e.target.value),placeholder:"평가 자료 ".concat(t+1," 내용을 입력하세요..."),className:"w-full bg-zinc-50 dark:bg-zinc-900/60 border border-zinc-200 dark:border-white/10 rounded-lg p-3 text-[13px] text-zinc-900 dark:text-zinc-100 min-h-[70px] leading-relaxed resize-none focus:outline-none focus:ring-2 focus:ring-blue-500 transition"})]},t)})})]}),(0,n.jsxs)(v.ZP,{children:[(0,n.jsxs)(v.Lz,{children:[(0,n.jsx)("h3",{className:"text-sm font-semibold text-zinc-800 dark:text-zinc-200",children:"세특 초안"}),(0,n.jsx)("div",{className:"flex items-center gap-2",children:(0,n.jsxs)("span",{className:(0,y.cn)("text-[11px] font-mono px-2 py-0.5 rounded-full tabular-nums",G>Y?"bg-red-50 dark:bg-red-500/15 text-red-700 dark:text-red-300 font-semibold":"bg-zinc-100 dark:bg-white/10 text-zinc-600 dark:text-zinc-300"),children:[G>Y&&(0,n.jsx)("span",{className:"mr-1","aria-hidden":"true",children:"⚠"}),G.toLocaleString()," / ",Y.toLocaleString(),"바이트",G>Y&&(0,n.jsxs)("span",{className:"ml-1",children:["\xb7 ",(G-Y).toLocaleString()," 초과"]})]})})]}),(0,n.jsx)("div",{className:"flex flex-col gap-3",children:(0,n.jsx)("textarea",{rows:6,value:null!==(a=null==J?void 0:J.draft)&&void 0!==a?a:"",onChange:e=>l&&z(l,"draft",e.target.value),placeholder:"세특 초안을 입력하세요...",className:"w-full bg-zinc-50 dark:bg-zinc-900/60 border border-zinc-200 dark:border-white/10 rounded-lg p-3 text-[13px] text-zinc-900 dark:text-zinc-100 min-h-[160px] leading-relaxed resize-none focus:outline-none focus:ring-2 focus:ring-blue-500 transition"})})]})]})]})]}):(0,n.jsxs)("div",{className:"flex flex-col h-full bg-[#FBFBF9] dark:bg-zinc-950",children:[D.length>1&&(0,n.jsx)("div",{className:"px-4 pt-3 pb-1",children:(0,n.jsx)("div",{className:"flex items-center gap-1.5 overflow-x-auto scrollbar-hide py-2",children:D.map(e=>(0,n.jsx)("button",{onClick:()=>L(e),className:(0,j.Fk)(R===e,"flex-none whitespace-nowrap"),children:e},e))})}),(0,n.jsx)(g.Z,{students:X,selectedStudentId:l,onSelectStudent:e=>{c(e),B("")},searchQuery:O,onSearchChange:B,isAdmin:!0})]});return(0,n.jsxs)("div",{className:"flex flex-col h-full relative overflow-y-auto scroll-smooth bg-[#FBFBF9] dark:bg-zinc-950",children:[Q,(!l||!U)&&(0,n.jsx)("div",{className:"fixed mobile-floating-bar left-0 right-0 px-6 flex justify-center z-40 pointer-events-none",children:(0,n.jsx)("div",{className:"w-full relative pointer-events-auto max-w-[400px]",children:(0,n.jsxs)("div",{className:(0,y.cn)("relative flex items-center h-[52px] px-4","bg-white/80 dark:bg-zinc-900/80 backdrop-blur-xl border border-zinc-200/80 dark:border-white/10 rounded-2xl","shadow-[0_8px_20px_rgba(0,0,0,0.06)] dark:shadow-none","transition duration-200"),children:[(0,n.jsx)("div",{className:"shrink-0 text-zinc-400 dark:text-zinc-500",children:(0,n.jsx)(p.Z,{size:22,strokeWidth:1.5})}),(0,n.jsx)("input",{type:"text",placeholder:"학생 이름 또는 번호 검색...",value:O,onChange:e=>B(e.target.value),className:(0,y.cn)("w-full h-full bg-transparent border-none outline-none","pl-3 pr-2 text-[16px] font-normal","text-zinc-900 dark:text-zinc-100 placeholder:text-zinc-400 dark:placeholder:text-zinc-500")}),O&&(0,n.jsx)("button",{"aria-label":"검색어 지우기",onClick:()=>B(""),className:"p-1.5 -mr-1 text-zinc-400 active:text-zinc-600 active:scale-95 transition",children:(0,n.jsx)(f.Z,{size:20,strokeWidth:1.75})})]})})})]})}var N=r(62883),C=r(92934),S=r(69076),E=r(89227),M=r(82431),I=r(32489),D=r(95805),R=r(48013),L=r(93202),A=r(76865),Z=r(92369),T=r(34137);function F(e){let{open:t,onClose:r,onProceed:s,invalidResults:a,isBatch:i=!1,onProceedExcluding:l}=e;if((0,T.j)(r,t),!t||0===a.length)return null;let c=!i&&1===a.length;return a[0],(0,n.jsx)("div",{className:"modal-viewport z-[200] flex items-center justify-center bg-black/60 backdrop-blur-sm p-4 animate-in fade-in duration-200",onClick:r,children:(0,n.jsxs)("div",{className:"bg-white dark:bg-[#121214] rounded-2xl p-6 w-full max-w-lg shadow-2xl border border-zinc-200 dark:border-white/10 flex flex-col max-h-full",onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("div",{className:"flex items-start gap-3.5 mb-4 shrink-0",children:[(0,n.jsx)(A.Z,{size:22,className:"shrink-0 mt-0.5 text-amber-600 dar
1k:text-amber-400"}),(0,n.jsxs)("div",{className:"flex-1 min-w-0 pt-0.5",children:[(0,n.jsx)("h3",{className:"text-base font-bold text-zinc-900 dark:text-white tracking-tight",children:c?"활동 자료 입력 내용을 확인해 주세요":"".concat(a.length,"명의 학생 자료에 오타가 감지되었습니다")}),(0,n.jsx)("p",{className:"text-xs text-zinc-500 dark:text-zinc-400 mt-1 leading-relaxed",children:"자모 분리 오타나 불완전한 문구가 입력되어 있습니다. 이대로 생성 시 의도치 않은 가상 내용이 작성되거나 크레딧이 소모될 수 있습니다."})]})]}),(0,n.jsx)("div",{className:"flex-1 overflow-y-auto space-y-3 pr-1 my-2",children:a.map(e=>(0,n.jsxs)("div",{className:"bg-zinc-50 dark:bg-white/[0.04] border border-zinc-200/80 dark:border-white/10 rounded-xl p-3.5",children:[(0,n.jsx)("div",{className:"flex items-center gap-2 mb-2",children:(0,n.jsxs)("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-md text-xs font-bold bg-white dark:bg-white/10 border border-zinc-200 dark:border-white/10 text-zinc-800 dark:text-zinc-200 shadow-sm",children:[(0,n.jsx)(Z.Z,{size:12,className:"text-zinc-500"}),e.studentNumber?"".concat(e.studentNumber,"번 "):"",e.studentName]})}),(0,n.jsx)("div",{className:"space-y-1.5 pl-1",children:e.warnings.map((e,t)=>(0,n.jsxs)("div",{className:"text-xs",children:[(0,n.jsxs)("div",{className:"flex items-baseline gap-1.5 text-zinc-600 dark:text-zinc-400 font-medium",children:[(0,n.jsxs)("span",{className:"font-semibold text-amber-600 dark:text-amber-400",children:["[",e.fieldLabel,"]"]}),(0,n.jsx)("span",{children:e.message})]}),(0,n.jsxs)("div",{className:"mt-1 px-2.5 py-1.5 rounded-md bg-amber-500/[0.07] border border-amber-500/20 text-amber-950 dark:text-amber-200 font-mono text-[11px] break-all select-all",children:['"',e.snippet,'"']})]},t))})]},e.studentId))}),(0,n.jsxs)("div",{className:"mt-5 pt-3 border-t border-zinc-100 dark:border-white/10 flex flex-wrap gap-2 justify-end shrink-0",children:[(0,n.jsx)("button",{type:"button",onClick:r,className:"px-4 py-2.5 text-xs font-semibold text-zinc-600 dark:text-zinc-300 hover:text-zinc-900 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-white/5 rounded-xl transition-colors",children:"수정하기"}),i&&l&&(0,n.jsx)("button",{type:"button",onClick:()=>{r(),l()},className:"px-4 py-2.5 text-xs font-bold bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 hover:bg-zinc-800 dark:hover:bg-zinc-200 rounded-xl transition-all shadow-sm active:scale-[0.98]",children:"해당 학생 제외하고 생성"}),(0,n.jsx)("button",{type:"button",onClick:()=>{r(),s()},className:"px-4 py-2.5 text-xs font-bold rounded-xl transition-all border ".concat(c?"bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 hover:bg-zinc-800 dark:hover:bg-zinc-200 shadow-sm active:scale-[0.98]":"border-zinc-200 dark:border-white/10 text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-white/5"),children:c?"그래도 생성하기":"모두 포함하여 생성"})]})]})})}function K(e,t){if(!e)return null;let r=e.trim();if(!r)return null;let n=function(e){let t=e.trim();if(!t)return null;let r=t.match(/([가-힣][ㄱ-ㅎㅏ-ㅣ]+|[ㄱ-ㅎㅏ-ㅣ]+[가-힣])/);if(r)return{matched:!0,snippet:r[0]};let n=t.replace(/[^가-힣a-zA-Z0-9]/g,""),s=t.replace(/[^ㄱ-ㅎㅏ-ㅣ]/g,"");return 0===n.length&&s.length>=2?{matched:!0,snippet:s.slice(0,10)}:null}(r);if(n)return{type:"incomplete_jamo",message:"자음/모음이 분리된 오타('".concat(n.snippet,"')가 감지되었습니다."),fieldLabel:t,snippet:r.length>30?"".concat(r.slice(0,30),"..."):r};let s=function(e){let t=e.trim();if(!t)return null;for(let e of[/asdf[asdf]*/i,/qwer[qwer]*/i,/zxcv[zxcv]*/i,/hjkl[hjkl]*/i,/ㅁㄴㅇㄹ[ㅁㄴㅇㄹ]*/,/ㅂㅈㄷㄱ[ㅂㅈㄷㄱ]*/]){let r=t.match(e);if(r&&r[0].length>=4)return{matched:!0,snippet:r[0]}}return null}(r);if(s)return{type:"keyboard_smash",message:"키보드 난타 의심 텍스트('".concat(s.snippet,"')가 감지되었습니다."),fieldLabel:t,snippet:r.length>30?"".concat(r.slice(0,30),"..."):r};let a=function(e){let t=e.trim();if(!t)return null;let r=t.match(/(.)\1{3,}/);return r?{matched:!0,snippet:r[0].slice(0,8)}:null}(r);return a?{type:"repeated_chars",message:"동일한 문자가 연속으로 반복된 텍스트('".concat(a.snippet,"')가 감지되었습니다."),fieldLabel:t,snippet:r.length>30?"".concat(r.slice(0,30),"..."):r}:null}function _(e){let t=[],r=K(e.attitude,"태도 및 특성");r&&t.push(r),e.sources&&Array.isArray(e.sources)&&e.sources.forEac
1h((e,r)=>{let n=K(e,"자료 ".concat(r+1));n&&t.push(n)});let n=[e.attitude||"",...e.sources||[]].join(" ").trim(),s=n.replace(/[^가-힣a-zA-Z0-9]/g,"");return n.length>0&&0===s.length&&0===t.length&&t.push({type:"empty_or_symbols",message:"의미 있는 글자(한글, 영문, 숫자)가 포함되어 있지 않습니다.",fieldLabel:"입력 전체",snippet:n.slice(0,20)}),{hasWarning:t.length>0,studentId:e.studentId,studentName:e.studentName,studentNumber:e.studentNumber,warnings:t}}let O="평소 학습 목표에 대한 이해도가 높고 탐구 과정에서 발견한 문제점을 논리적으로 해결하며 지적 호기심을 발휘하는 태도가 우수함. 다양한 관점에서 사고하고 협력적으로 문제를 해결하는 능력을 보임. 수업 시간에 적극적으로 참여하며 동료 학생들에게 모범이 됨. ".repeat(4);function B(e){let{value:t,onChange:r,placeholder:a,minRows:i=1,className:l}=e,c=(0,s.useRef)(null);return(0,s.useEffect)(()=>{let e=c.current;e&&(e.style.height="auto",e.style.height="".concat(e.scrollHeight,"px"))},[t]),(0,n.jsx)("textarea",{ref:c,value:t,rows:i,onChange:e=>r(e.target.value),onClick:e=>e.stopPropagation(),placeholder:a,className:(0,y.cn)("w-full resize-none overflow-hidden bg-transparent leading-relaxed","rounded px-2 py-1 -mx-2","border border-transparent","hover:border-zinc-200 dark:hover:border-white/10 focus:border-blue-300 dark:focus:border-blue-500/40 focus:bg-blue-50/30 dark:focus:bg-blue-500/10","focus:outline-none focus:ring-1 focus:ring-blue-200/60 dark:focus:ring-blue-500/30","placeholder:text-zinc-300 dark:placeholder:text-zinc-600 transition-colors duration-150",l)})}function P(){return(0,n.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-400 animate-bounce",style:{animationDelay:"0ms"}}),(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-400 animate-bounce",style:{animationDelay:"120ms"}}),(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-400 animate-bounce",style:{animationDelay:"240ms"}})]}),(0,n.jsx)("p",{className:"text-xs text-blue-500 font-medium",children:"AI가 세특 초안을 작성하고 있습니다..."})]})}function H(e){var t;let{onClose:r,students:a,classId:l,targetRange:c,getPerfRow:o,getSeteukRow:d,seteukSourceCount:x,seteukSourceNames:h,updateSeteukField:m,updateSeteukSource:p,setTargetRange:b,creditBalance:g,onCreditBalanceChange:v,onInsufficientCredits:k}=e,{getBatchQueue:w,isBatchRunningFor:j,enqueueBatch:z,startBatch:A,pauseBatch:Z,clearBatchQueue:T,retryBatchTask:K}=(0,L.l)(),H=w(l),W=j(l),[U,X]=(0,s.useState)(new Set),[q,J]=(0,s.useState)(!1),[V,Y]=(0,s.useState)(!0),[G,Q]=(0,s.useState)(null),[$,ee]=(0,s.useState)(240),[et,er]=(0,s.useState)({open:!1,invalidResults:[],validTasks:[],allTasks:[]}),en=(0,s.useRef)(null),es=(0,s.useRef)(null),ea=(0,s.useRef)(null),ei=(0,s.useRef)(null);(0,s.useEffect)(()=>{if(H.length>0){X(new Set(H.map(e=>e.studentId)));return}let e=a.filter(e=>{var t,r;return!(null===(r=d(e.id))||void 0===r?void 0:null===(t=r.draft)||void 0===t?void 0:t.trim())&&ec(e.id)}).map(e=>e.id);if(e.length>0){X(new Set(e)),J(!0),Y(!0);return}let t=a.filter(e=>{var t,r;return!(null===(r=d(e.id))||void 0===r?void 0:null===(t=r.draft)||void 0===t?void 0:t.trim())}).map(e=>e.id);t.length>0?(X(new Set(t)),J(!0)):X(new Set(a.map(e=>e.id))),Y(!1)},[]);let el=null===(t=H.find(e=>"processing"===e.status))||void 0===t?void 0:t.studentId;(0,s.useEffect)(()=>{es.current&&es.current.scrollIntoView({behavior:"smooth",block:"center"})},[el]);let ec=e=>{var t;return((null===(t=d(e))||void 0===t?void 0:t.sources)||[]).some(e=>null==e?void 0:e.trim())},eo=(e,t)=>{let r=a.map(e=>e.id);return e&&(r=r.filter(e=>{var t,r;return!(null===(r=d(e))||void 0===r?void 0:null===(t=r.draft)||void 0===t?void 0:t.trim())})),t&&(r=r.filter(e=>ec(e))),r};(0,s.useEffect)(()=>{if(en.current){let e=U.size>=a.length&&a.length>0,t=U.size>0&&!e;en.current.indeterminate=t,en.current.checked=e}},[U.size,a.length]),(0,s.useEffect)(()=>{let e=ei.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect().width,r=window.getComputedStyle(e),n=document.createElement("div");
1Object.assign(n.style,{position:"fixed",left:"-9999px",top:"0",visibility:"hidden",width:"".concat(Math.max(120,t-24),"px"),fontSize:"12px",lineHeight:"1.625",fontFamily:r.fontFamily,whiteSpace:"pre-wrap",wordBreak:"break-word"}),n.textContent=O,document.body.appendChild(n);let s=n.offsetHeight;document.body.removeChild(n),ee(Math.max(160,s+32))};t();let r=new ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[]);let ed=(0,s.useCallback)(e=>{J(!1),Y(!1),X(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),eu=(0,s.useCallback)(()=>{J(!1),Y(!1),X(e=>e.size>=a.length?new Set:new Set(a.map(e=>e.id)))},[a]),ex=(0,s.useCallback)(e=>{e.length>0&&z(l,e),A(l,{onTaskSuccess:(e,t)=>{(null==t?void 0:t.draft)&&m(e,"draft",t.draft),"number"==typeof(null==t?void 0:t.remainingCredits)&&v(t.remainingCredits)},onInsufficientCredits:k})},[l,z,A,m,v,k]),eh=(0,s.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=0===H.length?U.size:H.filter(e=>"pending"===e.status).length;if(null!==g&&t>g){k();return}if(0===H.length){let t=Array.from(U).map(e=>{let t=a.find(t=>t.id===e);if(!t)return null;let r=o(e),n=d(e);return{studentId:e,studentName:t.name,studentNumber:t.number,classId:l,attitude:(null==n?void 0:n.attitude)||"",sources:[...(null==r?void 0:r.sources)||[],...(null==n?void 0:n.sources)||[]],targetRange:c}}).filter(Boolean);if(!e){let e=function(e){let t=[],r=[];for(let n of e){let e=_(n);e.hasWarning?t.push(e):r.push(n)}return{hasAnyWarning:t.length>0,invalidStudents:t,validStudents:r}}(t.map(e=>({studentId:e.studentId,studentName:e.studentName,studentNumber:e.studentNumber,attitude:e.attitude,sources:e.sources})));if(e.hasAnyWarning){let r=new Set(e.validStudents.map(e=>e.studentId)),n=t.filter(e=>r.has(e.studentId));er({open:!0,invalidResults:e.invalidStudents,validTasks:n,allTasks:t});return}}ex(t)}else A(l,{onTaskSuccess:(e,t)=>{(null==t?void 0:t.draft)&&m(e,"draft",t.draft),"number"==typeof(null==t?void 0:t.remainingCredits)&&v(t.remainingCredits)},onInsufficientCredits:k})},[H,U,a,o,d,l,c,ex,A,g,k,m,v]),em=(0,s.useCallback)(()=>{let e=H.filter(e=>"failed"===e.status);if(0!==e.length){if(null!==g&&e.length>g){k();return}e.forEach(e=>K(l,e.studentId)),A(l,{onTaskSuccess:(e,t)=>{(null==t?void 0:t.draft)&&m(e,"draft",t.draft),"number"==typeof(null==t?void 0:t.remainingCredits)&&v(t.remainingCredits)},onInsufficientCredits:k})}},[H,l,K,A,g,k,m,v]),ep=H.filter(e=>"success"===e.status).length,ef=H.filter(e=>"failed"===e.status).length,eb=H.filter(e=>"processing"===e.status).length,eg=H.filter(e=>"pending"===e.status).length,ev=H.length,ek=0===ev?0:Math.round(ep/ev*100),ew=H.length>0,ey=ew&&0===eg&&0===eb,ej=35*eg,ez=W&&ej>0?ej>60?"약 ".concat(Math.ceil(ej/60),"분 남음"):"약 ".concat(ej,"초 남음"):null,eN=!W,eC=U.size,eS=ew?W?"생성 중...":"이어서 생성":"".concat(eC,"명 AI 작성");return(0,n.jsxs)("div",{className:"flex flex-col h-full bg-white dark:bg-[#1a1a1a]",children:[(0,n.jsxs)("div",{className:"flex items-center gap-4 px-6 py-4 border-b border-zinc-200 dark:border-white/10 shrink-0",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 mr-auto",children:[(0,n.jsx)(N.Z,{size:16,className:"text-zinc-400 shrink-0"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"text-[15px] font-bold text-zinc-900 dark:text-zinc-100 leading-none",children:"AI 작성"}),(0,n.jsx)("p",{className:"text-xs text-zinc-400 dark:text-zinc-500 mt-0.5",children:"학생을 선택하고 세특 초안을 일괄 생성합니다"})]})]}),ew&&(0,n.jsxs)("div",{className:"flex items-center gap-3 text-xs",children:[ey?(0,n.jsxs)("span",{className:"flex items-center gap-1.5 text-green-600 font-semibold",children:[(0,n.jsx)(C.Z,{size:14})," 작성 완료"]}):(0,n.jsxs)("span",{className:"text-zinc-400",children:[ev,"명 중"]}),ep>0&&(0,n.jsxs)("span",{className:"flex items-center gap-1 text-green-600 font-semibold",children:[(0,n.jsx)(C.Z,{size:12})," ",ep,"완료"]}),ef>0&&(0,n.jsxs)("span",{className:"flex items-center gap-1 text-red-500 font-semibold",children:[(0,n.jsx)(f.Z,{size:12})," ",ef,"실패"]}),ez&&(0,n.jsx)("span",{className:"text-blue-500 font-medium",children:ez})]}),(0,n.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer select-none group",children:[(0,n.jsx)("div",{className:(0,y.cn)("w-4 h-4 rounded border-2 flex items-center justify-center transition duration-150 shrink-0",V?"bg-blue-600 border-blue-600":"border-zinc-300 dark:border-zinc-600 group-hover:border-zinc-400 dark:group-hover:border-zinc-500"),children:V&&(0,n.jsx)("svg",{width:"9",height:"7",viewBox:"0 0 9 7",fill:"none",children:(0,n.jsx)("path",{d:"M1 3L3.5 5.5L8 1",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})}),(0,n.jsx)("input",{type:"checkbox",checked:V,onChange:()=>{let e=!V;Y(e),X(new Set(eo(q,e)))},className:"sr-only"}),(0,n.jsx)("span",{className:(0,y.cn)("text-xs font-medium transition-colors whitespace-nowrap",V?"text-zinc-800 dark:text-zinc-200":"text-zinc-500 dark:text-zinc-400 group-hover:text-zinc-700 dark:group-hover:text-zinc-200"),children:"자료 있는 학생만"})]}),(0,n.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer select-none group",children:[(0,n.jsx)("div",{className:(0,y.cn)("w-4 h-4 rounded border-2 flex items-center justify-center transition duration-150 shrink-0",q?"bg-blue-600 border-blue-600":"border-zinc-300 dark:border-zinc-600 group-hover:border-zinc-400 dark:group-hover:border-zinc-500"),children:q&&(0,n.jsx)("svg",{width:"9",height:"7",viewBox:"0 0 9 7",fill:"none",children:(0,n.jsx)("path",{d:"M1 3L3.5 5.5L8 1",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})}
1),(0,n.jsx)("input",{type:"checkbox",checked:q,onChange:()=>{let e=!q;J(e),X(new Set(eo(e,V)))},className:"sr-only"}),(0,n.jsx)("span",{className:(0,y.cn)("text-xs font-medium transition-colors whitespace-nowrap",q?"text-zinc-800 dark:text-zinc-200":"text-zinc-500 dark:text-zinc-400 group-hover:text-zinc-700 dark:group-hover:text-zinc-200"),children:"초안 없는 학생만"})]}),ew&&!W&&(0,n.jsxs)("button",{onClick:()=>T(l),className:"flex items-center gap-1.5 text-xs px-3 py-1.5 rounded-lg border border-zinc-200 dark:border-white/10 text-zinc-500 dark:text-zinc-400 hover:text-zinc-800 dark:hover:text-zinc-200 hover:border-zinc-300 dark:hover:border-white/20 transition-colors",children:[(0,n.jsx)(S.Z,{size:12}),"초기화"]}),!ew&&0===eC&&a.length>0&&(0,n.jsx)("span",{className:"text-xs text-zinc-400 dark:text-zinc-500 whitespace-nowrap",children:"생성할 학생을 선택하세요"}),W?(0,n.jsxs)("button",{onClick:Z,className:"flex items-center gap-2 px-5 py-2 text-sm font-semibold bg-zinc-800 hover:bg-zinc-700 dark:bg-zinc-200 dark:hover:bg-white text-white dark:text-zinc-900 rounded-xl transition-colors shadow-sm",children:[(0,n.jsx)(E.Z,{size:14}),"일시 정지"]}):ey?(0,n.jsxs)(n.Fragment,{children:[ef>0&&(0,n.jsxs)("button",{onClick:em,className:"flex items-center gap-2 px-4 py-2 text-sm font-semibold border border-amber-300 dark:border-amber-500/40 text-amber-700 dark:text-amber-400 hover:bg-amber-50 dark:hover:bg-amber-500/10 rounded-xl transition-colors",children:[(0,n.jsx)(M.Z,{size:14}),"실패 ",ef,"건 다시 시도"]}),(0,n.jsxs)("button",{onClick:r,className:"flex items-center gap-2 px-5 py-2 text-sm font-semibold bg-blue-600 hover:bg-blue-500 text-white rounded-xl transition-colors shadow-sm",children:[(0,n.jsx)(C.Z,{size:14}),"닫기"]})]}):(0,n.jsxs)("button",{onClick:()=>eh(!1),disabled:0===eC&&!ew,className:"flex items-center gap-2 px-5 py-2 text-sm font-semibold bg-blue-600 hover:bg-blue-500 text-white rounded-xl transition-all disabled:opacity-40 disabled:cursor-not-allowed shadow-sm",children:[(0,n.jsx)(u.w,{src:"/lordicons/ai-write.json",size:16,className:"text-white"}),eS]}),(0,n.jsx)("button",{"aria-label":"닫기",onClick:r,className:"p-1.5 hover:bg-zinc-100 dark:hover:bg-white/10 rounded-lg transition-colors text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-200 shrink-0",children:(0,n.jsx)(I.Z,{size:18})})]}),(0,n.jsx)("div",{className:(0,y.cn)("shrink-0 transition-all duration-300",ew?"h-1 bg-zinc-100 dark:bg-white/5":"h-0"),children:(0,n.jsx)("div",{className:"h-full bg-blue-500 transition-all duration-700 ease-out",style:{width:"".concat(ek,"%")}})}),(0,n.jsx)("div",{ref:ea,className:"flex-1 overflow-auto",children:(0,n.jsxs)("table",{className:"w-full text-sm border-collapse table-fixed",children:[(0,n.jsx)("thead",{className:"sticky top-0 z-20",children:(0,n.jsxs)("tr",{className:"bg-zinc-50 dark:bg-white/5 border-b border-zinc-200 dark:border-white/10",children:[(0,n.jsx)("th",{className:"w-12 pl-5 pr-2 py-3",children:(0,n.jsx)("input",{ref:en,type:"checkbox",onChange:eu,disabled:!eN||ew,className:"w-4 h-4 rounded accent-blue-600 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50"})}),(0,n.jsx)("th",{className:"w-8 py-3 text-center text-[11px] font-semibold text-zinc-400 tracking-wider",children:"학년"}),(0,n.jsx)("th",{className:"w-8 py-3 text-center text-[11px] font-semibold text-zinc-400 tracking-wider",children:"반"}),(0,n.jsx)("th",{className:"w-8 py-3 text-center text-[11px] font-semibold text-zinc-400 tracking-wider",children:"번호"}),(0,n.jsx)("th",{className:"w-20 px-3 py-3 text-center text-[11px] font-semibold text-zinc-400 tracking-wider border-r border-zinc-200 dark:border-white/10",children:"이름"}),(0,n.jsx)("th",{className:"px-4 py-3 text-center text-[11px] font-semibold text-zinc-400 tracking-wider w-[120px]",children:"태도 및 특성"}),Array.from({length:x}).map((e,t)=>(0,n.jsx)("th",{className:"px-3 py-3 text-center text-[11px] font-semibold text-zinc-400 tracking-wider w-[150px]",children:h[t]||"자료 ".concat(t+1)},"sh-".concat(t))),(0,n.jsx)("th",{ref:ei,className:"px-4 py-3 text-center text-[11px] font-semibold text-zinc-400 tracking-wider w-[260px]",children:(0,n.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,n.jsx)("span",{children:"세특 초안"}),(0,n.jsxs)("div",{className:"relative inline-flex items-center",children:[(0,n.jsxs)("select",{value:c,onChange:e=>b(e.target.value),className:"appearance-none bg-white dark:bg-white/5 hover:bg-zinc-100 dark:hover:bg-white/10 border border-zinc-200 dark:border-white/10 rounded-md pl-2 pr-5 py-0.5 text-[10px] font-semibold text-zinc-600 dark:text-zinc-300 focus:outline-none focus:ring-1 focus:ring-zinc-300 dark:focus:ring-white/20 cursor-pointer transition-colors",children:[(0,n.jsx)("option",{value:"1500",children:"1500byte"}),(0,n.jsx)("option",{value:"750",children:"750byte"})]}
1),(0,n.jsx)(i.Z,{size:10,className:"absolute right-1 top-1/2 -translate-y-1/2 pointer-events-none text-zinc-400"})]})]})}),(0,n.jsx)("th",{className:"w-20 py-3 text-center text-[11px] font-semibold text-zinc-400 tracking-wider",children:"상태"})]})}),(0,n.jsxs)("tbody",{style:{"--cell-max-h":"".concat($,"px")},children:[a.map(e=>{let t=d(e.id),r=H.find(t=>t.studentId===e.id),s=null==r?void 0:r.status,a="processing"===s,i="success"===s,o="failed"===s,u=U.has(e.id),h=W&&!a,b=G===e.id&&!a,g=(null==t?void 0:t.draft)||"",v=(null==t?void 0:t.attitude)||"",k=g.trim()?new TextEncoder().encode(g.trim()).length:0,w=b?"min-h-[44px] max-h-[var(--cell-max-h)] py-3 overflow-y-auto":"min-h-16 max-h-16";return(0,n.jsxs)("tr",{ref:a?e=>{es.current=e}:void 0,onClick:()=>{a||h||Q(t=>t===e.id?null:e.id)},className:(0,y.cn)("border-b border-zinc-100 dark:border-white/5 transition duration-300 ease-in-out",!a&&!h&&"cursor-pointer",a&&"bg-blue-50/70 dark:bg-blue-500/10 shadow-[inset_3px_0_0_#3b82f6]",b&&!a&&"bg-zinc-50 dark:bg-white/5 shadow-[inset_3px_0_0_#a1a1aa]",i&&!h&&!b&&"bg-green-50/40 dark:bg-green-500/10",i&&!h&&b&&"bg-green-50/60 dark:bg-green-500/15",o&&!h&&"bg-red-50/30 dark:bg-red-500/10",h&&"opacity-25",!ew&&u&&!b&&"bg-blue-50/40 dark:bg-blue-500/10",!a&&!h&&!b&&"hover:bg-zinc-50/60 dark:hover:bg-white/5"),children:[(0,n.jsx)("td",{className:"pl-5 pr-2 py-0 w-12 align-middle",onClick:e=>e.stopPropagation(),children:(0,n.jsx)("div",{className:(0,y.cn)("flex items-center justify-center transition duration-300",w),children:(0,n.jsx)("input",{type:"checkbox",checked:u,onChange:()=>ed(e.id),disabled:!eN||ew,className:"w-4 h-4 rounded accent-blue-600 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50"})})}),(0,n.jsx)("td",{className:"py-0 w-8 align-middle text-center",children:(0,n.jsx)("div",{className:(0,y.cn)("flex items-center justify-center text-zinc-500 dark:text-zinc-400 text-sm transition duration-300",w),children:e.grade||"-"})}),(0,n.jsx)("td",{className:"py-0 w-8 align-middle text-center",children:(0,n.jsx)("div",{className:(0,y.cn)("flex items-center justify-center text-zinc-500 dark:text-zinc-400 text-sm transition duration-300",w),children:e.classNum||"-"})}),(0,n.jsx)("td",{className:"py-0 w-8 align-middle text-center",children:(0,n.jsx)("div",{className:(0,y.cn)("flex items-center justify-center text-zinc-600 dark:text-zinc-300 font-medium text-sm transition duration-300",w),children:e.number})}),(0,n.jsx)("td",{className:"px-3 py-0 w-20 align-middle border-r border-zinc-100 dark:border-white/5 max-w-[80px] text-center",children:(0,n.jsxs)("div",{className:(0,y.cn)("flex flex-col justify-center transition duration-300 min-w-0",w),children:[(0,n.jsx)("span",{className:"font-semibold text-zinc-900 dark:text-zinc-100 truncate text-center",children:e.name}),a&&(0,n.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-blue-500 font-medium mt-0.5",children:[(0,n.jsx)("span",{className:"w-1.5 h-1.5 bg-blue-500 rounded-full",style:{animation:"cursor-blink 1s step-end infinite"}}),"작성 중"]})]})}),(0,n.jsx)("td",{className:"px-3 py-0 align-top",children:(0,n.jsx)("div",{className:(0,y.cn)("transition duration-300",w,!b&&"flex items-center overflow-hidden"),children:b&&!a?(0,n.jsx)(B,{value:v,onChange:t=>m(e.id,"attitude",t),placeholder:"태도 및 특성...",className:"text-xs text-zinc-700 dark:text-zinc-300"}):v?(0,n.jsx)("span",{className:(0,y.cn)("text-xs text-zinc-500 dark:text-zinc-400 leading-relaxed",!a&&"line-clamp-2"),children:v}):(0,n.jsx)("span",{className:"text-xs text-zinc-300 dark:text-zinc-500 w-full text-center",children:"-"})})}),Array.from({length:x}).map((r,s)=>{var i;let l=(null==t?void 0:null===(i=t.sources)||void 0===i?void 0:i[s])||"";return(0,n.jsx)("td",{className:"px-3 py-0 align-top",children:(0,n.jsx)("div",{className:(0,y.cn)("transition duration-300",w,!b&&"flex items-center overflow-hidden"),children:b&&!a?(0,n.jsx)(B,{value:l,onChange:t=>p(e.id,s,t),placeholder:"자료 입력...",className:"text-xs text-zinc-700 dark:text-zinc-300"}):l?(0,n.jsx)("span",{className:(0,y.cn)("text-xs text-zinc-500 dark:text-zinc-400 leading-relaxed",!a&&"line-clamp-2"),children:l}):(0,n.jsx)("span",{className:"text-xs text-zinc-300 dark:text-zinc-500 w-full text-center",children:"-"})})},"src-".concat(s))}),(0,n.jsxs)("td",{className:"px-3 py-0 align-top relative",children:[(0,n.jsx)("div",{className:(0,y.cn)("transition duration-300",w,!b&&"flex items-start pt-1.5 overflow-hidden",!a&&g.trim()&&k>0&&(b?"pb-5":"pb-6")),children:a?(0,n.jsx)(P,{}):b?(0,n.jsx)(B,{value:g,onChange:t=>m(e.id,"draft",t),placeholder:"세특 초안을 입력하거나 AI로 생성하세요...",minRows:3,className:"text-xs text-zinc-800 dark:text-zinc-200"}):g.trim()?(0,n.jsx)("span",{className:"text-xs text-zinc-700 dark:text-zinc-300 leading-relaxed line-clamp-2 break-words w-full",children:g.trim()}):(0,n.jsx)("span",{className:"text-xs text-zinc-300 dark:text-zinc-500 w-full text-center",children:"-"})}),!a&&g.trim()&&k>0&&(0,n.jsxs)("span",{onClick:e=>e.stopPropagation(),className:(0,y.cn)("absolute bottom-1 right-2 text-[10px] leading-tight px-1.5 py-px rounded-sm pointer-events-none",k>("1500"===c?1500:750)?"text-red-500 bg-red-50 dark:bg-red-500/15":"text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-500/15"),children:[k.toLocaleStr
1ing(),(0,n.jsxs)("span",{className:"ml-0.5 opacity-60",children:["/ ",c]})]})]}),(0,n.jsx)("td",{className:"py-0 w-20 align-middle text-center",onClick:e=>e.stopPropagation(),children:(0,n.jsxs)("div",{className:(0,y.cn)("flex flex-col items-center justify-center gap-1.5 transition duration-300",w),children:[!s&&(0,n.jsx)("span",{className:"text-[10px] text-zinc-300 dark:text-zinc-500",children:"-"}),"pending"===s&&(0,n.jsx)("span",{className:"text-[10px] text-zinc-400 bg-zinc-100 dark:bg-white/10 px-2 py-0.5 rounded-full",children:"대기"}),a&&(0,n.jsx)(M.Z,{size:15,className:"text-blue-500 animate-spin"}),i&&(0,n.jsx)(C.Z,{size:16,className:"text-green-500"}),o&&(0,n.jsxs)("div",{className:"flex flex-col items-center gap-1",children:[(0,n.jsx)(f.Z,{size:15,className:"text-red-500"}),(0,n.jsx)("button",{onClick:t=>{t.stopPropagation(),K(l,e.id)},className:"text-[10px] text-red-500 hover:text-red-700 underline underline-offset-2 transition-colors",children:"재시도"})]})]})})]},e.id)}),0===a.length&&(0,n.jsx)("tr",{children:(0,n.jsx)("td",{colSpan:8+x,className:"py-20",children:(0,n.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 text-center",children:[(0,n.jsx)("div",{className:"w-12 h-12 rounded-full bg-zinc-100 dark:bg-white/5 flex items-center justify-center",children:(0,n.jsx)(D.Z,{size:22,className:"text-zinc-400"})}),(0,n.jsx)("p",{className:"text-sm font-medium text-zinc-600 dark:text-zinc-300",children:"학생 명단이 없습니다"}),(0,n.jsx)("p",{className:"text-xs text-zinc-400 dark:text-zinc-500",children:"수행\xb7세특 페이지에서 학급을 선택하거나 학생을 먼저 등록해 주세요."})]})})})]})]})}),ey&&(0,n.jsxs)("div",{className:"px-6 py-3.5 border-t border-green-100 dark:border-green-500/20 bg-green-50 dark:bg-green-500/10 flex items-center gap-2 shrink-0",children:[(0,n.jsx)(R.Gl,{size:18,className:"shrink-0"}),(0,n.jsx)("span",{className:"text-sm font-medium text-green-700 dark:text-green-400",children:"모든 세특 초안 작성 완료"}),(0,n.jsx)("span",{className:"text-xs text-green-600/60 dark:text-green-500/60 ml-1",children:"— 창을 닫고 수행\xb7세특 페이지에서 초안을 확인\xb7수정하세요."}),ef>0&&(0,n.jsxs)("span",{className:"text-xs text-red-500 ml-auto",children:["실패 ",ef,"건은 개별 재시도하세요."]})]}),(0,n.jsx)(F,{open:et.open,isBatch:!0,onClose:()=>er({open:!1,invalidResults:[],validTasks:[],allTasks:[]}),invalidResults:et.invalidResults,onProceedExcluding:()=>{let{validTasks:e}=et;er({open:!1,invalidResults:[],validTasks:[],allTasks:[]}),e.length>0&&ex(e)},onProceed:()=>{let{allTasks:e}=et;er({open:!1,invalidResults:[],validTasks:[],allTasks:[]}),e.length>0&&ex(e)}})]})}var W=r(4908),U=r(83008),X=r(13376),q=r(67920),J=r(39136),V=r(54696),Y=r(96214),G=r(70809),Q=r(43232),$=r(64954),ee=r(24754),et=r(98319);function er(e){let{col:t,draftCol:r,studentId:n,generatingIds:s}=e;return t===r&&!!n&&s.has(n)}var en=r(69813);function es(e,t){return e&&e.col!==t?e.col>t?{row:e.row,col:e.col-1}:e:null}function ea(e,t){if(!e)return null;let r=es(e.start,t),n=es(e.end,t);return r&&n?{start:r,end:n}:null}var ei=r(82374),el=r(39561),ec=r(9244),eo=r(7153);let ed="평소 학습 목표에 대한 이해도가 높고 탐구 과정에서 발견한 문제점을 논리적으로 해결하며 지적 호기심을 발휘하는 태도가 우수함. 다양한 관점에서 사고하고 협력적으로 문제를 해결하는 능력을 보임. 수업 시간에 적극적으로 참여하며 동료 학생들에게 모범이 됨. ".repeat(4);function eu(e){let{fontSizeClass:t="text-sm",className:r,value:a,...i}=e,l=(0,s.useRef)(null),c=(0,s.useRef)(null);return(0,s.useLayoutEffect)(()=>{if(c.current&&l.current){let e=c.current.offsetWidth;l.current.style.width=a?"".concat(e+16,"px"):"40px"}},[a]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{ref:c,className:(0,y.cn)("invisible absolute whitespace-pre",t),"aria-hidden":"true",children:a||i.placeholder||""}),(0,n.jsx)("input",{ref:l,value:a,className:(0,y.cn)("min-w-[40px] focus:outline-none focus:ring-0 border-none",t,r),style:{width:a?void 0:"40p
1x"},...i})]})}let ex="saemo.evaluationColWidths.v1",eh={grade:48,classNum:48,number:48,name:96,total:48,attitude:200},em=e=>{var t;return e.startsWith("perf-")?48:e.startsWith("seteuk-")?200:null!==(t=eh[e])&&void 0!==t?t:120};function ep(){var e,t,x,h,m,p;let{students:f,classes:b,isLoaded:g}=(0,W.AF)(),v=(0,q.XC)(),w=(0,V.Dv)(),j=(0,el.g)(),N=(0,W.fc)(),C=ei.H&&!j&&N,{openSettings:S}=(0,G.Y)(),[E,M]=(0,s.useState)(()=>localStorage.getItem("evaluation-selected-class")||""),[I,D]=(0,s.useState)([]),[R,A]=(0,s.useState)(2),[Z,T]=(0,s.useState)([]),[K,O]=(0,s.useState)(null),[B,P]=(0,s.useState)(null),[eh,ep]=(0,s.useState)(null),[ef,eb]=(0,s.useState)(null),[eg,ev]=(0,s.useState)(2),[ek,ew]=(0,s.useState)("1500"),{generateSeteuk:ey,generatingIds:ej,isBatchRunningFor:ez}=(0,L.l)(),{showToast:eN}=(0,et.p)(),eC=()=>{ez(E)&&eN("백그라운드에서 세특 생성이 계속됩니다. 진행 상황은 화면 우측 상단에서 확인하세요.","info"),eA(!1)},[eS,eE]=(0,s.useState)(null),[eM,eI]=(0,s.useState)(!1),[eD,eR]=(0,s.useState)({open:!1,invalidResults:[]}),[eL,eA]=(0,s.useState)(!1),[eZ,eT]=(0,s.useState)(null),[eF,eK]=(0,s.useState)(null),[e_,eO]=(0,s.useState)(!1),[eB,eP]=(0,s.useState)(null),eH=(0,s.useRef)(null),[eW,eU]=(0,s.useState)(null),eX=(0,s.useRef)(null),eq=(0,s.useRef)(null),[eJ,eV]=(0,s.useState)(0),eY=(0,s.useCallback)(()=>{let e=document.activeElement;e instanceof HTMLElement&&"true"===e.dataset.gridEditor&&(eG.current=!0),eV(e=>e+1)},[]),eG=(0,s.useRef)(!1),eQ=(0,s.useRef)(null),[e$,e0]=(0,s.useState)(!1),e1=(0,s.useRef)(null),e2=(0,s.useRef)(300),[e5,e4]=(0,s.useState)(300),e3=(0,s.useRef)(null),[e8,e9]=(0,s.useState)({}),e6=(0,s.useRef)(null),e7=e=>{var t;return null!==(t=e8[e])&&void 0!==t?t:em(e)},te=e7("grade"),tt=te+e7("classNum"),tr=tt+e7("number");(0,s.useEffect)(()=>{try{let e=window.localStorage.getItem(ex);if(!e)return;let t=JSON.parse(e),r={};Object.entries(t).forEach(e=>{let[t,n]=e;"number"==typeof n&&Number.isFinite(n)&&(r[t]=Math.max(40,Math.min(720,n)))}),Object.keys(r).length>0&&e9(r)}catch(e){}},[]),(0,s.useEffect)(()=>{let e=setTimeout(()=>{try{0===Object.keys(e8).length?window.localStorage.removeItem(ex):window.localStorage.setItem(ex,JSON.stringify(e8))}catch(e){}},300);return()=>clearTimeout(e)},[e8]);let tn=e=>t=>{t.preventDefault(),t.stopPropagation(),e6.current={key:e,startX:t.clientX,startWidth:e7(e)}},ts=e=>{e9(t=>{if(void 0===t[e])return t;let r={...t};return delete r[e],r})};(0,s.useEffect)(()=>{let e=e=>{let t=e6.current;if(!t)return;let r=t.startWidth+(e.clientX-t.startX);e9(e=>({...e,[t.key]:Math.max(40,Math.min(720,r))}))},t=()=>{e6.current=null};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",t),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",t)}},[]);let ta=(e,t)=>(0,n.jsx)("span",{role:"separator","aria-label":"".concat(t," 열 너비 조절"),onMouseDown:tn(e),onDoubleClick:()=>ts(e),title:"끌어서 너비 조절 (두 번 클릭하면 기본값)",className:"absolute top-0 right-0 z-10 h-full w-2 cursor-col-resize hover:bg-toss-blue/30 active:bg-toss-blue/50 transition-colors"});(0,s.useEffect)(()=>{(async()=>{w&&(D((await (0,Y.generateMockData)()).students),E||M("담임 학급"))})()},[w,E]);let ti=(0,s.useCallback)(async()=>{if(w){eE(5);return}try{let e=await fetch("/api/credits");if(e.ok){let t=await e.json();eE(t.balance)}}catch(e){console.error("Failed to fetch credits:",e)}},[w]);(0,s.useEffect)(()=>{ti()},[ti]);let tl=(0,s.useMemo)(()=>w?["담임 학급"]:b.filter(e=>"담임 학급"!==e),[w,b]);(0,s.useEffect)(()=>{!(tl.length>0)||E&&tl.includes(E)||M(tl[0])},[tl,E]),(0,s.useEffect)(()=>{E&&localStorage.setItem("evaluation-selected-class",E)},[E]),(0,s.useEffect)(()=>{eK(null),eq.current=null,eU(null),eO(!1),eP(null)},[E]),(0,s.useEffect)(()=>()=>{e1.current&&clearTimeout(e1.current)},[]);
1let[tc,to]=(0,s.useState)([]),td=(0,s.useRef)(null),tu=(0,s.useRef)(null),tx=(0,s.useRef)(0),th=(0,s.useRef)(0),tm=(0,s.useRef)(0),tp=(0,s.useRef)(0),tf=(0,s.useRef)(!1);(0,s.useEffect)(()=>{tu.current={perfSourceCount:R,perfSourceNames:Z,seteukSourceCount:eg,seteukSourceNames:tc}},[R,Z,eg,tc]);let tb=(0,s.useCallback)(e=>{if(w||!E)return;td.current&&clearTimeout(td.current);let t=()=>{var t,r,n,s;let a=(null==e?void 0:e.explicitConfig)||tu.current;a&&(0,U.X)("saveEvaluationColumnConfig",{classId:E,perfSourceCount:null!==(t=a.perfSourceCount)&&void 0!==t?t:R,perfSourceNames:null!==(r=a.perfSourceNames)&&void 0!==r?r:Z,seteukSourceCount:null!==(n=a.seteukSourceCount)&&void 0!==n?n:eg,seteukSourceNames:null!==(s=a.seteukSourceNames)&&void 0!==s?s:tc},v)};(null==e?void 0:e.immediate)?t():td.current=setTimeout(t,500)},[w,E,v,R,Z,eg,tc]),tg=(0,s.useCallback)(()=>{var e,t;if(w||!E||!tf.current)return;let r=Math.max(tx.current,tm.current),n=Math.max(th.current,tp.current);if(r<=tx.current&&n<=th.current)return;tx.current=r,th.current=n;let s=tu.current;tb({immediate:!0,explicitConfig:{perfSourceCount:r,perfSourceNames:null!==(e=null==s?void 0:s.perfSourceNames)&&void 0!==e?e:Z,seteukSourceCount:n,seteukSourceNames:null!==(t=null==s?void 0:s.seteukSourceNames)&&void 0!==t?t:tc}})},[w,E,tb,Z,tc]),tv=(0,s.useRef)(tg);tv.current=tg,(0,s.useEffect)(()=>{if(!E)return;let e=!1;if(tf.current=!1,tm.current=0,tp.current=0,tx.current=0,th.current=0,w){A(2),T([]),ev(2),to([]);return}return(async()=>{let t=await (0,U.X)("getEvaluationColumnConfig",{classId:E},v);if(e)return;let r=t.success&&t.data?t.data:{perfSourceCount:2,perfSourceNames:[],seteukSourceCount:2,seteukSourceNames:[]};tx.current=r.perfSourceCount,th.current=r.seteukSourceCount,A(Math.max(r.perfSourceCount,tm.current)),T(r.perfSourceNames),ev(Math.max(r.seteukSourceCount,tp.current)),to(r.seteukSourceNames||[]),tf.current=!0,tv.current()})(),()=>{e=!0}},[E,w,v]);let tk=w?I:f,tw=(0,s.useMemo)(()=>tk.filter(e=>{var t;return!!E&&(!!w||e.homeClassId===E||(null===(t=e.customClassIds)||void 0===t?void 0:t.includes(E)))}).sort((e,t)=>{let r=e.grade||0,n=t.grade||0;if(r!==n)return r-n;let s=e.classNum||0,a=t.classNum||0;return s!==a?s-a:e.number-t.number}),[tk,E,w]),{data:ty,setItem:tj,hydrateItem:tz,getItem:tN,recoveredKeys:tC,savingKeys:tS,dirtyKeys:tE,failedKeys:tM,flushAll:tI}=(0,J.M)({storageKeyPrefix:"performance-".concat(E),onSave:async(e,t)=>{if(w||!E||!e)return!0;let r=f.find(t=>t.id===e),n=r?{name:r.name,number:r.number,grade:r.grade||1,classNum:r.classNum||0,homeClassId:r.homeClassId}:void 0,s=await (0,U.X)("upsertPerformanceRecord",{studentId:e,classId:E,sources:t.sources,studentDetails:n},v);return s.success&&s.audit&&(0,X.dp)(s.audit),s.success},debounceMs:1500,enableLocalStorage:!w}),{data:tD,setItem:tR,hydrateItem:tL,getItem:tA,recoveredKeys:tZ,savingKeys:tT,dirtyKeys:tF,failedKeys:tK,flushAll:t_}=(0,J.M)({storageKeyPrefix:"seteuk-".concat(E),onSave:async(e,t)=>{if(w||!E||!e)return!0;let r=f.find(t=>t.id===e),n=r?{name:r.name,number:r.number,grade:r.grade||1,classNum:r.classNum||0,homeClassId:r.homeClassId}:void 0,s=await (0,U.X)("upsertSeteukRecord",{studentId:e,classId:E,attitude:t.attitude,sources:t.sources,draft:t.draft,studentDetails:n},v);return s.success&&s.audit&&(0,X.dp)(s.audit),s.success},debounceMs:1500,enableLocalStorage:!w}),tO=(0,s.useRef)(void 0);tO.current=()=>{tI(),t_()},(0,s.useEffect)(()=>{let e=()=>{var e;"hidden"===document.visibilityState&&(null===(e=tO.current)||void 0===e||e.call(tO))},t=()=>{var e;return null===(e=tO.current)||void 0===e?void 0:e.call(tO)};return document.addEventListener("visibilitychange",e),window.addEventListener("pagehide",t),()=>{document.removeEventListener("visibilitychange",e),window.removeEventListener("pagehide",t)}},[]);let tB=(null!==(e=null==tS?void 0:tS.size)&&void 0!==e?e:0)>0||(null!==(t=null==tT?void 0:tT.size)&&void 0!==t?t:0)>0,tP=(null!==(x=null==tE?void 0:tE.size)&&void 0!==x?x:0)>0||(null!==(h=null==tF?void 0:tF.size)&&void 0!==h?h:0)>0,tH=(null!==(m=null==tM?void 0:tM.size)&&void 0!==m?m:0)+(null!==(p=null==tK?void 0:tK.size)&&void 0!==p?p:0),tW=tH>0?"".concat(tH,"명분이 저장되지 않았습니다."):null,tU=(0,s.useCallback)(()=>{tI(),t_()},[tI,t_]),tX=(0,s.useRef)([]),tq=(0,s.useRef)([]),tJ=(0,s.useRef)({perf:{},seteuk:{}});tJ.current={perf:ty,seteuk:tD};let tV=(0,s.useCallback)(()=>({perf:JSON.parse(JSON.stringify(tJ.current.perf)),seteuk:JSON.parse(JSON.stringify(tJ.current.seteuk))}
1),[]),[tY,tG]=(0,s.useState)(0),tQ=(0,s.useCallback)(()=>{tX.current.push({perf:JSON.parse(JSON.stringify(ty)),seteuk:JSON.parse(JSON.stringify(tD))}),tX.current.length>30&&tX.current.shift(),tq.current=[],tG(tX.current.length)},[ty,tD]),t$=(0,s.useCallback)(e=>{Object.keys(tJ.current.perf).forEach(t=>{t in e.perf||tj(t,{studentId:t,sources:[]})}),Object.keys(tJ.current.seteuk).forEach(t=>{t in e.seteuk||tR(t,{studentId:t,attitude:"",sources:[],draft:""})}),Object.entries(e.perf).forEach(e=>{let[t,r]=e;return tj(t,r)}),Object.entries(e.seteuk).forEach(e=>{let[t,r]=e;return tR(t,r)}),eY()},[tj,tR,eY]),t0=(0,s.useCallback)(()=>{let e=tX.current.pop();tG(tX.current.length),e&&(tq.current.push(tV()),t$(e))},[t$,tV]),t1=(0,s.useCallback)(()=>{let e=tq.current.pop();e&&(tX.current.push(tV()),tG(tX.current.length),t$(e))},[t$,tV]);(0,s.useEffect)(()=>{let e=e=>{if(!(e.metaKey||e.ctrlKey))return;let t=e.key.toLowerCase();if(!eL&&!eM&&!ef&&!eW){if("z"===t&&e.shiftKey||"y"===t){e.preventDefault(),t1();return}"z"===t&&(e.preventDefault(),t0())}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[t0,t1,eW,eL,eM,ef]),(0,s.useEffect)(()=>{if(!E)return;let e=!1;if(w)return(async()=>{let t=await (0,Y.generateMockData)();e||t.students.forEach(e=>{tz(e.id,{studentId:e.id,sources:["","",""]}),tL(e.id,{studentId:e.id,attitude:"",sources:["","",""],draft:""})})})(),()=>{e=!0};let t=e=>{if(!Array.isArray(e))return 0;let t=0;for(let n=0;n<e.length;n++){var r;""!==String(null!==(r=e[n])&&void 0!==r?r:"").trim()&&(t=n+1)}return t},r=async()=>{let r=await (0,U.X)("getSeteukRecords",{classId:E},v);if(!e&&r.success&&r.data){let e=r.data,a=0;for(let r of e){var n,s;let e=tZ.has(r.studentId);e||tL(r.studentId,{studentId:r.studentId,attitude:r.attitude||"",sources:r.sources||[],draft:r.draft||""}),a=Math.max(a,t(null!==(s=e?null===(n=tJ.current.seteuk[r.studentId])||void 0===n?void 0:n.sources:r.sources)&&void 0!==s?s:r.sources))}a>tp.current&&(tp.current=a),ev(e=>Math.max(e,tp.current)),tv.current()}};return(async()=>{let r=await (0,U.X)("getPerformanceRecords",{classId:E},v);if(!e&&r.success&&r.data){let e=r.data,a=0;for(let r of e){var n,s;let e=tC.has(r.studentId);e||tz(r.studentId,{studentId:r.studentId,sources:r.sources||[]}),a=Math.max(a,t(null!==(s=e?null===(n=tJ.current.perf[r.studentId])||void 0===n?void 0:n.sources:r.sources)&&void 0!==s?s:r.sources))}a>tm.current&&(tm.current=a),A(e=>Math.max(e,tm.current)),tv.current()}})(),r(),()=>{e=!0}},[E,v,w,tC,tZ,tz,tL]);let t2=e=>tN(e,{studentId:e,sources:Array(R).fill("")}),t5=(e,t,r)=>{let n=t2(e),s=[...n.sources];for(;s.length<R;)s.push("");s[t]=r,tj(e,{...n,sources:s})},t4=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=[];T(r=>{let s=[...r];for(;s.length<=e;)s.push("");return s[e]=t,n=s,s}),tb({immediate:r,explicitConfig:{perfSourceNames:n}})},t3=e=>{if(R<=1)return;A(R-1);let t=4+e;eK(e=>ea(e,t)),eP(e=>es(e,t)),eU(e=>{let r=es(e,t);return eq.current=r,r||(eX.current=null),r}),T(t=>{let r=[...t];return r.length>e&&r.splice(e,1),r}),tb(),tw.forEach(t=>{let r=t.id,n=ty[r];if(n){let t=[...n.sources];t.splice(e,1),tj(r,{...n,sources:t})}})},t8=e=>e.reduce((e,t)=>""===t.trim()||isNaN(Number(t))?e:e+parseFloat(t),0),t9=e=>tA(e,{studentId:e,attitude:"",sources:Array(eg).fill(""),draft:""}),t6=(e,t,r)=>{let n=t9(e);tR(e,{...n,[t]:r})},t7=(e,t,r)=>{let n=[...t9(e).sources];for(;n.length<eg;)n.push("");n[t]=r,t6(e,"sources",n)},re=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=[];to(r=>{let s=[...r];for(;s.length<=e;)s.push("");return s[e]=t,n=s,s}),tb({immediate:r,explicitConfig:{seteukSourceNames:n}})},rt=e=>{if(eg<=0)return;ev(e=>e-1);let t=4+R+2+e;eK(e=>ea(e,t)),eP(e=>es(e,t)),eU(e=>{let r=es(e,t);return eq.current=r,r||(eX.current=null),r}),to(t=>{let r=[...t];return r.length>e&&r.splice(e,1),r}),tb(),tw.forEach(t=>{let r=t.id,n=tD[r];if(n){let t=[...n.sources];t.splice(e,1),tR(r,{...n,sources:t})}})};(0,s.useEffect)(()=>{let e=e3.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect().width,r=window.getComputedStyle(e),n=document.createElement("div");
1Object.assign(n.style,{position:"fixed",left:"-9999px",top:"0",visibility:"hidden",width:"".concat(Math.max(120,t-16),"px"),fontSize:"14px",lineHeight:"1.5",fontFamily:r.fontFamily,whiteSpace:"pre-wrap",wordBreak:"break-word"}),n.textContent=ed,document.body.appendChild(n);let s=n.offsetHeight;document.body.removeChild(n);let a=Math.max(120,s+24);e2.current=a,e4(a)};t();let r=new ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[]);let rr=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e||!(e instanceof HTMLTextAreaElement))return;if(t){e.style.height="34px",e.style.overflowY="hidden";return}let r=e2.current;e.style.height="auto";let n=e.scrollHeight;n>r?(e.style.height="".concat(r,"px"),e.style.overflowY="auto"):(e.style.height="".concat(n,"px"),e.style.overflowY="hidden")},rn=e=>rr(e.target),rs=e=>rr(e.target);(0,s.useEffect)(()=>{var e;let t=null===(e=eQ.current)||void 0===e?void 0:e.querySelectorAll("textarea");null==t||t.forEach(e=>{let t="true"===e.dataset.gridEditor;rr(e,!t&&e!==document.activeElement)})},[tw,tD,eg]);let ra=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(w){window.dispatchEvent(new CustomEvent("open-login-modal"));return}let r=f.find(t=>t.id===e);if(r)try{let n=t9(e);if(!t){let t=_({studentId:e,studentName:r.name,studentNumber:r.number,attitude:n.attitude,sources:n.sources});if(t.hasWarning){eR({open:!0,invalidResults:[t],pendingStudentId:e});return}}await ey({studentId:e,studentName:r.name,classId:E,attitude:n.attitude,sources:n.sources,targetRange:ek,onSuccess:t=>{console.log("[EvaluationRecordView] handleGenerateSeteuk onSuccess called. Data:",t),t.draft&&(console.log("[EvaluationRecordView] Updating draft for student:",e),t6(e,"draft",t.draft),eY()),"number"==typeof t.remainingCredits&&eE(t.remainingCredits)},onError:e=>{e.needCredit&&eI(!0)}})}catch(e){console.error(e)}},ri=e=>{if(e<4)return{type:"info",readOnly:!0};let t=4;return e<4+R?{type:"perf",index:e-t}:e===(t+=R)?{type:"total",readOnly:!0}:e===(t+=1)?{type:"attitude"}:e<(t+=1)+eg?{type:"source",index:e-t}:e===(t+=eg)?{type:"draft"}:{type:"unknown",readOnly:!0}},rl=(e,t)=>{let r=tw[e];if(!r)return"";let n=ri(t);if("info"===n.type){if(0===t)return r.grade||"";if(1===t)return r.classNum||"";if(2===t)return r.number||"";if(3===t)return r.name||""}let s=t2(r.id),a=t9(r.id);return"perf"===n.type?s.sources[n.index]||"":"total"===n.type?t8(s.sources).toString():"attitude"===n.type?a.attitude||"":"source"===n.type?a.sources[n.index]||"":"draft"===n.type&&a.draft||""},rc=async()=>{if(!eF)return;let e=Math.min(eF.start.row,eF.end.row),t=Math.max(eF.start.row,eF.end.row),r=Math.min(eF.start.col,eF.end.col),n=Math.max(eF.start.col,eF.end.col),s="";for(let a=e;a<=t;a++){let e=[];for(let t=r;t<=n;t++)e.push((0,y.vB)(rl(a,t)));s+=e.join("	")+(a===t?"":"\r\n")}try{await navigator.clipboard.writeText(s),e0(!0),e1.current&&clearTimeout(e1.current),e1.current=setTimeout(()=>e0(!1),1200)}catch(e){console.error("Failed to copy",e)}},ro=(e,t)=>{let r,n;let s=null!=t?t:eF?{row:Math.min(eF.start.row,eF.end.row),col:Math.min(eF.start.col,eF.end.col)}:null;if(!s)return;let a=s.row,i=s.col,l=(0,y.R3)(e);if(0===l.length)return;tQ();let c=(l=l.map(e=>e.map(e=>e.replace(/\r\n?/g,"\n")))).length,o=Math.max(...l.map(e=>e.length));if((t||null!==eF&&eF.start.row===eF.end.row&&eF.start.col===eF.end.col)&&c>1&&!e.includes("	")&&!e.includes("\r")){let e=ri(i);("draft"===e.type||"attitude"===e.type||"source"===e.type)&&(l=[[l.map(e=>e[0]).join("\n")]])}if(t||null===eF||eF.start.row===eF.end.row&&eF.start.col===eF.end.col)r=l.length,n=o;else{let e=Math.min(eF.start.row,eF.end.row),t=Math.max(eF.start.row,eF.end.row),s=Math.min(eF.start.col,eF.end.col),a=Math.max(eF.start.col,eF.end.col);r=t-e+1,n=a-s+1}let d=new Map,u=new Map;for(let e=0;e<r;e++){let t=a+e;if(t>=tw.length)break;let r=tw[t],s=l[e%c];if(!s)continue;let h=d.get(r.id);if(!h){let e=t2(r.id);h={...e,sources:[...e.sources]}}let m=u.get(r.id);if(!m){let e=t9(r.id);m={...e,sources:[...e.sources]}}let p=!1,f=!1;for(let e=0;e<n;e++){var x;let t=ri(i+e);if(t.readOnly)continue;let r=null!==(x=s[e%o])&&void 0!==x?x:"";if("perf"===t.type){let e=t.index;for(;h.sources.length<=e;)h.sources.push("");h.sources[e]=r,p=!0}
1if("attitude"===t.type&&(m.attitude=r,f=!0),"source"===t.type){let e=t.index;for(;m.sources.length<=e;)m.sources.push("");m.sources[e]=r,f=!0}"draft"===t.type&&(m.draft=r,f=!0)}p&&d.set(r.id,h),f&&u.set(r.id,m)}d.forEach((e,t)=>tj(t,e)),u.forEach((e,t)=>tR(t,e)),eY()},rd=(e,t,r)=>{var n,s;let a=eq.current;if(!a||a.row!==t||a.col!==r){if((null===(s=e.target)||void 0===s?void 0:null===(n=s.dataset)||void 0===n?void 0:n.gridEditor)!=="true"&&e.preventDefault(),a&&rI(),e.shiftKey&&eF){eO(!1),eK({start:eF.start,end:{row:t,col:r}});return}rw(),eO(!0),eP({row:t,col:r}),eK({start:{row:t,col:r},end:{row:t,col:r}}),eH.current={x:e.clientX,y:e.clientY}}},ru=(e,t,r)=>{if(!(1&e.buttons)){e_&&(eO(!1),eP(null));return}if(e_&&eB){let s=eH.current;if(s&&4>Math.abs(e.clientX-s.x)&&4>Math.abs(e.clientY-s.y))return;if(eB.row!==t||eB.col!==r){var n;null===(n=window.getSelection())||void 0===n||n.removeAllRanges()}eK({start:eB,end:{row:t,col:r}})}},rx=()=>{eO(!1),eP(null)};(0,s.useEffect)(()=>(window.addEventListener("mouseup",rx),()=>window.removeEventListener("mouseup",rx)),[]);let rh=(e,t)=>{if(!eF||eW&&eW.row===e&&eW.col===t)return!1;let r=Math.min(eF.start.row,eF.end.row),n=Math.max(eF.start.row,eF.end.row),s=Math.min(eF.start.col,eF.end.col),a=Math.max(eF.start.col,eF.end.col);return e>=r&&e<=n&&t>=s&&t<=a},rm=e=>!!eW&&eW.row===e||!!eF&&e===eF.start.row,rp=(e,t)=>{if(!eF)return{};let r=Math.min(eF.start.row,eF.end.row),n=Math.max(eF.start.row,eF.end.row),s=Math.min(eF.start.col,eF.end.col),a=Math.max(eF.start.col,eF.end.col);if(e<r||e>n||t<s||t>a)return{};let i="#3b82f6",l=["inset 0 -1px 0 0 ".concat(i),"inset -1px 0 0 0 ".concat(i)];return e===r&&l.push("inset 0 1px 0 0 ".concat(i)),t===s&&l.push("inset 1px 0 0 0 ".concat(i)),{boxShadow:l.join(", ")}},rf=(e,t)=>(null==eW?void 0:eW.row)===e&&(null==eW?void 0:eW.col)===t,rb=4+R+1+1+eg,rg=rb+1,rv=(()=>{var e;if(!eF)return null;let{start:t,end:r}=eF;return t.row!==r.row||t.col!==r.col||ri(t.col).readOnly||er({col:t.col,draftCol:rb,studentId:null===(e=tw[t.row])||void 0===e?void 0:e.id,generatingIds:ej})?null:t})(),rk=(e,t)=>(null==rv?void 0:rv.row)===e&&(null==rv?void 0:rv.col)===t,rw=()=>{eG.current=!0},ry=(e,t)=>{let r=4+R+1+1+eg+1,n=e+t;for(;n>=0&&n<r;){if(!ri(n).readOnly)return n;n+=t}return null},rj=(e,t,r)=>{let n=tw[e];if(!n)return;let s=ri(t);"perf"===s.type?t5(n.id,s.index,r):"attitude"===s.type?t6(n.id,"attitude",r):"source"===s.type?t7(n.id,s.index,r):"draft"===s.type&&t6(n.id,"draft",r)},rz=(e,t,r)=>{var n;if(eW&&eW.row===e&&eW.col===t||ri(t).readOnly)return;if(er({col:t,draftCol:4+R+1+1+eg,studentId:null===(n=tw[e])||void 0===n?void 0:n.id,generatingIds:ej})){eN("AI 생성이 끝난 뒤에 편집할 수 있어요.","info");return}let s=String(rl(e,t));tQ(),void 0!==r&&rj(e,t,r),eX.current={row:e,col:t,value:s},eK({start:{row:e,col:t},end:{row:e,col:t}}),eq.current={row:e,col:t},eU({row:e,col:t}),rw()},rN=(e,t,r)=>{if(eq.current)return;if(e.detail>=2){rz(t,r);return}let n=e.currentTarget,s=n.value.length;"perf"===ri(r).type?n.setSelectionRange(0,s):n.setSelectionRange(s,s)},rC=(e,t)=>{eq.current||rz(e,t)},rS=e=>{rr(e.target),rI()},rE=e=>{var t;let r=null===(t=eQ.current)||void 0===t?void 0:t.querySelector('[data-row="'.concat(e,'"]'));null==r||r.scrollIntoView({block:"nearest"})};(0,s.useEffect)(()=>{var e;if(!eG.current||(eG.current=!1,!rv))return;let t=null===(e=eQ.current)||void 0===e?void 0:e.querySelector('[data-grid-editor="true"]');if(!t||(t!==document.activeElement&&t.focus({preventScroll:!0}),eq.current))return;let r=t.value.length;"perf"===ri(rv.col).type?t.setSelectionRange(0,r):t.setSelectionRange(r,r)});let rM=(e,t)=>{let r=Math.max(0,Math.min(tw.length-1,e)),n=Math.max(0,Math.min(rg-1,t));eK({start:{row:r,col:n},end:{row:r,col:n}}),rw(),rE(r)},rI=()=>{let e=eX.current;e&&String(rl(e.row,e.col))===e.value&&tX.current.pop(),eX.current=null,eq.current=null,eU(null)},rD=(0,s.useRef)(new Set);(0,s.useEffect)(()=>{var e;let t=function(e,t){let r=[];return t.forEach(t=>{e.has(t)||r.push(t)}),r}(rD.current,ej);if(rD.current=ej,0===t.length)return;let r=eq.current;if(!r)return;let n=4+R+1+1+eg,s=null===(e=tw[r.row])||void 0===e?void 0:e.id;t.some(e=>(function(e){let{editingCell:t,draftCol:r,editingStudentId:n,startedStudentId:s}=e;return!!t&&t.col===r&&n===s})({editingCell:r,draftCol:n,editingStudentId:s,startedStudentId:e}))&&(rI(),eN("AI 생성이 시작되어 편집 중이던 내용을 저장했어요.","info"))},[ej,tw,R,eg]);let rR=(e,t)=>{if(!eF)return!1;let r=eF.start.row===eF.end.row&&eF.start.col===eF.end.col;if(r&&("Enter"===e.key||"F2"===e.key)){let{row:t,col:r}=eF.start;return!ri(r).readOnly&&(e.preventDefault(),rz(t,r),!0)}if("ArrowUp"===e.key||"ArrowDown"===e.key||"ArrowLeft"===e.key||"ArrowRight"===e.key){e.preventDefault();let{row:t,col:r}=eF.end;return"ArrowUp"===e.key?t-=1:"ArrowDown"===e.key?t+=1:"ArrowLeft"===e.key?r-=1:r+=1,t=Math.max(0,Math.min(tw.length-1,t)),r=Math.max(0,Math.min(rg-1,r)),e.shiftKey?(eK({start:eF.start,end:{row:t,col:r}}),rE(t)):rM(t,r),!0}if("Tab"===e.key){e.preventDefault();let{row:t,col:r}=eF.end;return rM(t,r+(e.shiftKey?-1:1)),!0}if("Delete"===e.key||"Backspace"===e.key)return e.preventDefault(),rZ(),!0;
1if((e.metaKey||e.ctrlKey)&&("c"===e.key||"C"===e.key))return e.preventDefault(),rc(),!0;if(!(null==t?void 0:t.yieldTyping)&&r&&(0,en.E$)(e)){let{row:t,col:r}=eF.start;if("perf"===ri(r).type)return e.preventDefault(),rz(t,r,e.key),!0}return!1},rL=(e,t,r,n)=>{var s,a;if(e.nativeEvent.isComposing)return;let i=eq.current;if(!(i&&i.row===t&&i.col===r)){rR(e,{yieldTyping:!0})&&e.nativeEvent.stopImmediatePropagation();return}if("Enter"===e.key){if(e.preventDefault(),(0,en.xQ)({key:e.key,altKey:e.altKey,shiftKey:e.shiftKey,multiline:n})){(0,en.yl)(e.currentTarget);return}e.nativeEvent.stopImmediatePropagation(),rI(),rM(t+1,r);return}if("Escape"===e.key){e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),rI(),rM(t,r);return}if("Tab"===e.key){e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),rI();let n=ry(r,e.shiftKey?-1:1);null!==n&&rM(t,n);return}let l=e.currentTarget,c=n?(0,en.Ud)({key:e.key,value:l.value,selectionStart:null!==(s=l.selectionStart)&&void 0!==s?s:0,selectionEnd:null!==(a=l.selectionEnd)&&void 0!==a?a:0,shiftKey:e.shiftKey}):e.shiftKey?null:(0,en.Mo)(e.key);c&&(e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),rI(),rM(t+c.rowDelta,r+c.colDelta))},rA=async()=>{let e=tw.map(e=>{let t=t2(e.id),r=t9(e.id),n={학년:e.grade||"-",반:e.classNum||"-",번호:e.number,이름:e.name};return t.sources.forEach((e,t)=>{n[Z[t]||"수행".concat(t+1)]=e||""}),n["수행총점"]=t8(t.sources),n["태도및특성"]=r.attitude||"",r.sources.forEach((e,t)=>{n[tc[t]||"세특자료".concat(t+1)]=e||""}),n["세특초안"]=r.draft||"",n}),t=await Promise.all([r.e(1425),r.e(6919)]).then(r.bind(r,2093)),n=t.utils.json_to_sheet(e),s=t.utils.book_new();t.utils.book_append_sheet(s,n,"수행세특");let a=(0,y.RJ)();t.writeFile(s,"수행세특_".concat(E,"_").concat(a,".xlsx"))},rZ=()=>{if(!eF)return;tQ();let e=Math.min(eF.start.row,eF.end.row),t=Math.max(eF.start.row,eF.end.row),r=Math.min(eF.start.col,eF.end.col),n=Math.max(eF.start.col,eF.end.col),s=new Map,a=new Map;for(let i=e;i<=t;i++){if(i>=tw.length)continue;let e=tw[i],t=s.get(e.id);if(!t){let r=t2(e.id);t={...r,sources:[...r.sources]}}let l=a.get(e.id);if(!l){let t=t9(e.id);l={...t,sources:[...t.sources]}}let c=!1,o=!1;for(let s=r;s<=n;s++){let r=ri(s);if(!r.readOnly){if("perf"===r.type){let e=r.index;""!==t.sources[e]&&(t.sources[e]="",c=!0)}if("attitude"===r.type&&""!==l.attitude&&(l.attitude="",o=!0),"source"===r.type){let e=r.index;""!==l.sources[e]&&(l.sources[e]="",o=!0)}if("draft"===r.type){if(ej.has(e.id))continue;""!==l.draft&&(l.draft="",o=!0)}}}c&&s.set(e.id,t),o&&a.set(e.id,l)}s.forEach((e,t)=>tj(t,e)),a.forEach((e,t)=>tR(t,e)),eY();let i=s.size+a.size;i>0&&eN("".concat(i,"명의 입력 내용을 비웠습니다."),"info",{label:"실행 취소",onClick:t0})},rT=(0,s.useRef)({enterEdit:rz,getColType:ri,handleCopy:rc,handleDelete:rZ,handlePaste:ro,runGridKey:rR});return rT.current={enterEdit:rz,getColType:ri,handleCopy:rc,handleDelete:rZ,handlePaste:ro,runGridKey:rR},(0,s.useEffect)(()=>{let e=async e=>{if(!eF||eL||eM||ef||eq.current)return;let t=document.activeElement;t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement||rT.current.runGridKey(e)},t=e=>{var t;if(!eF||eL||eM||ef||eq.current)return;let r=document.activeElement,n=r instanceof HTMLElement&&"true"===r.dataset.gridEditor;if(!n&&(r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement))return;!n&&document.activeElement instanceof HTMLElement&&document.activeElement.blur(),e.preventDefault();let s=(null===(t=e.clipboardData)||void 0===t?void 0:t.getData("text"))||"";rT.current.handlePaste(s)};return window.addEventListener("keydown",e),window.addEventListener("paste",t),()=>{window.removeEventListener("keydown",e),window.removeEventListener("paste",t)}},[eF,tw,R,eg,eL,eM,ef]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"md:hidden block h-full",children:(0,n.jsx)(z,{students:tw,selectedStudentId:eZ,onSelectStudent:e=>eT(e||null),perfRowData:ty,seteukRowData:tD,updatePerfSource:t5,updateSeteukField:t6,updateSeteukSource:t7,perfSourceCount:R,perfSourceNames:Z,seteukSourceCount:eg,calculateTotal:t8,generateSeteuk:e=>ra(e),generatingIds:ej,creditBalance:eS,targetRange:ek,setTargetRange:ew,availableClasses:tl,selectedClass:E,onSelectClass:M,isAutoSaving:tB,hasAutoSaveDirty:tP,autoSaveError:tW,onRetryAutoSave:tU,onUndo:t0,canUndo:tY>0})}),(0,n.jsxs)("div",{className:"md:flex hidden h-full flex-col p-6 gap-6 overflow-hidden bg-[#0D0D0D]",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between shrink-0",children:[(0,n.jsxs)("div",{className:"ml-2",children:[(0,n.jsx)("h2",{className:"text-2xl font-bold text-white flex items-center gap-2 whitespace-nowrap",children:"수행\xb7세특"}),(0,n.jsxs)("div",{className:"flex items-center gap-3 mt-1",children:[(0,n.jsx)("p",{className:"text-sm text-[#888]",children:"수행평가 채점과 세특 작성을 한 페이지에서 관리하세요."}),(0,n.jsx)(k.R,{isSaving:tB,hasUnsavedChanges:tP,error:tW,onRetry:tU})]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-3 shrink-0",children:[(0,n.jsxs)("div",{className:"relative",children:[(0,n.jsx)("select",{value:E,onChange:e=>M(e.target.value),className:"appearance-none h-[38px] bg-[#f2f2ec] dark:bg-[#18181b] border border-gray-200 dark:border-white/10 rounded-lg px-3.5 pr-10 text-sm font-medium text-gray-600 dark:text-zinc-400 focus:outline-none focus:border-zinc-200 dark:border-white/20 transition cursor-pointer",children:tl.map(e=>(0,n.jsx)("option",{value:e,children:e},e))}),(0,n.jsx)(i.Z,{size:16,className:"absolute right-3 top-1/2 -translate-y-1/2 text-[#666] pointer-events-none"})]}),(0,n.jsx)("div",{className:"h-8 w-[1px] bg-white/10 mx-1"}),(0,n.jsxs)("button",{onClick:()=>{A(e=>e+1),tb()},className:"flex items-center gap-2 h-[38px] px-3.5 bg-[#f2f2ec] dark:bg-[#18181b] border border-gray-200 dark:border-white/10 text-gray-600 dark:text-zinc-400 hover:text-black dark:hover:text-white hover:bg-[#
1EEEEE8] dark:hover:bg-[#18181b] hover:border-zinc-200 dark:border-white/20 rounded-lg transition text-sm font-medium whitespace-nowrap shrink-0",children:[(0,n.jsx)(l.Z,{size:14}),"수행 열"]}),(0,n.jsxs)("button",{onClick:()=>{ev(e=>e+1),tb()},className:"flex items-center gap-2 h-[38px] px-3.5 bg-[#f2f2ec] dark:bg-[#18181b] border border-gray-200 dark:border-white/10 text-gray-600 dark:text-zinc-400 hover:text-black dark:hover:text-white hover:bg-[#EEEEE8] dark:hover:bg-[#18181b] hover:border-zinc-200 dark:border-white/20 rounded-lg transition text-sm font-medium whitespace-nowrap shrink-0",children:[(0,n.jsx)(l.Z,{size:14}),"세특 열"]}),(0,n.jsxs)("button",{onClick:rA,disabled:0===tw.length,className:"flex items-center gap-2 h-[38px] px-3.5 bg-[#f2f2ec] dark:bg-[#18181b] border border-gray-200 dark:border-white/10 text-gray-600 dark:text-zinc-400 hover:text-black dark:hover:text-white hover:bg-[#EEEEE8] dark:hover:bg-[#18181b] hover:border-zinc-200 dark:hover:border-white/20 disabled:opacity-50 rounded-lg transition text-sm font-medium whitespace-nowrap shrink-0",children:[(0,n.jsx)(c.Z,{size:14}),"엑셀"]}),!w&&N&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"h-8 w-[1px] bg-white/10 mx-1"}),(0,n.jsxs)("button",{onClick:()=>{if((0,ec.I)()){eN(eo.Ad,"info");return}eA(!0)},className:"flex items-center gap-2 h-[38px] px-3.5 bg-[#f2f2ec] dark:bg-[#18181b] border border-gray-200 dark:border-white/10 text-gray-600 dark:text-zinc-400 hover:text-black dark:hover:text-white hover:bg-[#EEEEE8] dark:hover:bg-[#18181b] hover:border-zinc-200 dark:hover:border-white/20 rounded-lg transition text-sm font-medium",children:[(0,n.jsx)(u.w,{src:"/lordicons/ai-write.json",size:16}),"AI 작성"]}),C&&(0,n.jsxs)("button",{onClick:()=>eI(!0),className:"flex items-center gap-2 h-[38px] pl-3 pr-3.5 bg-[#f2f2ec] dark:bg-[#18181b] border border-gray-200 dark:border-white/10 text-gray-600 dark:text-zinc-400 hover:text-black dark:hover:text-white hover:bg-[#EEEEE8] dark:hover:bg-[#18181b] hover:border-zinc-200 dark:hover:border-white/20 rounded-lg transition text-sm font-medium",children:[(0,n.jsx)(Q.O,{size:16,className:"text-black dark:text-white"}),"크레딧 ",null!=eS?eS:"-"]})]})]})]}),(0,n.jsx)("div",{ref:eQ,className:"flex-1 overflow-auto custom-scrollbar bg-[#0D0D0D] [&::-webkit-scrollbar]:h-[10px] evaluation-table-scroll",style:{colorScheme:"dark"},children:0!==tl.length||w?0!==tw.length||w||g?0===tw.length?(0,n.jsx)("div",{className:"h-full flex items-center justify-center p-8",children:(0,n.jsx)($.Z,{size:"lg",title:"학생 목록이 없습니다",description:"설정에서 학생 명단을 등록하여 수행\xb7세특 평가를 시작해 보세요.",action:(0,n.jsx)("button",{onClick:()=>S("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 cursor-pointer",children:"학생 명단 확인하기"})})}):(0,n.jsxs)("table",{className:"min-w-full w-full table-fixed border-collapse select-none bg-white dark:bg-[#0D0D0D]",children:[(0,n.jsxs)("colgroup",{children:[(0,n.jsx)("col",{style:{width:e7("grade")}}),(0,n.jsx)("col",{style:{width:e7("classNum")}}),(0,n.jsx)("col",{style:{width:e7("number")}}),(0,n.jsx)("col",{style:{width:e7("name")}}),Array.from({length:R}).map((e,t)=>(0,n.jsx)("col",{style:{width:e7("perf-".concat(t))}},"col-p-".concat(t))),(0,n.jsx)("col",{style:{width:e7("total")}}),(0,n.jsx)("col",{style:{width:e7("attitude")}}),Array.from({length:eg}).map((e,t)=>(0,n.jsx)("col",{style:{width:e7("seteuk-".concat(t))}},"col-s-".concat(t))),(0,n.jsx)("col",{style:{minWidth:"480px"}})]}),(0,n.jsxs)("thead",{className:"sticky top-0 bg-zinc-50 dark:bg-[#111111] z-20",children:[(0,n.jsxs)("tr",{className:"bg-zinc-50 dark:bg-[#111111]",children:[(0,n.jsxs)("th",{colSpan:4,className:"relative py-2.5 px-2 text-center text-xs font-medium text-black dark:text-white sticky left-0 z-20 bg-zinc-50 dark:bg-[#111111]",children:["학생 정보",(0,n.jsx)("div",{className:"absolute right-0 top-0 bottom-0 w-[1px] bg-zinc-300 dark:bg-white/20"})]}),(0,n.jsxs)("th",{colSpan:R+1,className:"relative py-2.5 px-2 text-center text-xs font-medium text-black dark:text-white bg-zinc-50 dark:bg-[#111111]",children:["수행 평가",(0,n.jsx)("div",{className:"absolute right-0 top-0 bottom-0 w-[1px] bg-zinc-300 dark:bg-white/20"})]}),(0,n.jsx)("th",{colSpan:eg+2,className:"py-2.5 px-2 text-center text-xs font-medium text-black dark:text-white bg-zinc-50 dark:bg-[#111111]",children:"세부능력 및 특기사항"})]}),(0,n.jsxs)("tr",{className:"bg-zinc-50 dark:bg-[#111111]",children:[(0,n.jsxs)("th",{className:"relative text-center text-xs font-medium text-black dark:text-white py-3 px-2 sticky left-0 bg-zinc-50 dark:bg-[#111111] z-20",children:["학년",ta("grade","학년")]}),(0,n.jsxs)("th",{style:{left:te},className:"relative text-center text-xs font-medium text-black dark:text-white py-3 px-2 sticky bg-zinc-50 dark:bg-[#111111] z-20",children:["반",ta("classNum","반")]}),(0,n.jsxs)("th",{style:{left:tt},className:"relative text-center text-xs font-medium text-black dark:text-white py-3 px-2 sticky bg-zinc-50 dark:bg-[#111111] z-20",children:["번호",ta("number","번호")]}),(0,n.jsxs)("th",{style:{left:tr},className:"relative text-center text-xs font-medium text-black dark:text-white py-3 px-2 sticky bg-zinc-50 dark:bg-[#111111] z-20",children:["이름",(0,n.jsx)("div",{className:"absolute right-0 top-0 bottom-0 w-[1px] bg-zinc-300 dark:bg-white/20"}),ta("name","이름")]}),Array.from({length:R}).map((e,t)=>{var r;return(0,n.jsxs)("th",{className:(0,y.cn)("group relative text-center text-xs font-medium text-black dark:text-white py-3 px-2 whitespace-nowrap bg-zinc-50 dark:bg-[#111111]"),children:[K===t?(0,n.jsx)(eu,{autoFocus:!0,value:null!==(r=Z[t])&&void 0!==r?r:"",onChange:e=>t4(t,e.target.value),onBlur:()=>{var e;O(null),t4(t,null!==(e=Z[t])&&void 0!==e?e:"",!0)},onKeyDown:e=>
1{"Enter"===e.key&&(O(null),tb({immediate:!0}))},className:"bg-[#18181b] border border-amber-500/30 rounded-none px-1 py-0.5 text-center text-white text-xs",fontSizeClass:"text-xs"}):(0,n.jsx)("div",{className:"flex items-center justify-center gap-1 cursor-pointer hover:text-amber-400 transition-colors whitespace-nowrap",role:"button",tabIndex:0,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),O(t))},onClick:()=>O(t),onMouseEnter:e=>ep({index:t,rect:e.currentTarget.getBoundingClientRect()}),onMouseLeave:()=>ep(null),children:(0,n.jsx)("span",{children:Z[t]||"수행".concat(t+1)})}),ta("perf-".concat(t),Z[t]||"수행".concat(t+1)),R>1&&(0,n.jsx)("button",{"aria-label":"열 삭제",onClick:()=>eb({kind:"perf",index:t,name:Z[t]||"수행".concat(t+1)}),className:"absolute right-0 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 p-1 text-red-500/50 hover:text-red-500",children:(0,n.jsx)(o.Z,{size:10})})]},"p-".concat(t))}),(0,n.jsxs)("th",{className:"relative text-center text-xs font-medium text-black dark:text-white py-3 px-2 bg-zinc-50 dark:bg-[#111111]",children:[(0,n.jsx)("div",{className:"cursor-help inline-block whitespace-nowrap",onMouseEnter:e=>ep({index:-1,rect:e.currentTarget.getBoundingClientRect()}),onMouseLeave:()=>ep(null),children:"총점"}),(0,n.jsx)("div",{className:"absolute right-0 top-0 bottom-0 w-[1px] bg-zinc-300 dark:bg-white/20"}),ta("total","총점")]}),(0,n.jsxs)("th",{className:"relative text-center text-xs font-medium text-black dark:text-white py-3 px-2 bg-zinc-50 dark:bg-[#111111]",children:["태도 및 특성",ta("attitude","태도 및 특성")]}),Array.from({length:eg}).map((e,t)=>{var r;return(0,n.jsxs)("th",{className:"group relative text-center text-xs font-medium text-black dark:text-white py-3 px-2 bg-zinc-50 dark:bg-[#111111]",children:[B===t?(0,n.jsx)(eu,{autoFocus:!0,value:null!==(r=tc[t])&&void 0!==r?r:"",onChange:e=>re(t,e.target.value),onBlur:()=>{var e;P(null),re(t,null!==(e=tc[t])&&void 0!==e?e:"",!0)},onKeyDown:e=>{if("Enter"===e.key){var r;P(null),re(t,null!==(r=tc[t])&&void 0!==r?r:"",!0)}},className:"bg-[#18181b] border border-blue-500/30 rounded-none px-1 py-0.5 text-center text-white text-xs",fontSizeClass:"text-xs"}):(0,n.jsx)("div",{className:"flex items-center justify-center gap-1 cursor-pointer hover:text-blue-400 transition-colors whitespace-nowrap",role:"button",tabIndex:0,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),P(t))},onClick:()=>P(t),children:(0,n.jsx)("span",{children:tc[t]||"자료 ".concat(t+1)})}),ta("seteuk-".concat(t),tc[t]||"자료 ".concat(t+1)),eg>0&&(0,n.jsx)("button",{"aria-label":"열 삭제",onClick:()=>eb({kind:"seteuk",index:t,name:tc[t]||"자료 ".concat(t+1)}),className:"absolute right-0 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 p-1 text-red-500/50 hover:text-red-500",children:(0,n.jsx)(o.Z,{size:10})})]},"s-".concat(t))}),(0,n.jsx)("th",{ref:e3,className:"text-center text-xs font-medium text-black dark:text-white py-3 px-2 min-w-[480px] w-full bg-zinc-50 dark:bg-[#111111]",children:(0,n.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,n.jsx)("span",{children:"세특 초안"}),(0,n.jsxs)("div",{className:"relative inline-flex items-center text-blue-400",children:[(0,n.jsxs)("select",{value:ek,onChange:e=>ew(e.target.value),className:"appearance-none bg-transparent border-none pr-3.5 py-1 text-[11px] font-bold text-blue-400 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 cursor-pointer text-center",children:[(0,n.jsx)("option",{value:"1500",children:"1500byte"}),(0,n.jsx)("option",{value:"750",children:"750byte"})]}),(0,n.jsx)(i.Z,{size:10,className:"absolute right-0 top-1/2 -translate-y-1/2 pointer-events-none opacity-60"})]})]})})]})]}),(0,n.jsx)("tbody",{style:{"--cell-max-h":"".concat(e5,"px")},children:tw.map((e,t)=>{let r=t2(e.id),s=t9(e.id),a=ej.has(e.id),i=t8(r.sources),l=4+R+1,c=4+R+1+1+eg,o=rm(t);return(0,n.jsxs)("tr",{"data-row":t,className:"hover:bg-zinc-50 dark:hover:bg-[#111] group",children:[(0,n.jsxs)("td",{onMouseDown:e=>rd(e,t,0),onMouseEnter:e=>ru(e,t,0),style:rp(t,0),className:(0,y.cn)("p-0 text-center text-sm text-black dark:text-white sticky left-0 z-10 bg-[#f8f8f4] dark:bg-[#0D0D0D] group-hover:bg-zinc-50 dark:group-hover:bg-[#111] select-none",t<tw.length-1&&"border-b border-zinc-300 dark:border-white/20",rh(t,0)&&"bg-blue-500/20 z-20"),children:[(0,n.jsx)("div",{className:"py-1.5 px-2 min-h-[34px] flex items-center justify-center",children:e.grade||"-"}),(0,n.jsx)("div",{className:"absolute right-0 top-0 bottom-0 w-[1px] bg-zinc-200 dark:bg-white/10"})]}),(0,n.jsxs)("td",{onMouseDown:e=>rd(e,t,1),onMouseEnter:e=>ru(e,t,1),style:{...rp(t,1),left:te},className:(0,y.cn)("p-0 text-center text-sm text-black dark:text-white sticky z-10 bg-[#f8f8f4] dark:bg-[#0D0D0D] group-hover:bg-zinc-50 dark:group-hover:bg-[#111] select-none",t<tw.length-1&&"border-b border-zinc-300 dark:border-white/20",rh(t,1)&&"bg-blue-500/20 z-20"),children:[(0,n.jsx)("div",{className:"py-1.5 px-2 min-h-[34px] flex items-center justify-center",children:e.classNum||"-"}),(0,n.jsx)("div",{className:"absolute right-0 top-0 bottom-0 w-[1px] bg-zinc-200 dark:bg-white/10"})]}),(0,n.jsxs)("td",{onMouseDown:e=>rd(e,t,2),onMouseEnter:e=>ru(e,t,2),style:{...rp(t,2),left:tt},className:(0,y.cn)("p-0 text-center text-sm text-black dark:text-white sticky z-10 bg-[#f8f8f4] dark:bg-[#0D0D0D] group-hover:bg-zinc-50 dark:group-hover:bg-[#111] select-none",t<tw.length-1&&"border-b border-zinc-300 dark:border-white/20",rh(t,2)&&"bg-blue-500/20 z-20"),children:[(0,n.jsx)("div",{className:"py-1.5 px-2 min-h-[34px] flex items-center justify-center",children:e.number}),(0,n.jsx)("div",{className:"absolute right-0 top-0 bottom-0 w-[1px] bg-zinc-200 dark:bg-white/10"})]}),(0,n.jsxs)("td",{onMouseDown:e=>rd(e,t,3),onMouseEnter:e=>ru(e,t,3),style:{...rp(t,3),left:tr},className:(0,y.cn)("relative p-0 text-center text-sm text-black dark:text-white sticky z-10 bg-[#f8f8f4] dark:bg-[#0D0D0D] group-hover:bg-zinc-50 dark:group-hover:bg-[#111] whitespace-nowrap select-none",t<tw.length-1&&"border-b border-zinc-300 dark:border-white/20",rh(t,3)&&"bg-blue-500/20 z-20"),children:[(0,n.jsx)("div",{className:"py-1.5 px-2 min-h-[34px] flex items-center justify-center overflow-hidden",children:(0,n.jsx)("span",{className:"truncate",children:e.name})}),(0,n.jsx)("div",{className:"absolute right-0 top-0 bottom-0 w-[1px] bg-zinc-300 dark:bg-white/20"})]}),Array.from({length:R}).map((s,a)=>{let i=4+a,l=rf(t,i),c=rk(t,i);return(0,n.jsx)("td",{onMouseDown:e=>rd(e,t,i),onMouseEnter:e=>ru(e,t,i),onDoubleClick:()=>rz(t,i),style:rp(t,i),className:(0,y.cn)("p-0 text-center border-r border-zinc-300 dark:border-white/20",t<tw.length-1&&"border-b",rh(t,i)&&"bg-blue-500/20"),children:c?(0,n.jsx)(eu,{id:"eval-input-".concat(t,"-").concat(a),"data-grid-editor":"true",type:"text",value:r.sources[a]||"",onChange:r=>{rC(t,i),t5(e.id,a,r.target.value)},onBeforeInput:()=>rC(t,i),onCompositionStart:()=>rC(t,i),onMouseUp:e=>rN(e,t,i),onKeyDown:e=>
1rL(e,t,i,!1),onBlur:rI,className:(0,y.cn)("bg-transparent rounded-none px-1 py-1.5 text-center text-black dark:text-white placeholder:text-black/10 dark:placeholder:text-white/10",!l&&"caret-transparent selection:bg-transparent"),fontSizeClass:"text-sm"}):(0,n.jsx)("div",{className:"px-1 py-1.5 min-h-[34px] flex items-center justify-center text-sm text-black dark:text-white cursor-default whitespace-nowrap",children:r.sources[a]||""})},"p-cell-".concat(a))}),(0,n.jsxs)("td",{onMouseDown:e=>rd(e,t,4+R),onMouseEnter:e=>ru(e,t,4+R),style:rp(t,4+R),className:(0,y.cn)("relative p-0 text-center text-sm font-medium text-black dark:text-white select-none",t<tw.length-1&&"border-b border-zinc-300 dark:border-white/20",rh(t,4+R)&&"bg-blue-500/20"),children:[(0,n.jsx)("div",{className:(0,y.cn)("py-1.5 px-2 min-h-[34px] flex items-center justify-center",i>100&&"text-red-500"),children:i||"-"}),(0,n.jsx)("div",{className:"absolute right-0 top-0 bottom-0 w-[1px] bg-zinc-300 dark:bg-white/20"})]}),(0,n.jsx)("td",{onMouseDown:e=>rd(e,t,l),onMouseEnter:e=>ru(e,t,l),onDoubleClick:()=>rz(t,l),style:rp(t,l),className:(0,y.cn)("p-0 border-r border-zinc-300 dark:border-white/20 focus-within:bg-black/5 dark:focus-within:bg-white/5 align-top",t<tw.length-1&&"border-b",rh(t,l)&&"bg-blue-500/20"),children:(0,n.jsx)("div",{className:"w-full min-h-[34px]",children:rk(t,l)?(0,n.jsx)("textarea",{id:"eval-input-".concat(t,"-").concat(R),"data-grid-editor":"true",rows:1,defaultValue:s.attitude,onChange:r=>{rC(t,l),t6(e.id,"attitude",r.target.value),rs(r)},onBeforeInput:()=>rC(t,l),onCompositionStart:()=>rC(t,l),onMouseUp:e=>rN(e,t,l),onFocus:rn,onBlur:rS,onKeyDown:e=>rL(e,t,l,!0),className:(0,y.cn)("w-full bg-transparent border border-transparent rounded-none px-2 py-1.5 text-sm text-black dark:text-white focus:outline-none resize-none overflow-hidden min-h-[34px] block",!rf(t,l)&&"caret-transparent selection:bg-transparent")},"attitude-".concat(e.id,"-").concat(eJ)):(0,n.jsx)("div",{className:"px-2 py-1.5 text-sm text-black dark:text-white whitespace-pre-wrap break-words cursor-default pointer-events-none overflow-hidden",style:{maxHeight:o?"var(--cell-max-h)":"84px"},children:s.attitude})})}),Array.from({length:eg}).map((r,a)=>{let i=4+R+2+a,l=rf(t,i),c=rk(t,i);return(0,n.jsx)("td",{onMouseDown:e=>rd(e,t,i),onMouseEnter:e=>ru(e,t,i),onDoubleClick:()=>rz(t,i),style:rp(t,i),className:(0,y.cn)("p-0 border-r border-zinc-300 dark:border-white/20 focus-within:bg-black/5 dark:focus-within:bg-white/5 align-top",t<tw.length-1&&"border-b",rh(t,i)&&"bg-blue-500/20"),children:(0,n.jsx)("div",{className:"w-full min-h-[34px]",children:c?(0,n.jsx)("textarea",{id:"eval-input-".concat(t,"-").concat(R+1+a),"data-grid-editor":"true",rows:1,defaultValue:s.sources[a]||"",onChange:r=>{rC(t,i),t7(e.id,a,r.target.value),rs(r)},onBeforeInput:()=>rC(t,i),onCompositionStart:()=>rC(t,i),onMouseUp:e=>rN(e,t,i),onFocus:rn,onBlur:rS,onKeyDown:e=>rL(e,t,i,!0),className:(0,y.cn)("w-full bg-transparent border border-transparent rounded-none px-2 py-1.5 text-sm text-black dark:text-white focus:outline-none resize-none overflow-hidden min-h-[34px] block",!l&&"caret-transparent selection:bg-transparent")},"source-".concat(e.id,"-").concat(a,"-").concat(eJ)):(0,n.jsx)("div",{className:"px-2 py-1.5 text-sm text-black dark:text-white whitespace-pre-wrap break-words cursor-default pointer-events-none overflow-hidden",style:{maxHeight:o?"var(--cell-max-h)":"84px"},children:s.sources[a]||""})})},"s-cell-".concat(a))}),(0,n.jsx)("td",{onMouseDown:e=>rd(e,t,c),onMouseEnter:e=>ru(e,t,c),onDoubleClick:()=>rz(t,c),style:rp(t,c),className:(0,y.cn)("p-0 focus-within:bg-black/5 dark:focus-within:bg-white/5",t<tw.length-1&&"border-b border-zinc-300 dark:border-white/20",rh(t,c)&&"bg-blue-500/20"),children:(0,n.jsxs)("div",{className:"relative group/draft min-w-[480px] w-full min-h-[34px] pb-[22px]",children:[rk(t,c)?(0,n.jsx)("textarea",{id:"eval-input-".concat(t,"-").concat(R+1+eg),"data-grid-editor":"true",rows:1,defaultValue:s.draft,onChange:r=>{rC(t,c),t6(e.id,"draft",r.target.value),rs(r)},onBeforeInput:()=>rC(t,c),onCompositionStart:()=>rC(t,c),onMouseUp:e=>rN(e,t,c),onFocus:rn,onBlur:rS,onKeyDown:e=>rL(e,t,c,!0),className:(0,y.cn)("w-full bg-transparent border border-transparent roun
1ded-none px-2 py-1.5 text-sm text-black dark:text-white focus:outline-none resize-none overflow-hidden min-h-[34px] block",rf(t,c)?"caret-black dark:caret-white":"caret-transparent selection:bg-transparent")},"draft-".concat(e.id,"-").concat(eJ)):a?(0,n.jsxs)("div",{className:"px-2 py-1.5 text-sm text-zinc-400 dark:text-zinc-500 italic flex items-center gap-1.5 overflow-hidden",style:{maxHeight:o?"var(--cell-max-h)":"62px"},children:[(0,n.jsx)(d.Z,{size:12,className:"animate-spin shrink-0"}),"AI 생성 중..."]}):(0,n.jsx)("div",{className:"px-2 py-1.5 text-sm text-black dark:text-white whitespace-pre-wrap break-words cursor-default pointer-events-none overflow-hidden",style:{maxHeight:o?"var(--cell-max-h)":"62px"},children:s.draft}),(0,n.jsxs)("div",{className:(0,y.cn)("absolute bottom-1 right-2 text-[9px] font-mono pointer-events-none",(0,y.CQ)(s.draft)>("1500"===ek?1500:750)?"text-red-400":"text-green-500"),children:[(0,y.CQ)(s.draft)," / ","1500"===ek?"1500":"750"]})]})})]},e.id)})})]}):(0,n.jsx)("div",{className:"h-full flex flex-col items-center justify-center text-gray-400",children:(0,n.jsx)("p",{className:"text-sm",children:"학생 데이터를 불러오는 중..."})}):(0,n.jsx)("div",{className:"h-full flex items-center justify-center p-8",children:(0,n.jsx)($.Z,{size:"lg",title:"등록된 교실이 없습니다",description:"교과 수업을 진행할 교실 또는 학급을 먼저 등록해 주세요.",action:(0,n.jsx)("button",{onClick:()=>S("student-list",void 0,{autoAddClass:!0}),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 cursor-pointer",children:"교실 등록하기"})})})}),e$&&(0,n.jsx)("div",{className:"pointer-events-none fixed bottom-[calc(1.5rem+env(safe-area-inset-bottom,0px))] left-1/2 -translate-x-1/2 z-[9999] rounded-lg border border-white/15 bg-zinc-800 px-4 py-2 text-sm font-medium text-white shadow-xl ring-1 ring-black/20 animate-in fade-in slide-in-from-bottom-2 duration-150",children:"복사됨"}),eh&&"undefined"!=typeof document&&(0,a.createPortal)((()=>{let e=eh.rect.bottom+180>window.innerHeight,t=e?eh.rect.top-8:eh.rect.bottom+8,r=eh.rect.left+eh.rect.width/2,s=Math.max(80,Math.min(window.innerWidth-70-10,r));return(0,n.jsx)("div",{className:"fixed z-[9999] pointer-events-none transition-opacity duration-150 animate-in fade-in",style:{to
1p:t,left:s,transform:e?"translate(-50%, -100%)":"translate(-50%, 0)"},children:(0,n.jsxs)("div",{className:"bg-[#18181b] border border-white/10 rounded-md shadow-xl p-2 text-xs text-zinc-300 min-w-[120px] relative",children:[(()=>{let e=eh.index,t=tw.reduce((t,r)=>{let n;let s=tN(r.id,{studentId:r.id,sources:Array(R).fill("")});if(-1===e){if(!s.sources.some(e=>""!==e))return t;n=t8(s.sources)}else{let r=s.sources[e];if(!r||""===r.trim()||isNaN(Number(r)))return t;n=parseFloat(r)}return isNaN(n)||(t[n]=(t[n]||0)+1),t},{}),r=Object.keys(t).map(Number).sort((e,t)=>t-e);if(0===r.length)return(0,n.jsx)("div",{className:"text-zinc-500 text-center",children:"데이터 없음"});let s=r.reduce((e,r)=>e+r*t[r],0),a=r.reduce((e,r)=>e+t[r],0),i=a>0?(s/a).toFixed(1):0;return(0,n.jsxs)("div",{className:"space-y-1",children:[r.map(e=>(0,n.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,n.jsxs)("span",{className:"font-medium text-white",children:[e,"점"]}),(0,n.jsxs)("span",{className:"text-zinc-500",children:[t[e],"명"]})]},e)),(0,n.jsxs)("div",{className:"pt-1 mt-1 border-t border-white/10 flex items-center justify-between gap-4",children:[(0,n.jsx)("span",{className:"font-medium text-[#007AFF]",children:"평균"}),(0,n.jsxs)("span",{className:"text-zinc-400",children:[i,"점"]})]})]})})(),(0,n.jsx)("div",{className:(0,y.cn)("absolute left-1/2 -translate-x-1/2 w-2 h-2 bg-[#18181b] rotate-45",e?"-bottom-1 border-r border-b border-white/10":"-top-1 border-l border-t border-white/10")})]})})})(),document.body),(0,n.jsx)(F,{open:eD.open,onClose:()=>eR({open:!1,invalidResults:[]}),invalidResults:eD.invalidResults,onProceed:()=>{let e=eD.pendingStudentId;eR({open:!1,invalidResults:[]}),e&&ra(e,!0)}}),C&&(0,n.jsx)(ee.Z,{isOpen:eM,onClose:()=>eI(!1),currentBalance:null!=eS?eS:0,onChargeComplete:e=>{eE(e),eI(!1)}}),eL&&(0,n.jsxs)("div",{className:"fixed inset-0 z-[200] flex items-center justify-center p-3 md:p-6 lg:p-8",children:[(0,n.jsx)("div",{className:"absolute inset-0 bg-black/40 backdrop-blur-[2px]",onClick:eC}),(0,n.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"AI 일괄 생성",onKeyDown:e=>{"Escape"===e.key&&eC()},className:"relative w-full max-w-[1600px] h-[94vh] bg-white dark:bg-[#1a1a1a] rounded-2xl shadow-2xl overflow-hidden flex flex-col animate-in fade-in slide-in-from-bottom-3 duration-200",children:(0,n.jsx)(H,{onClose:eC,students:tw,classId:E,targetRange:ek,getPerfRow:t2,getSeteukRow:t9,seteukSourceCount:eg,seteukSourceNames:tc,updateSeteukField:t6,updateSeteukSource:t7,setTargetRange:ew,creditBalance:eS,onCreditBalanceChange:eE,onInsufficientCredits:()=>eI(!0)})})]}),ef&&(0,n.jsxs)("div",{className:"fixed inset-0 z-[300] flex items-center justify-center p-4",children:[(0,n.jsx)("div",{className:"absolute inset-0 bg-black/40 backdrop-blur-[2px]",onClick:()=>eb(null)}),(0,n.jsxs)("div",{role:"dialog","aria-modal":"true",className:"relative w-full max-w-sm bg-white dark:bg-[#1a1a1a] rounded-2xl shadow-2xl p-5 animate-in fade-in zoom-in-95 duration-150",onKeyDown:e=>{"Escape"===e.key&&eb(null)},children:[(0,n.jsxs)("h3",{className:"text-base font-semibold text-black dark:text-white",children:["‘",ef.name,"’ 열을 삭제할까요?"]}),(0,n.jsx)("p",{className:"mt-2 text-sm leading-relaxed text-zinc-600 dark:text-zinc-400",children:"지운 뒤에는 되돌릴 수 없습니다."}),(0,n.jsxs)("div",{className:"mt-5 flex justify-end gap-2",children:[(0,n.jsx)("button",{type:"button",autoFocus:!0,onClick:()=>eb(null),className:"px-3.5 py-2 text-sm font-medium rounded-lg text-zinc-700 dark:text-zinc-300 bg-zinc-100 dark:bg-white/10 hover:bg-zinc-200 dark:hover:bg-white/20 transition-colors",children:"취소"}),(0,n.jsx)("button",{type:"button",onClick:()=>{"perf"===ef.kind?t3(ef.index):rt(ef.index),eb(null)},className:"px-3.5 py-2 text-sm font-semibold rounded-lg text-white bg-red-600 hover:bg-red-700 transition-colors",children:"삭제"})]})]})]})]})]})}},13376:function(e,t,r){r.d(t,{dp:function(){return s}});let n=[];function s(e){e&&(n.push(e),n.length>100&&n.shift())}},9235:function(e,t,r){r.d(t,{C:function(){return n}});function n(e){if(!e)return 0;let t=e.replace(/\r?\n/g,"\r\n"),r=0;for(let e=0;e<t.length;e++)r+=t.charCodeAt(e)>255?2:1;let n=t.length;return(r-n)*2+n}},82374:function(e,t,r){r.d(t,{H:function(){return n}});let n=!0},7888:function(e,t,r){r.d(t,{q:function(){return n}});function n(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"요청을 처리하지 못했습니다. 잠시 후 다시 시도해 주세요.",r=e instanceof Error?e.message:String(null!=e?e:""),n=r.toLowerCase();return n.trim()?/[가-힣]/.test(r)&&!/error|exception|prisma|econn|timeout|undefined|null|\bp\d{4}\b|stack|<|\bat\s/i.test(r)?r:n.includes("unauthorized")||n.includes("unauthenticated")||n.includes("로그인 세션")?"로그인이 필요하거나 세션이 만료되었습니다. 페이지를 새로고침한 뒤 다시 시도해 주세요.":n.includes("permission denied")||n.includes("forbidden")||n.includes("access denied")||n.includes(" 403")?"이 작업을 수행할 권한이 없습니다.":n.includes("not found")||n.includes("no such")||n.includes("does not exist")?"대상을 찾을 수 없습니다. 목록을 새로고침한 뒤 다시 시도해 주세요.":n.includes("transaction")&&(n.includes("closed")||n.includes("timeout")||n.includes("aborted")||n.includes("expired"))?"한 번에 처리할 양이 많아 시간이 ì´
1ˆê³¼ë˜ì—ˆìŠµë‹ˆë‹¤. 나눠서 다시 시도해 주세요.":n.includes("econnreset")||n.includes("econnrefused")||n.includes("fetch failed")||n.includes("socket hang up")||n.includes("enotfound")||n.includes("network")?"서버 연결이 불안정합니다. 잠시 후 다시 시도해 주세요.":n.includes("timeout")||n.includes("timed out")||n.includes("etimedout")?"서버 응답 시간이 초과되었습니다. 잠시 후 다시 시도해 주세요.":n.includes("unique constraint")||n.includes("p2002")||n.includes("duplicate key")?"이미 등록되어 있는 항목입니다.":n.includes("no file provided")||n.includes("file provided")?"파일이 첨부되지 않았습니다. 파일을 선택한 뒤 다시 시도해 주세요.":n.includes("prisma")||/\bp\d{4}\b/.test(n)||n.includes("database")||n.includes("column ")||n.includes("relation ")?"데이터를 저장하는 중 문제가 발생했습니다. 잠시 후 다시 시도해 주세요.":t:t}},25450:function(e,t,r){r.d(t,{Fk:function(){return s}});var n=r(93448);function s(e){for(var t=arguments.length,r=Array(t>1?t-1:0),s=1;s<t;s++)r[s-1]=arguments[s];return(0,n.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",...r)}},52345:function(e,t,r){r.d(t,{J:function(){return i}});var n=r(47435),s=r(4662),a=r(2265);function i(){n.O.current||(0,s.Ad)();let[e]=(0,a.useState)(n.n.current);return e}}}]);

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