PageSourceSearch

https://naemo.ai/_next/static/chunks/8390-0c3b1abc11e35dda.js

js naemo.ai collected 2026-09-24 14:30:13 UTC 38,264 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8390],{8390:function(e,t,n){n.d(t,{V:function(){return E}});var l=n(57437),r=n(2265),a=n(18930),i=n(51817),s=n(73247),c=n(76858),o=n(92451),d=n(45007),u=n(93448),x=n(84519),m=n(73369),h=n(4908),p=n(70809),f=n(60850),b=n(83008),g=n(67920),v=n(74791);function z(e){let t=e.toLowerCase();return/\.(xlsx|xls|xlsm|csv)$/.test(t)?"excel":/\.hwpx$/.test(t)?"hwpx":/\.(txt|tsv)$/.test(t)?"text":"unknown"}async function k(e){let t=await Promise.all([n.e(1425),n.e(6919)]).then(n.bind(n,2093)),l=t.read(new Uint8Array(e),{type:"array"}),r=[];for(let e of l.SheetNames.slice(0,20)){let n=l.Sheets[e];if(!n)continue;let a=t.utils.sheet_to_csv(n,{FS:"	",blankrows:!1});a.trim()&&r.push("[시트: ".concat(e,"]\n").concat(a))}return r.join("\n\n")}async function N(e){let t=(await Promise.all([n.e(2957),n.e(7635)]).then(n.t.bind(n,57635,23))).default,l=await t.loadAsync(e),r=Object.keys(l.files).filter(e=>/Contents\/section\d*\.xml$/i.test(e)).sort();if(0===r.length)throw Error("hwpx 안에서 본문을 찾지 못했습니다.");let a=[];for(let e of r){let t=await l.files[e].async("string");a.push(t.replace(/<(?:\w+:)?linesegarray[\s\S]*?<\/(?:\w+:)?linesegarray>/g,"").replace(/<\/(?:\w+:)?p>\s*<\/(?:\w+:)?tc>/g,"	").replace(/<\/(?:\w+:)?tc>/g,"	").replace(/<\/(?:\w+:)?tr>/g,"\n").replace(/<\/(?:\w+:)?p>/g,"\n").replace(/<[^>]+>/g,"").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&").split("\n").map(e=>e.replace(/ {2,}/g,"	").replace(/\t+/g,"	").replace(/^\t|\t$/g,"").trim()).filter(e=>e.length>0).join("\n"))}return a.join("\n")}async function w(e){let t;let n=z(e.name),l=await e.arrayBuffer();switch(n){case"excel":t=await k(l);break;case"hwpx":t=await N(l);break;case"text":t=new TextDecoder("utf-8").decode(l);break;default:throw Error("'".concat(e.name,"': 엑셀(.xlsx, .xls, .csv) 또는 한글(.hwpx) 파일ì
1„ 올려주세요."))}let r=t.trim();if(!r)throw Error("'".concat(e.name,"': 파일에서 글자를 찾지 못했습니다."));return r}async function j(e){if(!e.length)throw Error("선택된 파일이 없습니다.");let t=[];for(let n of e){let e=await w(n);t.push("[파일: ".concat(n.name,"]\n").concat(e))}return t.join("\n\n---\n\n").trim().slice(0,6e4)}var y=n(9244),C=n(15563);let S=0,I=()=>String(++S);function _(e){let{children:t,onClick:n,disabled:r=!1,className:a=""}=e;return(0,l.jsx)("button",{onClick:n,disabled:r,className:(0,u.cn)("wizard-primary inline-flex items-center gap-2 px-7 py-2.5 rounded-xl text-[14px] font-bold transition-colors duration-150",a),children:t})}function E(e){var t,n,k,N,w,S,E,A,D,T,Z,M,P,$,L,R,F,H,X,O,B,Q,Y,U,q,G,V,W;let{onClose:J,onComplete:K,previewSeed:ee}=e,et=!!ee,[en]=(0,r.useState)(()=>ee?null:(0,C.Ys)()),[el,er]=(0,r.useState)(null!==(n=null==ee?void 0:ee.step)&&void 0!==n?n:en?(0,C.QY)(en):1),[ea,ei]=(0,r.useState)(()=>{var e;return(null!==(e=null==ee?void 0:ee.roster)&&void 0!==e?e:[]).map(e=>({...e,_id:I()}))}),[es,ec]=(0,r.useState)(null!==(k=null==ee?void 0:ee.uploadError)&&void 0!==k?k:null),[eo,ed]=(0,r.useState)(null!==(N=null==ee?void 0:ee.isDragging)&&void 0!==N&&N),[eu,ex]=(0,r.useState)(null!==(w=null==ee?void 0:ee.isParsing)&&void 0!==w&&w),[em,eh]=(0,r.useState)(null!==(S=null==ee?void 0:ee.usedAi)&&void 0!==S&&S),[ep,ef]=(0,r.useState)(null!==(E=null==ee?void 0:ee.isSaving)&&void 0!==E&&E),[eb,eg]=(0,r.useState)(null!==(A=null==ee?void 0:ee.saveError)&&void 0!==A?A:null),[ev,ez]=(0,r.useState)(null!==(T=null!==(D=null==ee?void 0:ee.savedCount)&&void 0!==D?D:null==en?void 0:en.savedCount)&&void 0!==T?T:0),[ek,eN]=(0,r.useState)(null!==(M=null!==(Z=null==ee?void 0:ee.gradeInput)&&void 0!==Z?Z:null==en?void 0:en.gradeInput)&&void 0!==M?M:""),[ew,ej]=(0,r.useState)(null!==($=null!==(P=null==ee?void 0:ee.classInput)&&void 0!==P?P:null==en?void 0:en.classInput)&&void 0!==$?$:""),[ey,eC]=(0,r.useState)(null===(R=null!==(L=null==ee?void 0:ee.isHomeroom)&&void 0!==L?L:null==en?void 0:en.isHomeroom)||void 0===R||R),[eS,eI]=(0,r.useState)(!1),[e_,eE]=(0,r.useState)(null!==(F=null==en?void 0:en.hasSubjectAdded)&&void 0!==F&&F),eA=!ey||eS,[eD,eT]=(0,r.useState)(""),[eZ,eM]=(0,r.useState)("all"),eP=(0,r.useRef)(null),e$=(0,r.useRef)(null),{bulkCreateStudents:eL}=(0,m.N)(),{reloadStudents:eR,addClass:eF}=(0,h.AF)(),{openSettings:eH}=(0,p.Y)(),eX=(0,g.XC)(),[eO,eB]=(0,r.useState)(null!==(H=null==ee?void 0:ee.neisSchool)&&void 0!==H?H:null),eQ=(0,r.useRef)(!!((null==ee?void 0:ee.schoolQuery)||(null==ee?void 0:ee.neisSchool))),[eY,eU]=(0,r.useState)(null!==(X=null==ee?void 0:ee.schoolQuery)&&void 0!==X?X:""),[eq,eG]=(0,r.useState)(null!==(O=null==ee?void 0:ee.schoolResults)&&void 0!==O?O:[]),[eV,eW]=(0,r.useState)(null!==(B=null==ee?void 0:ee.isSearchingSchool)&&void 0!==B&&B),[eJ,eK]=(0,r.useState)(null!==(Q=null==ee?void 0:ee.isLoadingSavedSchool)&&void 0!==Q&&Q),[e0,e1]=(0,r.useState)(null!==(Y=null==ee?void 0:ee.preview)&&void 0!==Y?Y:null),[e2,e5]=(0,r.useState)(new Set),[e3,e4]=(0,r.useState)(null!==(U=null==ee?void 0:ee.isPreviewing)&&void 0!==U&&U),[e9,e8]=(0,r.useState)(null!==(q=null==ee?void 0:ee.isImporting)&&void 0!==q&&q),[e7,e6]=(0,r.useState)(null!==(G=null==ee?void 0:ee.scheduleError)&&void 0!==G?G:null),[te,tt]=(0,r.useState)(null!==(V=null==ee?void 0:ee.importedCount)&&void 0!==V?V:null),tn=(0,r.useRef)(null),tl=(0,r.useCallback)(e=>{let t=!eA&&ek?parseInt(ek):void 0,n=!eA&&ew?parseInt(ew):void 0;ei(e.map(e=>{var l,r;return{number:e.number,name:e.name,grade:null!==(l=e.grade)&&void 0!==l?l:t,classNum:null!==(r=e.classNum)&&void 0!==r?r:n,className:"className"in e&&e.className?e.className:void 0,_id:I()}}).sort((e,t)=>{var n,l;let r=(null!==(n=e.className)&&void 0!==n?n:"").localeCompare(null!==(l=t.className)&&void 0!==l?l:"","ko");if(0!==r)return r;let a=(Number(e.grade)||0)-(Number(t.grade)||0);if(0!==a)return a;let i=(Number(e.classNum)||0)-(Number(t.classNum)||0);return 0!==i?i:(Number(e.number)||0)-(Number(t.number)||0)})),eM("all"),er(4)},[eA,ek,ew]),tr=(0,r.useCallback)(async e=>{var t,n,l;if(!e.length)return;let r=e[0];if(eT(1===e.length?r.name:"".concat(r.name," 외 ").concat(e.length-1,"개")),et){tl((null!==(t=null==ee?void 0:ee.roster)&&void 0!==t?t:[]).filter(e=>"number"==typeof e.number&&e.name.trim()).map(e=>({number:e.number,name:e.name,grade:e.grade,classNum:e.classNum,className:e.className})));return}ex(!0),ec(null),eh(!1);try{if(1===e.length&&"excel"===z(r.name))try{let e=await (0,v.DX)(r);if(e.length>0){tl(e);return}}catch(e){}let t=await j(e),a=await (0,b.X)("parseRosterWithAI",{text:t,...!eA&&ek?{fallbackGrade:parseInt(ek)}:{},...!eA&&ew?{fallbackClassNum:parseInt(ew)}:{}},eX,{timeout:9e4});if(!a.success||!(null===(l=a.data)||void 0===l?void 0:null===(n=l.students)||void 0===n?void 0:n.length)){ec(a.error||"명단을 인식하지 못했습니다.\n다른 파일로 시도하거나 직접 입력해주세요.");return}eh(!0),tl(a.data.students)}
1catch(e){ec(e instanceof Error&&e.message?e.message:"파일을 여는 중 문제가 발생했습니다. 엑셀(.xlsx) 또는 한글(.hwpx) 파일인지 확인해 주세요.")}finally{ex(!1)}},[tl,eX,eA,ek,ew,et,ee]),ta=(0,r.useCallback)(e=>{e.preventDefault(),ed(!1);let t=Array.from(e.dataTransfer.files);t.length>0&&tr(t)},[tr]),ti=(e,t,n)=>{ei(l=>l.map(l=>l._id===e?{...l,[t]:"number"===t?parseInt(n)||"":n}:l))},ts=(0,r.useCallback)(e=>{var t;let n=eA?"number"==typeof e.grade&&e.grade>0?e.grade:0:"number"==typeof e.grade&&e.grade>0?e.grade:ek?parseInt(ek):0,l=eA?"number"==typeof e.classNum&&e.classNum>0?e.classNum:0:"number"==typeof e.classNum&&e.classNum>0?e.classNum:ew?parseInt(ew):0;return{className:eA?(null===(t=e.className)||void 0===t?void 0:t.trim())||(n&&l?"".concat(n,"학년 ").concat(l,"반"):"교과 학급"):"담임 학급",grade:n,classNum:l}},[eA,ek,ew]),tc=(0,r.useCallback)(e=>ts(e).className,[ts]),to=(0,r.useCallback)(e=>{let{className:t,grade:n,classNum:l}=ts(e);return"".concat(t,"__g").concat(n,"__c").concat(l)},[ts]),td=(0,r.useMemo)(()=>{if(!eA)return["담임 학급"];let e=new Set;for(let t of ea){let n=tc(t);e.add(n)}return Array.from(e)},[eA,ea,tc]);(0,r.useEffect)(()=>{"all"===eZ||td.includes(eZ)||eM("all")},[td,eZ]);let tu=e=>ei(t=>t.filter(t=>t._id!==e)),tx=()=>{let e,t,n;if(eA&&"all"!==eZ){n=eZ;let l=ea.find(e=>tc(e)===eZ);l&&(e=l.grade,t=l.classNum)}else{let l=ea[ea.length-1];e=null==l?void 0:l.grade,t=null==l?void 0:l.classNum,n=null==l?void 0:l.className}ei(l=>[...l,{number:"",name:"",grade:e,classNum:t,className:n,_id:I()}]),setTimeout(()=>{e$.current&&e$.current.scrollTo({top:e$.current.scrollHeight,behavior:"smooth"})},50)},tm=(0,r.useMemo)(()=>{let e=new Map;for(let n of ea){var t;if("number"!=typeof n.number||0===n.number)continue;let l=to(n),r=e.get(l);r||(r=new Map,e.set(l,r)),r.set(n.number,(null!==(t=r.get(n.number))&&void 0!==t?t:0)+1)}let n=new Map;for(let[t,l]of Array.from(e.entries())){let e=new Set;for(let[t,n]of Array.from(l.entries()))n>1&&e.add(t);e.size>0&&n.set(t,e)}return n},[ea,to]),th=ea.filter(e=>""!==e.number&&e.name.trim()),tp=(0,r.useMemo)(()=>{let e=new Map;for(let t of td)e.set(t,{count:0,hasDup:!1});for(let l of ea){let r=tc(l),a=e.get(r);if(a){var t,n;""!==l.number&&l.name.trim()&&(a.count+=1);let e=to(l);"number"==typeof l.number&&0!==l.number&&null!==(n=null===(t=tm.get(e))||void 0===t?void 0:t.has(l.number))&&void 0!==n&&n&&(a.hasDup=!0)}}return e},[td,ea,tc,to,tm]),tf=(0,r.useMemo)(()=>eA&&"all"!==eZ?ea.filter(e=>tc(e)===eZ):ea,[eA,eZ,ea,tc]),tb=(0,r.useMemo)(()=>{if(!eA)return"48px";if(td.length<=1)return"52px";let e=0;for(let n of tf){var t;let l=(null===(t=n.className)||void 0===t?void 0:t.trim())||(n.classNum?"".concat(n.classNum,"반"):"");l.length>e&&(e=l.length)}if(0===e)for(let t of td)t.length>e&&(e=t.length);let n=Math.max(60,Math.min(170,13*e+22));return"".concat(n,"px")},[eA,td,tf]),tg=async()=>{if(0===th.length){eg("등록할 학생이 없습니다.");return}ef(!0),eg(null);try{if(eA){let t=new Map;for(let n of th){var e;let{className:l}=ts(n),r=null!==(e=t.get(l))&&void 0!==e?e:[];r.push(n),t.set(l,r)}for(let e of Array.from(t.keys()))try{await eF(e)}catch(e){}await eL.mutateAsync({students:th.map(e=>{let{className:t,grade:n,classNum:l}=ts(e);return{number:e.number,name:e.name.trim(),homeClassId:t,customClassIds:[t],grade:n,classNum:l}})})}else await eL.mutateAsync({students:th.map(e=>{let{grade:t,classNum:n}=ts(e);return{number:e.number,name:e.name.trim(),homeClassId:"담임 학급",customClassIds:[],grade:t,classNum:n}})});await eR(),ez(e=>e+th.length),eS&&(eE(!0),eI(!1)),er(5)}catch(e){eg(e instanceof Error?e.message:"저장 중 오류가 발생했습니다.")}finally{ef(!1)}},tv=(0,r.useCallback)(async e=>{e4(!0),e1(null),e6(null);try{let t=await (0,b.X)("previewAcademicScheduleImport",{schoolCode:e.schoolCode,officeCode:e.officeCode,schoolName:e.schoolName},eX,{timeout:9e4});t.success&&t.data?(e1(t.data),e5(new Set)):e6(t.error||"미리보기를 불러오지 못했어요.")}finally{e4(!1)}},[eX]),tz=(0,r.useCallback)(async e=>{eQ.current=!0,eB(e),eU(e.schoolName),eG([]),e1(null),e5(new Set),e6(null),tt(null),(0,f.fk)(e.schoolCode,e.officeCode).then(e=>{e.success&&window.dispatchEvent(new CustomEvent("school-settings-updated"))}).catch(()=>{}),await tv(e)},[tv]),tk=(0,r.useCallback)(async()=>
1{if(e0&&eO){e8(!0),e6(null);try{let e=await (0,b.X)("commitAcademicScheduleImport",{schoolCode:eO.schoolCode,officeCode:eO.officeCode,schoolName:eO.schoolName,startDate:e0.summary.startDate,endDate:e0.summary.endDate,excludedExternalIds:Array.from(e2)},eX,{timeout:9e4});e.success&&e.data?tt(e.data.createdCount):e6(e.error||"학사일정을 가져오지 못했어요.")}finally{e8(!1)}}},[e0,eO,e2,eX]),tN=e=>{e5(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};(0,r.useEffect)(()=>{if(2!==el)return;let e=!1;return eK(!0),(0,f.T9)().then(t=>{if(e||eQ.current)return;let n=t.success?t.data:null;if((null==n?void 0:n.neisSchoolCode)&&(null==n?void 0:n.neisOfficeCode)){let e={schoolName:n.schoolName||"저장된 학교",schoolCode:n.neisSchoolCode,officeCode:n.neisOfficeCode};eB(e),eU(e.schoolName),tv(e)}else setTimeout(()=>{var e;return null===(e=tn.current)||void 0===e?void 0:e.focus()},80)}).finally(()=>{e||eK(!1)}),()=>{e=!0}},[el,tv]),(0,r.useEffect)(()=>{if(2!==el)return;let e=eY.trim();if(e.length<2||eO&&e===eO.schoolName){eG([]);return}let t=setTimeout(async()=>{eW(!0);try{let t=await (0,f.R2)(e);eG(t.success?t.data:[])}finally{eW(!1)}},300);return()=>clearTimeout(t)},[el,eY,eO,et]),(0,r.useEffect)(()=>{if(et&&!(null==ee?void 0:ee.autoAdvance)||null===te)return;let e=setTimeout(()=>er(3),1200);return()=>clearTimeout(e)},[te,et,ee]),(0,r.useEffect)(()=>{!et&&((0,y.I)()||(0,C.Nx)({step:el,savedCount:ev,isHomeroom:ey,hasSubjectAdded:e_,gradeInput:ek,classInput:ew}))},[et,el,ev,ey,e_,ek,ew]);let tw=null!==te||ev>0,tj=null!==(W=null==e0?void 0:e0.items.filter(e=>"new"===e.status))&&void 0!==W?W:[],ty=tj.filter(e=>!e2.has(e.externalId)).length,tC=(()=>{switch(el){case 1:return{icon:"/lordicons/wizard/wand.json",stepLabel:"STEP 1 / 5",title:"어떤 역할이신가요?"};case 2:if(null!==te)return{icon:"/lordicons/wizard/check.json",stepLabel:"STEP 2 / 5",title:"학사일정 가져오기 완료!"};return{icon:"/lordicons/wizard/calendar.json",stepLabel:"STEP 2 / 5",title:"학사일정 불러오기"};case 3:if(eu)return{icon:"/lordicons/wizard/magnifier.json",stepLabel:eS?"교과 학급":"STEP 3 / 5",title:"명단 꼼꼼히\n분석 중..."};return{icon:"/lordicons/wizard/sheet.json",stepLabel:eS?"교과 학급":"STEP 3 / 5",title:eA?"쓰시던 교과 학급 명단을\n그대로 올려주세요":"쓰시던 담임 학생 명단을\n그대로 올려주세요"};case 4:return{icon:"/lordicons/wizard/students.json",stepLabel:eS?"교과 학급":"STEP 4 / 5",title:eA?"등록할 교과 명단이에요":"등록할 명단이에요"};case 5:return{icon:"/lordicons/wizard/balloons.json",stepLabel:"완료",title:ev>0?e_&&ey?"담임\xb7교과 ".concat(ev,"명 완료!"):!ey&&td.length>1?"".concat(td.length,"개 학급 \xb7 ").concat(ev,"명 완료!"):"".concat(ev,"명 등록 완료!"):"시작 준비 완료!"}}})();return(0,y.I)()?null:(0,l.jsx)(l.Fragment,{children:(0,l.jsx)("div",{className:"modal-viewport bg-black/40 backdrop-blur-sm flex items-center justify-center z-[110000] p-4",children:(0,l.jsxs)("div",{className:"bg-white dark:bg-zinc-900 rounded-2xl w-full max-w-[760px] h-[min(520px,calc(100dvh-2rem))] max-h-full flex flex-col sm:flex-row min-w-0 border border-zinc-200 dark:border-zinc-800 shadow-2xl overflow-hidden animate-in zoom-in-95 duration-200",children:[(0,l.jsxs)("div",{className:"hidden sm:flex w-[280px] shrink-0 bg-zinc-50/80 dark:bg-zinc-950/40 border-r border-zinc-100 dark:border-zinc-800/80 flex-col p-7 select-none",children:[(0,l.jsxs)("div",{className:"space-y-3",children:[(0,l.jsx)("span",{className:"inline-flex items-center px-2.5 py-1 rounded-full text-[11px] font-bold tracking-wider uppercase bg-zinc-200/60 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400",children:tC.stepLabel}),(0,l.jsx)("h2",{className:"text-[20px] font-black tracking-tight leading-snug text-zinc-900 dark:text-white whitespace-pre-line",children:tC.title})]}),(0,l.jsx)("div",{className:"flex-1 flex items-center justify-center",children:(0,l.jsx)("div",{className:"w-32 h-32 flex items-center justify-center relative",children:(0,l.jsx)(d.w,{src:tC.icon,size:116,originalColors:!0,trigger:"loop"},tC.icon)})})]}),(0,l.jsxs)("div",{className:"flex-1 flex flex-col min-w-0 bg-white dark:bg-zinc-900",children:[(0,l.jsxs)("div",{className:"flex-1 overflow-y-auto px-7 py-6",children:[1===el&&(0,l.jsxs)("div",{className:"flex flex-col gap-4 pt-1 animate-in fade-in duration-300",children:[(0,l.jsx)("div",{className:"space-y-2.5",children:[{label:"담임교사",value:!0},{label:"비담임교사",value:!1}].map(e=>{let{label:t,value:n}=e;return(0,l.jsxs)("button",{onClick:()=>eC(n),className:(0,u.cn)("w-full flex items-center gap-4 px-5 py-4 rounded-2xl border-2 text-left transition duration-150",ey===n?"border-zinc-900 dark:border-zinc-300 bg-white dark:bg-zinc-800":"border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800/30 hover:border-zinc-300 dark:hover:border-zinc-600"),children:[(0,l.jsx)("div",{className:(0,u.cn)("w-5 h-5 rounded-full border-2 flex items-center justify-center shrink-0 transition",ey===n?"border-zinc-900 dark:border-zinc-300":"border-zinc-300 dark:border-zinc-600"),children:ey===n&&(0,l.jsx)("div",{className:"w-2 h-2 rounded-full bg-zinc-900 dark:bg-zinc-300"})}),(0,l.jsx)("span",{className:(0,u.cn)("text-[15px] font-bold transition-colors",ey===n?"text-zinc-900 dark:text-white":"text-zinc-400 dark:text-zinc-500"),children:t})]},t)})}),(0,l.jsxs)("div",{className:(0,u.cn)("space-y-2.5 transition-opacity duration-200",ey?"opacity-100":"opacity-0 pointer-events-none"),children:[(0,l.jsx)("p",{className:"text-[13px] font-semibold text-zinc-500 dark:text-zinc-400",children:"담임 학급이 어디인가요?"}),(0,l.jsx)("div",{className:"flex gap-3",children:[{value:ek,onChange:eN,label:"학년",max:6},{value:ew,onChange:ej,label:"반",max:30}].map(e=>{let{value:t,onChange:n,label:r,max:a}=e;return(0,l.jsxs)("div",{className:"flex-1 relative",children:[(0,l.jsx)("input",{type:"number",value:t,onChange:e=>n(e.target.value),placeholder:"—",min:1,max:a,className:"w-full text-center text-4xl font-black rounded-2xl border-2 border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800/60 text-zinc-900 dark:text-white pt-4 pb-7 outline-none focus:border-zinc-900 dark:focus:border-zinc-400 transition-colors [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none placeholder:text-zinc-200 dark:placeholder:text-zinc-700"}),(0,l.jsx)("span",{className:"absolute bottom-2.5 inset-x-0 text-center text-[11px] font-bold tracking-widest uppercase text-zinc-400 dark:text-zinc-500 pointer-events-none",children:r})]},r)})})]})]}),3===el&&(0,l.jsxs)("div",{className:"h-full flex flex-col gap-3 pt-1 animate-in fade-in slide-in-from-right-4 duration-300",children:[(0,l.jsx)("div",{className:"shrink-0",children:(0,l.jsx)("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400 leading-relaxed",children:eA?"학교에서 쓰시던 교과 명렬표를 그대로 올려주시면 번호와 이름을 자동으로 찾아 드려요.":"학교에서 쓰시던 명렬표를 그대로 올려주시면 번호와 이름을 자동으로 찾아 드려요."})}),(0,l.jsx)("input",{type:"file",ref:eP,multiple:!0,accept:".xlsx,.xls,.xlsm,.csv,.hwpx",className:"hidden",onChange:e=>{let t=e.target.files?Array.from(e.target.files):[];t.length>0&&tr(t),e.target.value=""}}),(0,l.jsx)("div",{onClick:()=>{var e;return!eu&&(null===(e=eP.current)||void 0===e?void 0:e.click())},onDragOver:e=>{e.preventDefault(),eu||ed(!0)},onDragLeave:()=>ed(!1),onDrop:ta,className:(0,u.cn)("flex-1 min-h-[260px] rounded-2xl border-2 border-dashed flex flex-col items-center justify-center gap-3 cursor-pointer outline-none transition select-none p-6 text-center",eu?"border-zinc-200 dark:border-zinc-700 bg-zinc-50/60 dark:bg-zinc-800/30":eo?"border-zinc-900 dark:border-zinc-300 bg-zinc-100/70 dark:bg-zinc-800/60 scale-[0.99]":"border-zinc-200 dark:border-zinc-700/80 bg-zinc-50/30 dark:bg-zinc-800/10 hover:border-zinc-400 dark:hover:border-zinc-500 hover:bg-zinc-50/70 dark:hover:bg-zinc-800/30"),children:eu?(0,l.jsx)("div",{className:"py-4",children:(0,l.jsx)("p",{className:"text-[15px] font-bold text-zinc-800 dark:text-zinc-200",children:"명단을 읽는 중이에요"})}):(0,l.jsxs)("div",{className:"space-y-2 py-4",children:[(0,l.jsx)("p",{className:(0,u.cn)("text-[15px] font-bold transition-colors",eo?"text-zinc-900 dark:text-white":"text-zinc-800 dark:text-zinc-200"),children:"클릭하거나 파일ì
1„ 이곳에 끌어다 놓아주세요"}),(0,l.jsx)("p",{className:"text-[12px] text-zinc-400 dark:text-zinc-500",children:eA?"여러 파일 동시 업로드 가능 \xb7 엑셀 (.xlsx) \xb7 한글 (.hwpx)":"엑셀 (.xlsx, .xls, .csv) \xb7 한글 (.hwpx)"})]})}),es&&(0,l.jsx)(x.H,{className:"shrink-0",children:es})]}),4===el&&(0,l.jsxs)("div",{className:"h-full flex flex-col gap-2 pt-1 animate-in fade-in slide-in-from-right-4 duration-300",children:[(0,l.jsxs)("div",{className:"shrink-0 flex items-center justify-between gap-3 px-0.5 pb-0.5",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)("span",{className:"text-[13px] font-semibold text-zinc-900 dark:text-white",children:[eA?"인식된 ".concat(th.length,"명"):"인식된 담임 학생 ".concat(th.length,"명"),eA&&td.length>1&&(0,l.jsxs)("span",{className:"ml-1.5 text-[12px] text-zinc-400 dark:text-zinc-500 font-normal",children:["\xb7 ",td.length,"개 교과 학급"]})]}),tm.size>0&&(0,l.jsxs)("span",{className:"text-[12px] font-medium text-[#d97757]",children:["\xb7 ","all"===eZ||(null===(t=tp.get(eZ))||void 0===t?void 0:t.hasDup)?"중복된 번호가 있어요":"다른 학급에 ì
1¤‘복된 번호가 있어요"]})]}),(0,l.jsx)("button",{type:"button",onClick:tx,className:"text-[13px] font-medium text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300 transition-colors",children:"+ 학생 추가"})]}),eA&&td.length>1&&(0,l.jsxs)("div",{className:"shrink-0 flex items-center gap-1.5 overflow-x-auto py-1 scrollbar-none border-b border-zinc-100 dark:border-zinc-800/80",children:[(0,l.jsxs)("button",{type:"button",onClick:()=>eM("all"),className:(0,u.cn)("px-2.5 py-1 rounded-lg text-[12px] transition-all whitespace-nowrap shrink-0 flex items-center gap-1.5","all"===eZ?"wizard-tab-active bg-zinc-900 text-white dark:bg-zinc-100 dark:text-zinc-900 hover:bg-zinc-800 dark:hover:bg-zinc-200 font-semibold shadow-xs":"text-zinc-500 dark:text-zinc-400 hover:text-zinc-800 dark:hover:text-zinc-200 hover:bg-zinc-100 dark:hover:bg-zinc-800/60 font-medium"),children:[(0,l.jsx)("span",{children:"전체"}),(0,l.jsx)("span",{className:(0,u.cn)("text-[11px] tabular-nums","all"===eZ?"text-white dark:text-zinc-900 font-bold":"text-zinc-400 dark:text-zinc-500 font-medium"),children:th.length})]}),td.map(e=>{var t;let n=tp.get(e),r=eZ===e;return(0,l.jsxs)("button",{type:"button",onClick:()=>eM(e),className:(0,u.cn)("px-2.5 py-1 rounded-lg text-[12px] transition-all whitespace-nowrap shrink-0 flex items-center gap-1.5",r?"wizard-tab-active bg-zinc-900 text-white dark:bg-zinc-100 dark:text-zinc-900 hover:bg-zinc-800 dark:hover:bg-zinc-200 font-semibold shadow-xs":"text-zinc-500 dark:text-zinc-400 hover:text-zinc-800 dark:hover:text-zinc-200 hover:bg-zinc-100 dark:hover:bg-zinc-800/60 font-medium"),children:[(0,l.jsx)("span",{children:e}),(0,l.jsx)("span",{className:(0,u.cn)("text-[11px] tabular-nums",r?"text-white dark:text-zinc-900 font-bold":"text-zinc-400 dark:text-zinc-500 font-medium"),children:null!==(t=null==n?void 0:n.count)&&void 0!==t?t:0}),(null==n?void 0:n.hasDup)&&(0,l.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-[#d97757]",title:"중복된 번호가 있습니다"})]},e)})]}),(0,l.jsx)("div",{className:"flex-1 min-h-0 border-y border-zinc-200 dark:border-zinc-800 bg-transparent flex flex-col overflow-hidden",children:(0,l.jsx)("div",{ref:e$,className:"flex-1 min-h-0 overflow-y-auto",children:0===tf.length?(0,l.jsxs)("div",{className:"h-full flex flex-col items-center justify-center py-12 text-center",children:[(0,l.jsx)("p",{className:"text-[13px] text-zinc-400 dark:text-zinc-500",children:"all"===eZ?"등록된 학생이 없어요":"".concat(eZ,"에 등록된 학생이 없어요")}),(0,l.jsx)("button",{type:"button",onClick:tx,className:"mt-2 text-[12px] font-medium text-blue-600 dark:text-blue-400 hover:underline",children:"+ 학생 추가하기"})]}):(0,l.jsxs)("table",{className:"w-full table-fixed text-center border-collapse",children:[(0,l.jsxs)("colgroup",{children:[(0,l.jsx)("col",{style:{width:"44px"}}),(0,l.jsx)("col",{style:{width:tb}}),(0,l.jsx)("col",{style:{width:"56px"}}),(0,l.jsx)("col",{}),(0,l.jsx)("col",{style:{width:"36px"}})]}),(0,l.jsx)("thead",{className:"sticky top-0 bg-white/95 dark:bg-zinc-900/95 backdrop-blur-xs border-b border-zinc-100 dark:border-zinc-800 z-10 text-[11px] font-medium text-zinc-400 dark:text-zinc-500",children:(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{className:"py-2.5 text-center font-medium",children:"학년"}),(0,l.jsx)("th",{className:"py-2.5 text-center font-medium",children:eA&&td.length>1?"학급":"반"}),(0,l.jsx)("th",{className:"py-2.5 text-center font-medium",children:"번호"}),(0,l.jsx)("th",{className:"py-2.5 text-center font-medium",children:"이름"}),(0,l.jsx)("th",{className:"py-2.5 pr-2"})]})}),(0,l.jsx)("tbody",{className:"divide-y divide-zinc-100 dark:divide-zinc-800/60",children:tf.map(e=>{var t,n;let r=to(e),i="number"==typeof e.number&&0!==e.number&&null!==(n=null===(t=tm.get(r))||void 0===t?void 0:t.has(e.number))&&void 0!==n&&n,{grade:s,classNum:c,className:o}=ts(e),d=s>0?s:null,x=eA&&td.length>1?o:c>0?c:e.className||null;return(0,l.jsxs)("tr",{className:"group transition-colors h-10 hover:bg-zinc-50/60 dark:hover:bg-zinc-800/30",children:[(0,l.jsx)("td",{className:"py-1 text-center text-[13px] font-normal text-zinc-500 dark:text-zinc-400 tabular-nums",children:null!=d?d:"—"}),(0,l.jsx)("td",{className:"py-1 text-center text-[13px] font-normal text-zinc-500 dark:text-zinc-400 tabular-nums truncate px-1.5 whitespace-nowrap",title:String(null!=x?x:""),children:null!=x?x:"—"}),(0,l.jsx)("td",{className:"py-1 px-1 text-center",children:(0,l.jsx)("input",{type:"number",value:""===e.number?"":e.number,onChange:t=>ti(e._id,"number",t.target.value),placeholder:"—",className:(0,u.cn)("w-9 h-7 mx-auto text-center rounded-md text-[13px] tabular-nums outline-none transition","[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none",i?"text-[#d97757] font-semibold bg-[#d97757]/10 dark:bg-[#d97757]/15 ring-1 ring-[#d97757]/40":"bg-transparent font-medium text-zinc-800 dark:text-zinc-200 hover:bg-zinc-100/70 dark:hover:bg-zinc-800/60 focus:bg-white dark:focus:bg-zinc-800 focus:ring-1 focus:ring-zinc-400 dark:focus:ring-zinc-500")})}),(0,l.jsx)("td",{className:"py-1 px-2 text-center",children:(0,l.jsx)("input",{type:"text",value:e.name,onChange:t=>ti(e._id,"name",t.target.value),placeholder:"이름 입력",className:"w-full max-w-[220px] mx-auto h-7 px-2 text-center rounded-md text-[13px] font-medium text-zinc-900 dark:text-zinc-100 bg-transparent hover:bg-zinc-100/70 dark:hover:bg-zinc-800/60 focus:bg-white dark:focus:bg-zinc-800 focus:ring-1 focus:ring-zinc-400 dark:focus:ring-zinc-500 outline-none transition placeholder:text-zinc-300 dark:placeholder:text-zinc-600 placeholder:text-center"})}),(0,l.jsx)("td",{className:"py-1 pr-2 text-right",children:(0,l.jsx)("button",{type:"button","aria-label":"행 삭제",onClick:()=>tu(e._id),className:"w-7 h-7 inline-flex items-center justify-center rounded-md text-zinc-300 dark:text-zinc-500 hover:text-zinc-600 dark:hover:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition opacity-0 group-hover:opacity-100",children:(0,l.jsx)(a.Z,{size:13})})})]},e._id)})})]})})}),eb&&(0,l.jsx)(x.H,{className:"shrink-0",children:eb})]}),2===el&&(0,l.jsx)("div",{className:"h-full flex flex-col gap-3 pt-1 animate-in fade-in slide-in-from-right-4 duration-300",children:null!==te?(0,l.jsxs)("div",{className:"flex-1 flex flex-col items-center justify-center gap-3 animate-in fade-in zoom-in-95 duration-300 text-center py-8",children:[(0,l.jsxs)("p",{className:"text-[20px] font-black tracking-tight text-zinc-900 dark:text-white",children:["신규 ",te,"개 일정을 가져왔어요"]}),(0,l.jsxs)("div",{className:"flex items-center gap-2 text-zinc-400 dark:text-zinc-500 text-[12px] pt-2 font-medium",children:[(0,l.jsx)(i.Z,{className:"w-3.5 h-3.5 animate-spin"}),"다음 단계로 이동하는 중..."]})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"shrink-0 relative",children:[(0,l.jsx)(s.Z,{size:15,className:"absolute left-3.5 to
1p-1/2 -translate-y-1/2 text-zinc-400 pointer-events-none"}),(0,l.jsx)("input",{ref:tn,type:"text",value:eY,onChange:e=>{eQ.current=!0,eU(e.target.value),eB(null),e1(null),e5(new Set),e6(null)},placeholder:eJ?"저장된 학교를 확인하는 중...":"학교 이름을 입력하세요",className:"w-full pl-9 pr-9 py-2.5 rounded-xl border-2 border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800/60 text-[14px] text-zinc-900 dark:text-white placeholder:text-zinc-400 dark:placeholder:text-zinc-600 outline-none focus:border-zinc-900 dark:focus:border-zinc-400 transition-colors"}),(eV||eJ)&&(0,l.jsx)(i.Z,{size:13,className:"absolute right-3.5 top-1/2 -translate-y-1/2 text-zinc-400 animate-spin"})]}),eq.length>0&&!eO&&(0,l.jsx)("div",{className:"flex-1 min-h-0 max-h-[320px] rounded-2xl border border-zinc-200 dark:border-zinc-700 overflow-y-auto divide-y divide-zinc-100 dark:divide-zinc-800/80 animate-in fade-in slide-in-from-top-1 duration-200 shadow-xs",children:eq.map(e=>(0,l.jsxs)("button",{onMouseDown:t=>{t.preventDefault(),tz(e)},className:"w-full text-left px-4 py-3 hover:bg-zinc-50 dark:hover:bg-zinc-800/60 transition-colors group",children:[(0,l.jsx)("p",{className:"text-[13px] font-semibold text-zinc-900 dark:text-white",children:e.schoolName}),e.address&&(0,l.jsx)("p",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 mt-0.5 leading-normal",children:e.address})]},"".concat(e.officeCode,"-").concat(e.schoolCode)))}),eO&&(0,l.jsx)("div",{className:"flex-1 min-h-0 rounded-2xl border border-zinc-200 dark:border-zinc-700 overflow-hidden flex flex-col",children:e3?(0,l.jsxs)("div",{className:"flex-1 flex flex-col items-center justify-center gap-2",children:[(0,l.jsx)(i.Z,{className:"w-5 h-5 text-zinc-400 animate-spin"}),(0,l.jsx)("p",{className:"text-[12px] text-zinc-500 dark:text-zinc-400",children:"학사일정을 가져오는 중..."})]}):e0?(0,l.jsx)("div",{className:"flex-1 overflow-y-auto",children:0===tj.length?(0,l.jsx)("p",{className:"py-8 text-center text-[13px] text-zinc-500 dark:text-zinc-400",children:"이번 학기에 새로 가져올 일정이 없어요"}):tj.map(e=>{let t=e2.has(e.externalId);return(0,l.jsxs)("label",{className:"grid grid-cols-[5.5rem_minmax(0,1fr)_2rem] items-center gap-2 px-4 py-2 text-[13px] hover:bg-zinc-50 dark:hover:bg-zinc-800/30 cursor-pointer",children:[(0,l.jsxs)("span",{className:(0,u.cn)("text-[11px] text-zinc-500 dark:text-zinc-400 tabular-nums",t&&"opacity-40"),children:[e.date,e.endDate&&e.endDate!==e.date&&" ~".concat(e.endDate.slice(5))]}),(0,l.jsx)("span",{className:(0,u.cn)("truncate font-medium text-zinc-800 dark:text-zinc-200",t&&"opacity-40"),children:e.title}),(0,l.jsx)("input",{type:"checkbox",checked:!t,onChange:()=>tN(e.externalId),className:"justify-self-center h-4 w-4 rounded border-zinc-300 accent-zinc-900 dark:accent-white"})]},e.externalId)})}):(0,l.jsx)("div",{className:"flex-1 flex items-center justify-center",children:(0,l.jsx)("p",{className:"text-[13px] text-zinc-500 dark:text-zinc-400",children:"학교를 선택해 주세요"})})}),e7&&(0,l.jsx)(x.H,{className:"shrink-0",children:e7})]})}),5===el&&(0,l.jsxs)("div",{className:"flex flex-col gap-4 pt-1 animate-in fade-in zoom-in-95 duration-300",children:[(0,l.jsx)("div",{className:"space-y-1",children:(0,l.jsx)("p",{className:"text-[14px] font-medium text-zinc-600 dark:text-zinc-300 leading-relaxed",children:"선생님의 빠른 퇴근을 항상 응원합니다."})}),(0,l.jsxs)("div",{className:"w-full space-y-1.5",children:[(0,l.jsx)("p",{className:"text-[11px] font-bold tracking-widest uppercase text-zinc-400 dark:text-zinc-500 px-1 pb-0.5",children:"이런 것도 해보세요"}),[...ey&&!e_?[{label:"교과 학급 추가",desc:"담임 외 수업 반도 함께 관리해요",onClick:()=>{eI(!0),ei([]),eT(""),ec(null),eg(null),eM("all"),er(3)}}]:[{label:"교과 학급 더 추가하기",desc:"새로운 수업 반을 추가로 등록해요",onClick:()=>{eI(!0),ei([]),eT(""),ec(null),eg(null),eM("all"),er(3)}}],{label:"시간표 세팅",desc:"오늘 수업을 대시보드에서 바로 확인해요",onClick:()=>{K(),eH("timetable")}},{label:"대시보드 위젯 꾸미기",desc:"급식\xb7자리배치 등 위젯을 배치해요",onClick:()=>{K(),eH("dashboard-layout")}}].map(e=>{let{label:t,desc:n,onClick:r}=e;return(0,l.jsxs)("button",{onClick:r,className:"w-full flex items-center gap-2.5 px-4 py-2.5 rounded-xl bg-zinc-50 dark:bg-zinc-800/50 border border-zinc-100 dark:border-zinc-800 hover:bg-zinc-100 dark:hover:bg-zinc-800 hover:border-zinc-200 dark:hover:border-zinc-700 transition-colors text-left",children:[(0,l.jsx)(c.Z,{size:13,className:"text-zinc-400 dark:text-zinc-500 shrink-0"}),(0,l.jsxs)("div",{className:"flex items-center gap-2 min-w-0 overflow-hidden whitespace-nowrap",children:[(0,l.jsx)("span",{className:"text-[13px] font-semibold text-zinc-700 dark:text-zinc-300 shrink-0 whitespace-nowrap",children:t}),(0,l.jsx)("span",{className:"text-[12px] text-zinc-400 dark:text-zinc-500 truncate whitespace-nowrap",children:n})]})]},t)})]})]})]}),(0,l.jsx)("div",{className:"shrink-0 px-7 pt-2 pb-5 bg-white dark:bg-zinc-900 flex items-center justify-between",children:el<5?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("button",{onClick:tw?K:J,disabled:2===el&&null!==te,className:"text-[13px] font-medium text-zinc-400 dark:text-zinc-500 hover:text-zinc-700 dark:hover:text-zinc-300 transition-colors px-1 disabled:opacity-40",children:"나중에 할게요"}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[el>1&&!(2===el&&null!==te)&&(0,l.jsxs)("button",{onClick:()=>
1{if(eS){if(3===el){eI(!1),ei([]),eT(""),ec(null),eg(null),er(5);return}if(4===el){er(3);return}}er(e=>{let t=e-1;return 2===t&&tt(null),t})},className:"inline-flex items-center gap-1.5 px-3 py-2 rounded-xl text-[13px] font-semibold text-zinc-500 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-100 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:[(0,l.jsx)(o.Z,{size:14}),"이전"]}),1===el&&(0,l.jsxs)(_,{onClick:()=>er(2),disabled:ey&&(!ek||!ew),children:["시작하기",(0,l.jsx)(c.Z,{size:14})]}),3===el&&(0,l.jsxs)("button",{onClick:()=>{eT(""),ei([{number:"",name:"",_id:I()}]),eM("all"),er(4)},className:"inline-flex items-center gap-1.5 px-3 py-2 rounded-xl text-[13px] font-semibold text-zinc-500 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-100 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:["직접 입력하기",(0,l.jsx)(c.Z,{size:14})]}),4===el&&(0,l.jsxs)(_,{onClick:tg,disabled:ep||0===th.length||tm.size>0,children:[ep&&(0,l.jsx)(i.Z,{size:13,className:"animate-spin"}),ep?"등록 중...":"".concat(th.length,"명 등록하기")]}),2===el&&(null!==te?(0,l.jsxs)(_,{disabled:!0,children:[(0,l.jsx)(i.Z,{size:13,className:"animate-spin"}),"잠시만요..."]}):e0&&0===tj.length?(0,l.jsxs)(_,{onClick:()=>er(3),children:["다음",(0,l.jsx)(c.Z,{size:14})]}):(0,l.jsxs)(_,{onClick:tk,disabled:!e0||e9||e3||0===ty,children:[e9&&(0,l.jsx)(i.Z,{size:13,className:"animate-spin"}
1),e9?"가져오는 중...":e0?"".concat(ty,"개 가져오기"):"가져오기"]}))]})]}):(0,l.jsxs)(_,{onClick:K,className:"w-full justify-center",children:["내모 시작하기",(0,l.jsx)(c.Z,{size:14})]})})]})]})})})}},60706:function(e,t,n){n.d(t,{T:function(){return l}});function l(e){let t=String(e).trim().replace(/[^0-9]/g,"");return/^\d{5}$/.test(t)?{grade:parseInt(t[0]),classNum:parseInt(t.slice(1,3)),number:parseInt(t.slice(3))}:/^\d{4}$/.test(t)?{grade:parseInt(t[0]),classNum:parseInt(t[1]),number:parseInt(t.slice(2))}:null}},74791:function(e,t,n){n.d(t,{DX:function(){return s},RM:function(){return a}});var l=n(60706);let r=["학년","반","번호","이름"];async function a(){let e=await Promise.all([n.e(1425),n.e(6919)]).then(n.bind(n,2093)),t=e.utils.book_new(),l=e.utils.aoa_to_sheet([r]);["A1","B1","C1","D1"].forEach(e=>{l[e]&&(l[e].s={alignment:{horizontal:"center"}})}),e.utils.book_append_sheet(t,l,"Sheet1"),e.writeFile(t,"내모_학생명단_양식.xlsx")}async function i(e){let t=await Promise.all([n.e(1425),n.e(6919)]).then(n.bind(n,2093)),r=t.read(new Uint8Array(e),{type:"array"}),a=r.SheetNames[0],i=r.Sheets[a],s=t.utils.sheet_to_json(i,{header:1}),c=-1,o={grade:-1,class:-1,number:-1,name:-1,memo:-1};for(let e=0;e<Math.min(s.length,5);e++){let t=s[e];if(Array.isArray(t)&&(t.forEach((e,t)=>{let n=String(e).trim();n.includes("학년")&&(o.grade=t),("반"===n||n.includes("학급")||n.includes("반"))&&(o.class=t),n.includes("번호")&&(o.number=t),(n.includes("이름")||n.includes("성명"))&&(o.name=t),(n.includes("비고")||n.includes("기록")||n.includes("메모"))&&(o.memo=t)}),-1!==o.number&&-1!==o.name)){c=e;break}}let d=[];
1return(-1!==c?s.slice(c+1):s).forEach(e=>{let t,n;if(!Array.isArray(e)||0===e.length)return;let r=0,a="",i="",s="number"==typeof e[2]||/^\d+$/.test(e[2])?parseInt(e[2]):NaN,u=e[3];if(-1===c&&e.length>=4&&!isNaN(s)&&"string"==typeof u&&/^[가-힣a-zA-Z\s]{2,20}$/.test(u.trim()))t=parseInt(String(e[0]).replace(/[^0-9]/g,""))||void 0,n=String(e[1]).replace(/[^0-9]/g,""),r=s,a=u.trim();else if(-1!==c&&-1!==o.number&&-1!==o.name){let l=e[o.number],s=e[o.name];l&&s&&(r=parseInt(String(l).replace(/[^0-9]/g,"")),a=String(s).trim(),-1!==o.grade&&(t=parseInt(String(e[o.grade]).replace(/[^0-9]/g,""))||void 0),-1!==o.class&&(n=String(e[o.class]).replace(/[^0-9]/g,"")),-1!==o.memo&&(i=String(e[o.memo])))}else if(-1===c&&e.length>=2){let i=String(e[0]).trim(),s=String(e[1]).trim(),c=(0,l.T)(i);c&&/^[가-힣a-zA-Z\s]{2,20}$/.test(s)&&(t=c.grade,n=String(c.classNum),r=c.number,a=s)}a||e.forEach(e=>{if("number"!=typeof e||r){if("string"==typeof e){let t=e.trim();!r&&/^\d+$/.test(t)?r=parseInt(t):!a&&/^[가-힣a-zA-Z\s]{2,20}$/.test(t)&&(a=t.trim())}}else r=e}),r&&a&&d.push({number:r,name:a,memo:i,grade:t,classNum:n?parseInt(n,10):void 0})}),d.sort((e,t)=>{let n=(Number(e.grade)||0)-(Number(t.grade)||0);if(0!==n)return n;let l=(Number(e.classNum)||0)-(Number(t.classNum)||0);return 0!==l?l:(Number(e.number)||0)-(Number(t.number)||0)})}async function s(e){return i(await e.arrayBuffer())}}}]);

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.