PageSourceSearch

https://naemo.ai/_next/static/chunks/8870.2da8734b0cb5f26a.js

js naemo.ai collected 2026-10-02 01:15:46 UTC 30,649 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8870,401],{30401:function(e,t,a){a.d(t,{Z:function(){return s}});let s=(0,a(79205).Z)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]])},66337:function(e,t,a){a.d(t,{Z:function(){return s}});let s=(0,a(79205).Z)("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]])},99397:function(e,t,a){a.d(t,{Z:function(){return s}});let s=(0,a(79205).Z)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},18930:function(e,t,a){a.d(t,{Z:function(){return s}});let s=(0,a(79205).Z)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]])},73348:function(e,t,a){a.d(t,{Z:function(){return o}});var s=a(57437),i=a(2265),r=a(76865),n=a(46977);function o(e){let{open:t,title:a,description:o,consequences:l,confirmLabel:c="삭제",cancelLabel:u="취소",tone:d="danger",busy:h=!1,onConfirm:m,onCancel:v}=e,g="danger"===d,f=(0,i.useRef)(null),p=(0,n.a)(t,()=>{h||v()});return((0,i.useEffect)(()=>{var e;t&&(null===(e=f.current)||void 0===e||e.focus())},[t]),t)?(0,s.jsx)("div",{className:"modal-viewport z-[200] flex items-center justify-center p-4 bg-black/50",onKeyDown:e=>{if("Tab"!==e.key||!p.current)return;let t=p.current.querySelectorAll('button:not([disabled]), [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');if(0===t.length)return;let a=t[0],s=t[t.length-1];e.shiftKey&&document.activeElement===a?(e.preventDefault(),s.focus()):e.shiftKey||document.activeElement!==s||(e.preventDefault(),a.focus())},children:(0,s.jsxs)("div",{ref:p,role:"dialog","aria-modal":"true","aria-labelledby":"danger-confirm-title",className:"w-full max-w-md rounded-2xl bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-800 shadow-xl p-5",children:[(0,s.jsxs)("div",{className:"flex items-start gap-2.5",children:[g&&(0,s.jsx)(r.Z,{size:18,className:"shrink-0 mt-[3px] text-red-600 dark:text-red-400","aria-hidden":"true"}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("h2",{id:"danger-confirm-title",className:"text-[15px] font-bold text-zinc-900 dark:text-zinc-100 leading-snug break-keep",children:a}),o&&(0,s.jsx)("p",{className:"mt-1 text-[13px] text-zinc-600 dark:text-zinc-400 leading-relaxed break-keep",children:o})]})]}),l&&l.length>0&&(0,s.jsxs)("div",{className:"mt-4 rounded-xl bg-red-50 dark:bg-red-950/20 border border-red-200 dark:border-red-900/40 px-4 py-3",children:[(0,s.jsx)("p",{className:"text-[12px] font-semibold text-red-700 dark:text-red-300 mb-1.5",children:"함께 사라지는 기록"}),(0,s.jsx)("ul",{className:"space-y-0.5",children:l.map(e=>(0,s.jsxs)("li",{className:"text-[13px] text-red-800 dark:text-red-200 break-keep",children:["\xb7 ",e]},e))}),(0,s.jsx)("p",{className:"mt-2 text-[12px] font-medium text-red-700 dark:text-red-300",children:"한 번 삭제하면 되돌릴 수 없습니다."})]}),(0,s.jsxs)("div",{className:"mt-5 flex gap-2 justify-end",children:[(0,s.jsx)("button",{ref:f,type:"button",onClick:v,disabled:h,className:"px-4 py-2 rounded-xl text-[13px] font-semibold text-zinc-700 dark:text-zinc-300 bg-zinc-100 dark:bg-zinc-800 hover:bg-zinc-200 dark:hover:bg-zinc-700 transition disabled:opacity-50",children:u}),(0,s.jsx)("button",{type:"button",onClick:m,disabled:h,className:g?"px-4 py-2 rounded-xl text-[13px] font-semibold text-white bg-red-600 hover:bg-red-700 transition disabled:opacity-50":"btn-primary-solid px-4 py-2 rounded-xl text-[13px] font-semibold transition",children:h?"처리하는 중…":c})]})]})}):null}},58346:function(e,t,a){a.d(t,{d:function(){return n}});var s=a(57437),i=a(93448);let r={"avatars-group":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23121331%22%20d%3D%22M1%2015.75A4.75%204.75%200%200%201%205.75%2011h1.5a.75.75%200%200%201%200%201.5h-1.5a3.25%203.25%200%200%200-3.25%203.25V16h1.75a.75.75%200%200%201%200%201.5h-2.5a.75.75%200%200%201-.75-.75zm20.5%200a3.25%203.25%200%200%200-3.25-3.25h-1.5a.75.75%200%200%201%200-1.5h1.5A4.75%204.75%200%200%201%2023%2015.75v1a.75.75%200%200%201-.75.75h-2.5a.75.75%200%200%201%200-1.5h1.75zM14%209a2%202%200%201%200-4%200%202%202%200%200%200%204%2
100m1.5%200a3.5%203.5%200%201%201-7%200%203.5%203.5%200%200%201%207%200m1%209.75a3.25%203.25%200%200%200-3.25-3.25h-2.5a3.25%203.25%200%200%200-3.25%203.25v.75h9zm1.5%201.5a.75.75%200%200%201-.75.75H6.75a.75.75%200%200%201-.75-.75v-1.5A4.75%204.75%200%200%201%2010.75%2014h2.5A4.75%204.75%200%200%201%2018%2018.75zM4%206.5a3%203%200%200%201%204.95-2.28l.05.044.028.027A.75.75%200%200%201%208%205.38a1.5%201.5%200%201%200-1.334%202.581.75.75%200%200%201-.294%201.471l-.038-.007-.062-.015A3%203%200%200%201%204%206.5m14.5%200A1.5%201.5%200%200%200%2016%205.382l-.03.025A.75.75%200%200%201%2015%204.264l.05-.044a3%203%200%201%201%202.616%205.206.75.75%200%201%201-.332-1.463A1.5%201.5%200%200%200%2018.5%206.5%22/%3E%3C/svg%3E",building:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cg%20fill%3D%22%23121331%22%3E%3Cpath%20d%3D%22M8.25%2010a.75.75%200%200%201%20.75.75v1.5a.75.75%200%200%201-1.5%200v-1.5a.75.75%200%200%201%20.75-.75M12%2010a.75.75%200%200%201%20.75.75v1.5a.75.75%200%200%201-1.5%200v-1.5A.75.75%200%200%201%2012%2010m3.75%200a.75.75%200%200%201%20.75.75v1.5a.75.75%200%200%201-1.5%200v-1.5a.75.75%200%200%201%20.75-.75m-7.5-4.5a.75.75%200%200%201%20.75.75v1.5a.75.75%200%200%201-1.5%200v-1.5a.75.75%200%200%201%20.75-.75m3.75%200a.75.75%200%200%201%20.75.75v1.5a.75.75%200%200%201-1.5%200v-1.5A.75.75%200%200%201%2012%205.5m3.75%200a.75.75%200%200%201%20.75.75v1.5a.75.75%200%200%201-1.5%200v-1.5a.75.75%200%200%201%20.75-.75%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20d%3D%22M18.25%202c.966%200%201.75.784%201.75%201.75v16.5A1.75%201.75%200%200%201%2018.25%2022H5.75A1.75%201.75%200%200%201%204%2020.25V3.75C4%202.784%204.784%202%205.75%202zM5.75%203.5a.25.25%200%200%200-.25.25v16.5c0%20.138.112.25.25.25H9v-4.75a.75.75%200%200%201%20.75-.75h4.5a.75.75%200%200%201%20.75.75v4.75h3.25a.25.25%200%200%200%20.25-.25V3.75a.25.25%200%200%200-.25-.25zm4.75%2017h3v-4h-3z%22%20clip-rule%3D%22evenodd%22/%3E%3C/g%3E%3C/svg%3E",cross:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23121331%22%20d%3D%22M19.22%203.72a.75.75%200%201%201%201.06%201.06L13.06%2012l7.22%207.22.052.056a.75.75%200%200%201-1.056%201.056l-.056-.052L12%2013.06l-7.22%207.22a.75.75%200%201%201-1.06-1.06L10.94%2012%203.72%204.78a.75.75%200%201%201%201.06-1.06L12%2010.94z%22/%3E%3C/svg%3E",magnifier:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23121331%22%20d%3D%22M16.334%204.667a8.25%208.25%200%200%201%20.506%2011.114l3.94%203.94.027.027a.75.75%200%200%201-1.06%201.06l-.027-.027-3.94-3.94a8.25%208.25%200%201%201%20.554-12.174M5.727%205.728a6.75%206.75%200%201%200%209.546%209.546%206.75%206.75%200%200%200-9.546-9.546%22/%3E%3C/svg%3E","student-cap":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23121331%22%20fill-rule%3D%22evenodd%22%20d%3D%22M11.12%202.144a1.75%201.75%200%200%201%201.76%200l8.76%205.092c.516.3.801.798.858%201.318q.011.06.012.124v5.572a.75.75%200%200%201-1.5%200v-3.622L19%2011.797v5.843c0%20.656-.367%201.257-.95%201.556l-5.25%202.695a1.75%201.75%200%200%201-1.598%200l-5.25-2.695c-.584-.3-.951-.9-.952-1.556v-5.843l-2.64-1.534c-1.16-.675-1.16-2.352%200-3.027zm1.76%2013.212a1.75%201.75%200%200%201-1.76%200L6.5%2012.669v4.97a.25.25%200%200%200%20.136.223l5.25%202.694a.25.25%200%200%200%20.229%200l5.25-2.695a.25.25%200%200%200%20.136-.221v-4.97zM12.124%203.44a.25.25%200%200%200-.25%200l-8.76%205.093a.25.25%200%200%200%200%20.433l8.76%205.093a.25.25%200%200%200%20.252%200l8.76-5.093a.25.25%200%200%200%200-.433z%22%20clip-rule%3D%22evenodd%22/%3E%3C/svg%3E","trash-bin":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cg%20fill%3D%22%23121331%22%3E%3Cpath%20d%3D%22M9.75%209a.75.75%200%200%201%20.75.75v7.5a.75.75%200%200%201-1.5%200v-7.5A.75.75%200%200%201%209.75%209m4.5%200a.75.75%200%200%201%20.75.75v7.5a.75.75%200%200%201-1.5%200v-7.5a.75.75%200%200%201%20.75-.75%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20d%3D%22M12%201a4%204%200%200%201%203.929%203.25h4.321a.75.75%200%200%201%200%201.5h-.75v13.5A2.75%202.75%200%200%201%2016.75%2022h-9.5a2.75%202.75%200%200%201-2.75-2.75V5.75h-.75a.75.75%200%200%201%200-1.5h4.321A4%204%200%200%201%2012%201M6%2019.25c0%20.69.56%201.25%201.25%201.25h9.5c.69%200%201.25-.56%201.25-1.25V5.75H6zM12
1%202.5a2.5%202.5%200%200%200-2.385%201.75h4.77A2.5%202.5%200%200%200%2012%202.5%22%20clip-rule%3D%22evenodd%22/%3E%3C/g%3E%3C/svg%3E","trending-up":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cg%20stroke%3D%22%23121331%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%221.5%22%3E%3Cpath%20d%3D%22M15.75%206.75h5.5v5.5%22/%3E%3Cpath%20d%3D%22m2.75%2018.25%206.63-6.67%203.54%203.55%208.33-8.38%22/%3E%3C/g%3E%3C/svg%3E","trophy-star":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cg%20fill%3D%22%23121331%22%3E%3Cpath%20d%3D%22M11.765%205.35a.262.262%200%200%201%20.47%200l.615%201.244%201.373.199a.263.263%200%200%201%20.145.45l-.993.967.234%201.368a.262.262%200%200%201-.38.276L12%209.21l-1.229.645a.262.262%200%200%201-.38-.276l.234-1.368-.993-.968a.263.263%200%200%201%20.145-.449l1.373-.2z%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20d%3D%22M16.25%202c.966%200%201.75.784%201.75%201.75V4h2.25c.966%200%201.75.784%201.75%201.75v1.5A4.75%204.75%200%200%201%2017.25%2012h-.055a6%206%200%200%201-4.445%202.951V16.5h3.5c.966%200%201.75.784%201.75%201.75v2A1.75%201.75%200%200%201%2016.25%2022h-8.5A1.75%201.75%200%200%201%206%2020.25v-2c0-.966.784-1.75%201.75-1.75h3.5v-1.549a6%206%200%200%201-4.447-2.955A4.91%204.91%200%200%201%202%207.086V5.68C2%204.752%202.752%204%203.679%204H6v-.25C6%202.784%206.784%202%207.75%202zm-8.5%2016a.25.25%200%200%200-.25.25v2c0%20.138.112.25.25.25h8.5a.25.25%200%200%200%20.25-.25v-2a.25.25%200%200%200-.25-.25zm0-14.5a.25.25%200%200%200-.25.25V9a4.5%204.5%200%201%200%209%200V3.75a.25.25%200%200%200-.25-.25zM18%209c0%20.5-.063.984-.178%201.448A3.25%203.25%200%200%200%2020.5%207.25v-1.5a.25.25%200%200%200-.25-.25H18zM3.679%205.5a.18.18%200%200%200-.179.179v1.408c0%201.63%201.142%202.99%202.669%203.33A6%206%200%200%201%206%209V5.5z%22%20clip-rule%3D%22evenodd%22/%3E%3C/g%3E%3C/svg%3E"};function n(e){let{name:t,size:a=24,className:n}=e,o=r[t];return o?(0,s.jsx)("img",{src:o,alt:"",width:a,height:a,className:(0,i.cn)("dark:invert",n),draggable:!1}):null}},54292:function(e,t,a){a.d(t,{MobileLoadingSwap:function(){return l},r:function(){return o}});var s=a(57437),i=a(2265),r=a(21235),n=a(93448);function o(e){let{label:t="화면을 불러오고 있어요",variant:a="cards",className:o,count:l=3}=e,[c,u]=(0,i.useState)(!1);return(0,i.useEffect)(()=>{u(!1);let e=window.setTimeout(()=>u(!0),8e3);return()=>window.clearTimeout(e)},[t,a]),(0,s.jsxs)("div",{className:(0,n.cn)("w-full min-w-0 bg-white py-3 dark:bg-zinc-950",o),children:[(0,s.jsx)("p",{role:"status","aria-atomic":"true",className:"mb-4 text-[13px] leading-5 text-zinc-600 dark:text-zinc-400",children:c?"불러오는 데 시간이 걸리고 있어요. 연결 상태를 확인해 주세요.":t}),(0,s.jsx)("div",{"aria-hidden":"true",className:"space-y-4",children:"pin"===a?(0,s.jsxs)("div",{className:"flex flex-col items-center pt-6",children:[(0,s.jsx)(r.Od,{width:112,height:28}),(0,s.jsx)(r.Od,{width:168,height:16,className:"mt-3"}),(0,s.jsx)("div",{className:"my-8 flex gap-4",children:Array.from({length:4},(e,t)=>(0,s.jsx)(r.Od,{variant:"circle",width:14,height:14},t))}),(0,s.jsx)("div",{className:"grid grid-cols-3 gap-x-4 gap-y-2",children:Array.from({length:12},(e,t)=>(0,s.jsx)(r.Od,{variant:"circle",width:82,height:82,className:9===t?"invisible":void 0},t))})]}):"grade-basis"===a?(0,s.jsx)("div",{className:"grid grid-cols-4 gap-2",children:Array.from({length:4},(e,t)=>(0,s.jsx)(r.Od,{height:56},t))}):"universities"===a?(0,s.jsx)("div",{children:Array.from({length:l},(e,t)=>(0,s.jsxs)("div",{className:"space-y-2 py-3",children:[(0,s.jsx)(r.Od,{width:"65%",height:18}),(0,s.jsx)(r.Od,{width:"45%",height:14}),(0,s.jsx)("div",{className:"flex gap-1.5 pt-0.5",children:[0,1,2].map(e=>(0,s.jsx)(r.Od,{width:68,height:24,className:"rounded-md"},e))})]},t))}):"calendar"===a?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.Od,{width:128,height:28,className:"mx-auto"}),(0,s.jsx)("div",{className:"grid grid-cols-7 gap-2",children:Array.from({length:35},(e,t)=>(0,s.jsx)(r.Od,{height:64,className:"rounded-md"},t))})]}):"students"===a||"menu"===a?(0,s.jsx)("div",{className:"space-y-0.5",children:Array.from({length:7},(e,t)=>(0,s.jsxs)("div",{className:(0,n.cn)("flex items-center gap-3 px-3","menu"===a?"py-3":"py-2.5"),
1children:[(0,s.jsx)(r.Od,{width:"menu"===a?36:20,height:"menu"===a?36:20,className:"shrink-0 rounded-md"}),(0,s.jsx)(r.Od,{width:t%2==0?96:72,height:16})]},t))}):"grades"===a?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"space-y-4 rounded-2xl bg-zinc-50 p-5 dark:bg-white/[0.03]",children:[(0,s.jsx)(r.Od,{width:96,height:16}),(0,s.jsx)(r.Od,{width:128,height:44}),(0,s.jsx)(r.Od,{width:"65%",height:14})]}),(0,s.jsx)(r.Od,{width:120,height:18}),(0,s.jsx)(r.Od,{height:220}),(0,s.jsx)(r.Od,{width:100,height:18}),(0,s.jsx)(r.Od,{height:48})]}):(0,s.jsx)("div",{className:"zones"===a?"grid grid-cols-2 gap-3":"space-y-3",children:Array.from({length:"zones"===a?4:3},(e,t)=>(0,s.jsxs)("div",{className:"space-y-3 rounded-2xl bg-zinc-50 p-4 dark:bg-white/[0.03]",children:[(0,s.jsx)(r.Od,{width:"45%",height:16}),(0,s.jsx)(r.Od,{width:"85%",height:14}),(0,s.jsx)(r.Od,{width:"65%",height:14})]},t))})})]})}function l(e){let{fallback:t,...a}=e;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o,{...a,className:(0,n.cn)("md:hidden px-4",a.className)}),(0,s.jsx)("div",{className:"hidden md:contents",children:t})]})}},21235:function(e,t,a){a.d(t,{Od:function(){return r}});var s=a(57437),i=a(93448);function r(e){let{className:t,variant:a="rect",width:r,height:n,style:o,...l}=e;return(0,s.jsx)("div",{className:(0,i.cn)("relative overflow-hidden bg-zinc-200/70 dark:bg-white/5 animate-shimmer",{text:"h-4 rounded-md",rect:"rounded-xl",circle:"rounded-full",card:"rounded-2xl"}[a],t),style:{width:void 0!==r?"number"==typeof r?"".concat(r,"px"):r:void 0,height:void 0!==n?"number"==typeof n?"".concat(n,"px"):n:void 0,...o},"aria-hidden":"true",...l})}a(2265)},10136:function(e,t,a){a.d(t,{N:function(){return o},W:function(){return l}});var s=a(57437),i=a(2265),r=a(73348);let n=(0,i.createContext)(null);function o(){let e=(0,i.useContext)(n);if(!e)throw Error("useConfirm은 ConfirmProvider 안에서만 쓸 수 있습니다.");return e}function l(e){var t,a;let{children:o}=e,[l,c]=(0,i.useState)(null),u=(0,i.useRef)(null),d=(0,i.useCallback)(e=>{var t;return null===(t=u.current)||void 0===t||t.call(u,!1),c(e),new Promise(e=>{u.current=e})},[]),h=(0,i.useCallback)(e=>{let t=u.current;u.current=null,c(null),null==t||t(e)},[]),m=null!==(t=null==l?void 0:l.tone)&&void 0!==t?t:"danger";return(0,s.jsxs)(n.Provider,{value:d,children:[o,l&&(0,s.jsx)(r.Z,{open:!0,title:l.title,description:l.description,consequences:"danger"===m?l.consequences:void 0,confirmLabel:null!==(a=l.confirmLabel)&&void 0!==a?a:"danger"===m?"삭제":"확인",cancelLabel:l.cancelLabel,tone:m,onConfirm:()=>h(!0),onCancel:()=>h(!1)})]})}},4908:function(e,t,a){a.d(t,{Pl:function(){return g},fc:function(){return p},AF:function(){return f}});var s=a(57437),i=a(98319),r=a(2265),n=a(73369),o=a(29827),l=a(71632),c=a(83008),u=a(67920),d=a(27526),h=a(54696);function m(e){let{reloadStudents:t}=e,{data:a}=(0,d.kP)(),{createStudent:s}=(0,n.N)(),{addClass:i}=(0,n.Kw)(),o=(0,r.useRef)(!1);return(0,r.useEffect)(()=>{(null==a?void 0:a.user)&&!o.current&&(async()=>{o.current=!0;let e=!1,r={user:{id:a.user.id,name:a.user.name||"User",role:"admin"}};try{let t=localStorage.getItem("saemo-guest-classes");if(t){let a=JSON.parse(t).filter(e=>"담임 학급"!==e&&"담임학급"!==e);if(a.length>0)for(let t of a)try{await i.mutateAsync(t),e=!0}catch(e){}localStorage.removeItem("saemo-guest-classes")}let a=localStorage.getItem("saemo-guest-students");if(a){let t=JSON.parse(a);if(Array.isArray(t)&&t.length>0)for(let a of t)try{var n;await s.mutateAsync({number:a.number,name:a.name,memo:a.memo,homeClassId:null!==(n=a.homeClassId)&&void 0!==n?n:a.classId,customClassIds:a.customClassIds||[],grade:a.grade,classNum:a.classNum}),e=!0}catch(e){}localStorage.removeItem("saemo-guest-students")}let o=localStorage.getItem("saemo-guest-dashboard-memo"),l=localStorage.getItem("dashboard-memo"),u=o||l;if(u){let t=await (0,c.X)("getDashboardMemo",{},r);t.success&&t.data||(await (0,c.X)("saveDashboardMemo",{content:u},r),e=!0),localStorage.removeItem("saemo-guest-dashboard-memo"),localStorage.removeItem("dashboard-memo")}let d=localStorage.getItem("teacher-timetable")||localStorage.getItem("saemo-guest-timetable-my");if(d){let t=JSON.parse(d),a=await (0,c.X)("getTimetable",{type:"teacher"},r);a.success&&a.data&&0!==Object.keys(a.data).length||(await (0,c.X)("saveTimetable",{type:"teacher",data:t},r),e=!0),localStorage.removeItem("teacher-timetable"),localStorage.removeItem("saemo-guest-timetable-my")}let h=localStorage.getItem("class-timetable")||localStorage.getItem("saemo-guest-timetable-class");if(h){let t=JSON.parse(h),a=await (0,c.X)("getTimetable",{type:"class"},r);a.success&&a.data&&0!==Object.keys(a.data).length||(await (0,c.X)("saveTimetable",{type:"class",data:t},r),e=!0),localStorage.removeItem("class-timetable"),localStorage.removeItem("saemo-guest-timetable-class")}}catch(e){console.error("Guest migration error:",e)}finally{e&&t(),o.current=!1}})()},[a,s,i,t]),null}let v=(0,r.createContext)(void 0);function g(e){let{children:t}=e,a=(0,n.wh)(),l=(0,n.tH)(),c=(0,n.N)(),u=(0,n.Kw)(),g=(0,o.NL)(),{showToast:f}=(0,i.pm)(),{status:p}=(0,d.kP)(),x=(0,h.Dv)(),y=(0,r.useRef)(p);(0,r.useEffect)(()=>
1{if(("loading"===y.current||"unauthenticated"===y.current)&&"authenticated"===p){let e=setTimeout(()=>{console.log("[StudentProvider] Session transition detected:",y.current,"→ authenticated. Invalidating queries."),g.invalidateQueries({queryKey:n.bs.all}),g.invalidateQueries({queryKey:n.ic.all})},300);return y.current=p,()=>clearTimeout(e)}y.current=p},[p,g]),(0,r.useEffect)(()=>{if("authenticated"!==p||!a.isError&&!l.isError)return;console.warn("[StudentProvider] Self-healing: Query in error state while authenticated. Scheduling retry...");let e=setTimeout(()=>{console.log("[StudentProvider] Self-healing: Retrying failed queries."),g.invalidateQueries({queryKey:n.bs.all}),g.invalidateQueries({queryKey:n.ic.all})},2e3);return()=>clearTimeout(e)},[p,a.isError,l.isError,g]);let b=(0,r.useMemo)(()=>{var e;return null!==(e=a.data)&&void 0!==e?e:[]},[a.data]),w=(0,r.useMemo)(()=>{var e;return null!==(e=l.data)&&void 0!==e?e:["담임 학급"]},[l.data]),C=(0,r.useMemo)(()=>!!x||a.isSuccess&&l.isSuccess||a.isFetched&&void 0!==a.data,[x,a.isSuccess,l.isSuccess,a.isFetched,a.data]),D=a.isLoading||l.isLoading,j=a.isError||l.isError?a.error||l.error:null,k=u.addClass.mutateAsync,E=u.removeClass.mutateAsync,S=u.renameClass.mutateAsync,M=u.updateClassOrder.mutateAsync,A=c.createStudent.mutateAsync,N=c.deleteStudent.mutateAsync,O=c.updateStudent.mutateAsync,z=c.bulkCreateStudents.mutateAsync,R=(0,r.useCallback)(async e=>{w.includes(e)||await k(e)},[w,k]),P=(0,r.useCallback)(async e=>{"담임 학급"!==e&&"담임학급"!==e&&await E(e)},[E]),L=(0,r.useCallback)(async(e,t)=>{"담임 학급"!==e&&"담임학급"!==e&&t.trim()&&e!==t&&await S({oldName:e,newName:t.trim()})},[S]),I=(0,r.useCallback)(async e=>{await M(e)},[M]),K=(0,r.useCallback)(async e=>{try{return await A(e),!0}catch(e){return console.error("Failed to add student:",e),f(e.message||"요청을 처리하지 못했습니다.","error"),!1}},[A,f]),T=(0,r.useCallback)(async e=>{try{return await N(e),!0}catch(e){return console.error("Failed to remove student:",e),!1}},[N]),V=(0,r.useCallback)(async(e,t)=>{try{return await O({id:e,...t}),!0}catch(e){return console.error("Failed to update student:",e),!1}},[O]),F=(0,r.useCallback)(async e=>{let t=b.length>0?Math.max(...b.map(e=>e.number)):0,a=e.map((e,a)=>({name:e,number:t+1+a}));await z({students:a})},[b,z]),q=a.refetch,Z=(0,r.useCallback)(async()=>{await q()},[q]);(0,r.useEffect)(()=>{let e=()=>{g.invalidateQueries()};return window.addEventListener("refresh-active-view",e),()=>window.removeEventListener("refresh-active-view",e)},[g]);let B=(0,r.useMemo)(()=>({students:b,classes:w,addClass:R,removeClass:P,renameClass:L,updateClassOrder:I,addStudent:K,removeStudent:T,updateStudent:V,bulkAddStudents:F,reloadStudents:Z,isLoaded:C,isLoading:D,error:j}),[b,w,R,P,L,I,K,T,V,F,Z,C,D,j]);return(0,s.jsxs)(v.Provider,{value:B,children:[(0,s.jsx)(m,{reloadStudents:Z}),t]})}function f(){let e=(0,r.useContext)(v);if(!e)throw Error("useStudents must be used within a StudentProvider");return e}function p(){var e;let{students:t,isLoaded:a}=f(),{data:s,status:i}=(0,d.kP)(),r=(0,u.XC)(),o=(0,h.Dv)(),m=a&&t.length>0,{data:v}=(0,l.a)({queryKey:[...n.bs.all,"has-roster",null==s?void 0:null===(e=s.user)||void 0===e?void 0:e.id],enabled:a&&!m&&!o&&"authenticated"===i,staleTime:6e5,queryFn:async()=>{var e;let t=await (0,c.X)("hasStudentRoster",{},r);return!!(t.success&&(null===(e=t.data)||void 0===e?void 0:e.hasRoster))}});return m||!0===v}},34137:function(e,t,a){a.d(t,{j:function(){return n}});var s=a(2265);let i=[],r=!1;function n(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1],a=(0,s.useRef)(e);(0,s.useEffect)(()=>{a.current=e},[e]),(0,s.useEffect)(()=>{if(!t)return;r||(r=!0,window.addEventListener("keydown",e=>{if("Escape"!==e.key)return;let t=i[i.length-1];t&&t.call()}));let e={call:()=>a.current()};return i.push(e),()=>{let t=i.lastIndexOf(e);-1!==t&&i.splice(t,1)}},[t])}},46977:function(e,t,a){a.d(t,{a:function(){return n}});var s=a(2265),i=a(34137);let r=[];function n(e,t){let a=(0,s.useRef)(null);return(0,i.j)(t,e),(0,s.useEffect)(()=>{let t=a.current;if(!e||!t)return;let s=document.activeElement;r.push(t);let i=()=>Array.from(t.querySelectorAll('button:not([disabled]), a[href], input
1:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(e=>!e.closest("[inert]")&&e.getClientRects().length>0),n=()=>{var e;return(null!==(e=i()[0])&&void 0!==e?e:t).focus()};t.contains(document.activeElement)||n();let o=e=>{var a,s;if(r.at(-1)!==t||"Tab"!==e.key)return;let n=i(),o=null!==(a=n[0])&&void 0!==a?a:t,l=null!==(s=n.at(-1))&&void 0!==s?s:t;t.contains(document.activeElement)&&(e.shiftKey?document.activeElement!==o:document.activeElement!==l)||(e.preventDefault(),(e.shiftKey?l:o).focus())},l=e=>{r.at(-1)!==t||t.contains(e.target)||n()};return document.addEventListener("keydown",o),document.addEventListener("focusin",l),()=>{r.splice(r.indexOf(t),1),document.removeEventListener("keydown",o),document.removeEventListener("focusin",l),(null==s?void 0:s.isConnected)&&s.focus()}},[e]),a}},82941:function(e,t,a){a.d(t,{Wk:function(){return s}});function s(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:16,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:64,i=t-s;return i<=a||e.bottom-e.top>i-a?0:e.bottom>i?e.bottom-i:e.top<a?e.top-a:0}},8345:function(e,t,a){a.d(t,{Y:function(){return r},l:function(){return i}});let s=new WeakSet;function i(e){s.add(e)}function r(e){return s.has(e)}},2894:function(e,t,a){a.d(t,{R:function(){return o},m:function(){return n}});var s=a(18238),i=a(7989),r=a(11255),n=class extends i.F{#e;#t;#a;#s;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#a=e.mutationCache,this.#t=[],this.state=e.state||o(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#a.notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#a.notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){this.#t.length||("pending"===this.state.status?this.scheduleGc():this.#a.remove(this))}continue(){return this.#s?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:"continue"})},a={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#s=(0,r.Mz)({fn:()=>this.options.mutationFn?this.options.mutationFn(e,a):Promise.reject(Error("No mutationFn found")),onFail:(e,t)=>{this.#i({type:"failed",failureCount:e,error:t})},onPause:()=>{this.#i({type:"pause"})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#a.canRun(this)});let s="pending"===this.state.status,i=!this.#s.canStart();try{if(s)t();else{this.#i({type:"pending",variables:e,isPaused:i}),this.#a.config.onMutate&&await this.#a.config.onMutate(e,this,a);let t=await this.options.onMutate?.(e,a);t!==this.state.context&&this.#i({type:"pending",context:t,variables:e,isPaused:i})}let r=await this.#s.start();return await this.#a.config.onSuccess?.(r,e,this.state.context,this,a),await this.options.onSuccess?.(r,e,this.state.context,a),await this.#a.config.onSettled?.(r,null,this.state.variables,this.state.context,this,a),await this.options.onSettled?.(r,null,e,this.state.context,a),this.#i({type:"success",data:r}),r}catch(t){try{await this.#a.config.onError?.(t,e,this.state.context,this,a)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,a)}catch(e){Promise.reject(e)}try{await this.#a.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,a)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,a)}catch(e){Promise.reject(e)}throw this.#i({type:"error",error:t}),t}finally{this.#a.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case"failed":return{...t,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...t,isPaused:!0};case"continue":return{...t,isPaused:!1};case"pending":return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPau
1sed:!1,status:"error"}}})(this.state),s.Vr.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#a.notify({mutation:this,type:"updated",action:e})})}};function o(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}},21770:function(e,t,a){a.d(t,{D:function(){return u}});var s=a(2265),i=a(2894),r=a(18238),n=a(24112),o=a(45345),l=class extends n.l{#e;#r=void 0;#n;#o;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#l()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,o.VS)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,o.Ym)(t.mutationKey)!==(0,o.Ym)(this.options.mutationKey)?this.reset():this.#n?.state.status==="pending"&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#l(),this.#c(e)}getCurrentResult(){return this.#r}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#l(),this.#c()}mutate(e,t){return this.#o=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#l(){let e=this.#n?.state??(0,i.R)();this.#r={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#c(e){r.Vr.batch(()=>{if(this.#o&&this.hasListeners()){let t=this.#r.variables,a=this.#r.context,s={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#o.onSuccess?.(e.data,t,a,s)}catch(e){Promise.reject(e)}try{this.#o.onSettled?.(e.data,null,t,a,s)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#o.onError?.(e.error,t,a,s)}catch(e){Promise.reject(e)}try{this.#o.onSettled?.(void 0,e.error,t,a,s)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#r)})})}},c=a(29827);function u(e,t){let a=(0,c.NL)(t),[i]=s.useState(()=>new l(a,e));s.useEffect(()=>{i.setOptions(e)},[i,e]);let n=s.useSyncExternalStore(s.useCallback(e=>i.subscribe(r.Vr.batchCalls(e)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),u=s.useCallback((e,t)=>{i.mutate(e,t).catch(o.ZT)},[i]);if(n.error&&(0,o.L3)(i.options.throwOnError,[n.error]))throw n.error;return{...n,mutate:u,mutateAsync:n.mutate}}},71632:function(e,t,a){a.d(t,{a:function(){return r}});var s=a(86900),i=a(68873);function r(e,t){return(0,i.r)(e,s.z,t)}},52345:function(e,t,a){a.d(t,{J:function(){return n}});var s=a(47435),i=a(4662),r=a(2265);function n(){s.O.current||(0,i.Ad)();let[e]=(0,r.useState)(s.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.