PageSourceSearch

https://naemo.ai/_next/static/chunks/9284.36e2985fc1faea7e.js

js naemo.ai collected 2026-10-02 01:15:55 UTC 66,480 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9284],{53113:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]])},45884:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("Maximize",[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]])},34415:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("Minimize",[["path",{d:"M8 3v3a2 2 0 0 1-2 2H3",key:"hohbtr"}],["path",{d:"M21 8h-3a2 2 0 0 1-2-2V3",key:"5jw1f3"}],["path",{d:"M3 16h3a2 2 0 0 1 2 2v3",key:"198tvr"}],["path",{d:"M16 21v-3a2 2 0 0 1 2-2h3",key:"ph8mxp"}]])},21047:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("Minus",[["path",{d:"M5 12h14",key:"1ays0h"}]])},76980:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("Paperclip",[["path",{d:"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48",key:"1u3ebp"}]])},67404:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=(0,r(79205).Z)("QrCode",[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]])},62102:function(e,t,r){"use strict";r.d(t,{C:function(){return n}}),r(83079);var n=(0,r(12119).$)("3d365eac91b4fdf5c66207add9995915cec21f92")},97831:function(e,t,r){"use strict";r.d(t,{A:function(){return g},a:function(){return b}});var n=r(57437),a=r(2265),i=r(54887),s=r(45884),l=r(34415),o=r(30401),c=r(78867),d=r(35398),u=r(34137),x=r(98319),m=r(12355),h=r.n(m);function f(){return document.fullscreenElement||document.webkitFullscreenElement}async function p(e){if(e&&f()===e)try{var t,r;document.exitFullscreen?await document.exitFullscreen():await (null===(t=(r=document).webkitExitFullscreen)||void 0===t?void 0:t.call(r))}catch(e){}}function b(e){let{value:t,disabled:r=!1}=e,[o,c]=(0,a.useState)(!1),x=(0,a.useRef)(null),m=(0,a.useRef)(null),b=(0,a.useRef)(null),g=()=>{p(x.current),c(!1)};(0,u.j)(g,o),(0,a.useEffect)(()=>{var e;if(!o)return;let t=x.current,r=document.body.style.overflow;document.body.style.overflow="hidden",null===(e=b.current)||void 0===e||e.focus();let n=!1,a=()=>{f()===t?n=!0:n&&c(!1)};document.addEventListener("fullscreenchange",a),document.addEventListener("webkitfullscreenchange",a);let i=m.current;return()=>{document.body.style.overflow=r,document.removeEventListener("fullscreenchange",a),document.removeEventListener("webkitfullscreenchange",a),p(t),null==i||i.focus()}},[o]);let v=async()=>{(0,i.flushSync)(()=>c(!0));let e=x.current;if(e)try{var t;e.requestFullscreen?await e.requestFullscreen():await (null===(t=e.webkitRequestFullscreen)||void 0===t?void 0:t.call(e))}catch(e){}};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{ref:m,type:"button",className:h().expand,onClick:v,disabled:r||!t,"aria-label":"QR 코드 전체화면",title:"QR 코드 전체화면",children:(0,n.jsx)(s.Z,{size:20,"aria-hidden":"true"})}),o&&(0,i.createPortal)((0,n.jsxs)("div",{ref:x,className:h().fullscreen,role:"dialog","aria-modal":"true","aria-label":"QR 코드 전체화면",onClick:e=>e.stopPropagation(),onKeyDown:e=>{if("Tab"===e.key){var t;e.preventDefault(),null===(t=b.current)||void 0===t||t.focus()}},children:[(0,n.jsx)("button",{ref:b,type:"button",className:h().collapse,onClick:g,"aria-label":"전체화면 닫기",title:"전체화면 닫기 (Esc)",children:(0,n.jsx)(l.Z,{size:24,"aria-hidden":"true"})}),(0,n.jsx)(d.t,{value:t,size:1024,level:"H",includeMargin:!0,className:h().code})]}),document.body)]})}function g(e){let{value:t,pending:r=!1}=e,[i,s]=(0,a.useState)(!1),{showToast:l}=(0,x.pm)();(0,a.useEffect)(()=>
1{if(!i)return;let e=window.setTimeout(()=>s(!1),2e3);return()=>window.clearTimeout(e)},[i]);let d=async()=>{try{await navigator.clipboard.writeText(t),s(!0),l("링크가 복사되었습니다.","success")}catch(e){l("링크를 복사하지 못했습니다. 주소를 선택해 직접 복사해 주세요.","error")}};return(0,n.jsxs)("div",{className:h().link,children:[(0,n.jsx)("input",{"aria-label":"공유 링크",readOnly:!0,value:r?"주소 생성 중...":t,onFocus:e=>e.currentTarget.select()}),(0,n.jsx)("button",{type:"button",onClick:d,disabled:!t||r,"aria-label":i?"링크 복사됨":"링크 복사",title:i?"복사됨":"링크 복사",children:i?(0,n.jsx)(o.Z,{size:18,"aria-hidden":"true"}):(0,n.jsx)(c.Z,{size:18,"aria-hidden":"true"})})]})}},24754:function(e,t,r){"use strict";r.d(t,{Z:function(){return f}});var n=r(57437),a=r(98907),i=r(2265),s=r(54887),l=r(32489),o=r(21047),c=r(99397),d=r(93448),u=r(98319),x=r(34137),m=r(43232);let h="live_ck_4yKeq5bgrpWgyX6jdZjZVGX0lzW6";function f(e){let{isOpen:t,onClose:r,currentBalance:f}=e,[p,b]=(0,i.useState)(!1),[g,v]=(0,i.useState)(1),[y,w]=(0,i.useState)(!1),[k,j]=(0,i.useState)(!1),{showToast:N}=(0,u.pm)(),z=100*g,C=8900*g;(0,i.useEffect)(()=>{b(!0);let e=(0,a.zN)(a._8);return e&&v((0,a.IL)(e.quantity)),()=>b(!1)},[]),(0,i.useEffect)(()=>{if(t){if(window.TossPayments)w(!0);else{let e=document.createElement("script");e.src="https://js.tosspayments.com/v2/standard",e.async=!0,e.onload=()=>w(!0),e.onerror=()=>N("결제 시스템을 불러오는데 실패했습니다.","error"),document.head.appendChild(e)}}},[t,N]),(0,x.j)(r,t);let E=(0,i.useCallback)(()=>{let e=Date.now(),t=Math.random().toString(36).substring(2,8).toUpperCase();return"CREDIT-".concat(e,"-").concat(t)},[]),D=async()=>{if(!h){N("결제 시스템이 설정되지 않았습니다.","error");return}if(!y||!window.TossPayments){N("결제 시스템을 불러오는 중입니다.","info");return}j(!0);try{let e=window.TossPayments(h).payment({customerKey:"customer-".concat(Date.now())}),t=window.location.origin,r=(0,a.gA)(window.location.hash.slice(1));(0,a.$L)(a._8,{quantity:g,returnTo:r}),await e.requestPayment({method:"CARD",amount:{currency:"KRW",value:C},orderId:E(),orderName:"내모 크레딧 ".concat(z,"개"),successUrl:"".concat(t,"/payment/credit-success?quantity=").concat(g),failUrl:"".concat(t,"/payment/credit-fail?returnTo=").concat(r)})}catch(e){(null==e?void 0:e.code)!=="USER_CANCEL"&&N((null==e?void 0:e.message)||"결제 요청 중 오류가 발생했습니다.","error")}finally{j(!1)}};return t&&p?(0,s.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)(l.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:()=>v(e=>Math.max(1,e-1)),disabled:g<=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)(o.Z,{size:18})}),(0,n.jsx)("button",{"aria-label":"수량 늘리기",onClick:()=>v(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:f.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:(f+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 ",g]}),(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:["₩",C.toLocaleString()]})]}),(0,n.jsx)("div",{onClick:k?void 0:D,role:"button",tabIndex:k?-1:0,className:(0,d.cn)("w-full h-12 font-medium text-sm rounded-lg transition flex items-center justify-center gap-2 select-none",k?"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=>{k||(e.currentTarget.style.backgroundColor="#27272a")},onMouseLeave:e=>{k||(e.currentTarget.style.backgroundColor="")},children:k?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(m.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}},53834:function(e,t,r){"use strict";r.d(t,{W:function(){return o}});var n=r(57437),a=r(29),i=r.n(a),s=r(93448),l=r(43232);let o=e=>{let{size:t=32,speed:r=1.5,className:a="",withPulse:o=!1}=e;return(0,n.jsxs)("div",{style:{animation:"spin ".concat(r,"s linear infinite").concat(o?", pulse 2s ease-in-out infinite":"")},className:"jsx-ba9b38e61bef3f8b "+((0,s.cn)("brand-logo-loader inline-flex items-center justify-center",a)||""),children:[(0,n.jsx)(l.O,{size:t}),(0,n.jsx)(i(),{id:"ba9b38e61bef3f8b",children:"@-webkit-keyframes spin{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes spin{from{-moz-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes spin{from{-o-transform:rotate(0deg);transform:rotate(0deg)}to{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}@-moz-keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}@-o-keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}"})]})}},49284:function(e,t,r){"use strict";r.r(t),r.d(t,{default:function(){return $}});var n=r(57437),a=r(90982),i=r(78529),s=r(2265),l=r(18930),o=r(32489),c=r(51817);let d=(0,r(79205).Z)("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);var u=r(82029),x=r(92735),m=r(67404),h=r(41671),f=r(99397),p=r(17625),b=r(53834),g=r(43232),v=r(35398),y=r(97831),w=r(93448),k=r(91455),j=r(4908),N=r(83008),z=r(67920),C=r(62102),E=r(54696),D=r(24754),S=r(98319),A=r(16348),I=r(93202),M=r(48736),Z=r(53113),L=r(49322),R=r(29827);function T(e){return e<1024?"".concat(e," B"):e<1048576?"".concat((e/1024).toFixed(1)," KB"):"".concat((e/1048576).toFixed(1)," MB")}
1function K(e){switch(e){case"pending":return"AI 분석 중...";case"failed":return"AI 분석 실패";case"unsupported":return"AI 분석 미지원";default:return""}}function F(e){let{attachments:t,compact:r=!1,onAttachmentDeleted:a}=e,i=(0,R.NL)(),d=(0,z.XC)(),{showToast:u}=(0,S.pm)(),[x,m]=(0,s.useState)(null),[h,f]=(0,s.useState)(null);if(!t||0===t.length)return null;if(r)return(0,n.jsxs)("div",{className:"flex items-center gap-1 text-[10px] text-zinc-400",children:[(0,n.jsx)(M.Z,{size:10}),(0,n.jsxs)("span",{children:["첨부 ",t.length]})]});let p=t.find(e=>e.id===x)||null,b=async()=>{if(p){f(p.id);try{let e=await (0,N.X)("deleteActivityAttachment",{attachmentId:p.id},d);e.success?(u("첨부파일을 삭제했습니다.","success"),i.invalidateQueries({queryKey:A.ZJ.lists()}),null==a||a(p.id)):u(e.error||"삭제에 실패했습니다.","error")}catch(e){u("삭제 중 오류가 발생했습니다.","error")}finally{f(null),m(null)}}};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"space-y-2",children:t.map(e=>{var t;let r=e.fileType.startsWith("image/")?Z.Z:M.Z,a=h===e.id;return(0,n.jsxs)("div",{className:"flex items-center gap-3 px-3 py-2.5 bg-zinc-50 dark:bg-[#0D0D0D] border border-zinc-200 dark:border-white/10 rounded-lg group",children:[(0,n.jsxs)("a",{href:(t=e.fileKey,"/api/files/".concat(encodeURIComponent(t))),target:"_blank",rel:"noopener noreferrer",className:"flex-1 min-w-0 flex items-center gap-3 hover:opacity-80 transition-opacity",children:[(0,n.jsx)("div",{className:"w-8 h-8 rounded-md bg-white dark:bg-[#1A1A1A] flex items-center justify-center shrink-0",children:(0,n.jsx)(r,{size:16,className:"text-zinc-500 dark:text-zinc-400"})}),(0,n.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,n.jsx)("div",{className:"text-sm font-medium text-zinc-900 dark:text-white truncate",children:e.fileName}),(0,n.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,n.jsx)("span",{className:"text-zinc-500 dark:text-zinc-400",children:T(e.size)}),K(e.extractStatus)&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"text-zinc-300 dark:text-zinc-500",children:"\xb7"}),(0,n.jsxs)("span",{className:function(e){switch(e){case"done":return"text-green-500";case"pending":return"text-blue-500";case"failed":return"text-red-400";default:return"text-zinc-400"}}(e.extractStatus),children:["pending"===e.extractStatus&&(0,n.jsx)(c.Z,{size:10,className:"inline-block animate-spin mr-1"}),"failed"===e.extractStatus&&(0,n.jsx)(L.Z,{size:10,className:"inline-block mr-1"}),K(e.extractStatus)]})]})]})]})]}),(0,n.jsx)("button",{type:"button",onClick:t=>{t.stopPropagation(),m(e.id)},disabled:a,className:"p-1.5 text-zinc-400 hover:text-red-500 hover:bg-red-500/10 rounded transition-colors shrink-0 disabled:opacity-50",title:"첨부파일 삭제","aria-label":"첨부파일 삭제",children:a?(0,n.jsx)(c.Z,{size:14,className:"animate-spin"}):(0,n.jsx)(l.Z,{size:14})})]},e.id)})}),p&&(0,n.jsx)("div",{className:"fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-[60] p-4",onClick:()=>h?null:m(null),children:(0,n.jsxs)("div",{className:"bg-white dark:bg-[#1A1A1A] rounded-2xl w-full max-w-sm shadow-2xl p-6",onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("div",{className:"flex items-start justify-between mb-4",children:[(0,n.jsx)("h3",{className:"text-base font-bold text-zinc-900 dark:text-white",children:"첨부파일 삭제"}),(0,n.jsx)("button",{"aria-label":"닫기",onClick:()=>m(null),disabled:!!h,className:"p-1 text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors disabled:opacity-50",children:(0,n.jsx)(o.Z,{size:18})})]}),(0,n.jsx)("p",{className:"text-sm text-zinc-600 dark:text-zinc-300 mb-2",children:"아래 파일을 영구적으로 삭제하시겠습니까?"}),(0,n.jsxs)("div",{className:"px-3 py-2 bg-zinc-50 dark:bg-[#0D0D0D] border border-zinc-200 dark:border-white/10 rounded-lg mb-5",children:[(0,n.jsx)("div",{className:"text-sm font-medium text-zinc-900 dark:text-white truncate",children:p.fileName}),(0,n.jsx)("div",{className:"text-xs text-zinc-500 dark:text-zinc-400",children:T(p.size)})]}),(0,n.jsx)("p",{className:"text-xs text-zinc-500 dark:text-zinc-400 mb-5 leading-relaxed",children:"파일은 R2 스토리지에서 즉시 삭제되며, 저장 용량에서도 차감됩니다. 복구할 수 없습니다."}),(0,n.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,n.jsx)("button",{onClick:()=>m(null),disabled:!!h,className:"px-4 py-2 text-zinc-500 hover:text-zinc-900 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-white/10 rounded-lg transition-colors text-sm font-medium disabled:opacity-50",children:"취소"}),(0,n.jsx)("button",{onClick:b,disabled:!!h,className:"px-4 py-2 bg-red-600 hover:bg-red-700 text-white rounded-lg transition-colors text-sm font-medium disabled:opacity-50 flex items-center gap-1.5",children:h?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(c.Z,{size:14,className:"animate-spin"}
1),(0,n.jsx)("span",{children:"삭제 중..."})]}):(0,n.jsx)("span",{children:"삭제"})})]})]})})]})}var _=r(76980),Q=r(39136),P=r(82374),q=r(39561),U=r(9244),X=r(7153),H=r(64954),O=r(25997),B=r(69813);function W(e){let{activity:t,onUpdate:r,onDelete:a,onClick:i,autoFocus:s=!1}=e;return(0,n.jsxs)("div",{className:"group flex items-center gap-1.5 py-1.5 px-2 rounded-lg border border-zinc-200 dark:border-white/10 bg-white dark:bg-white/[0.02] hover:bg-zinc-100 dark:hover:bg-white/[0.05] transition-colors activity-block-wrapper",children:[(0,n.jsx)("button",{onClick:e=>{e.stopPropagation();let n="autonomous"===t.category?"career":"autonomous";r({...t,category:n})},className:(0,w.cn)("px-1.5 py-0.5 text-[10px] font-bold rounded shrink-0 transition-colors","autonomous"===t.category?"bg-violet-500/15 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300 hover:bg-violet-500/25":"bg-teal-500/15 text-teal-700 dark:bg-teal-500/20 dark:text-teal-300 hover:bg-teal-500/25"),children:"autonomous"===t.category?"자율":"진로"}),(0,n.jsx)("div",{onClick:i,className:(0,w.cn)("flex-1 text-xs min-w-0 px-1 truncate cursor-pointer text-zinc-700 dark:text-zinc-200",!t.activityName&&"text-opacity-50 italic"),children:t.activityName||"활동명을 입력하세요..."}),t.attachments&&t.attachments.length>0&&(0,n.jsxs)("button",{onClick:i,className:"flex items-center gap-0.5 px-1 py-0.5 rounded text-[10px] font-bold text-zinc-500 dark:text-zinc-400 hover:bg-zinc-200 dark:hover:bg-white/10 transition-colors shrink-0",title:"첨부파일 ".concat(t.attachments.length,"개"),children:[(0,n.jsx)(_.Z,{size:10}),(0,n.jsx)("span",{children:t.attachments.length})]}),(0,n.jsx)("button",{"aria-label":"삭제",onClick:()=>a(t.id),className:"opacity-0 group-hover:opacity-100 p-0.5 text-zinc-400 hover:text-red-500 transition-colors shrink-0",children:(0,n.jsx)(l.Z,{size:12})})]})}let J="px-3.5 py-2 rounded-lg text-sm font-medium text-zinc-500 hover:text-zinc-900 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-white/10 transition-colors";function V(e){let{activity:t,studentLabel:r,onSave:a,onDelete:i,onClose:d}
1=e,[u,x]=(0,s.useState)(t.activityName),[m,h]=(0,s.useState)(t.details||""),[f,p]=(0,s.useState)(t.category),[b,g]=(0,s.useState)("none"),[v,y]=(0,s.useState)(!1),[j,N]=(0,s.useState)(!1),z=(0,s.useRef)(null),C=(0,s.useRef)(null),E=(0,s.useId)(),D=t.id.startsWith("temp-"),S=v||j,A=u!==t.activityName||m!==(t.details||"")||f!==t.category,I=D?null:function(e){let t=new Date(e);return Number.isNaN(t.getTime())?null:t.toLocaleDateString("ko-KR",{year:"numeric",month:"long",day:"numeric",timeZone:"Asia/Seoul"})}(t.createdAt),M=[r,I&&"".concat(I," 등록")].filter(Boolean).join(" \xb7 "),Z=(0,s.useCallback)(()=>{if(!S){if(A){g("discard");return}d()}},[S,A,d]);(0,s.useEffect)(()=>{let e=document.activeElement,t=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{var r;document.body.style.overflow=t,null==e||null===(r=e.focus)||void 0===r||r.call(e)}},[]),(0,s.useEffect)(()=>{var e;D||null===(e=z.current)||void 0===e||e.focus()},[D]),(0,s.useEffect)(()=>{let e=C.current;e&&(e.style.height="auto",e.style.height="".concat(e.scrollHeight,"px"))},[m]),(0,s.useEffect)(()=>{let e=e=>{if("Escape"===e.key){e.stopPropagation(),"none"!==b?g("none"):Z();return}if("Tab"!==e.key||!z.current)return;let t=Array.from(z.current.querySelectorAll("button:not([disabled]), input, textarea, a[href]"));if(0===t.length)return;let r=t[0],n=t[t.length-1];e.shiftKey&&document.activeElement===r?(e.preventDefault(),n.focus()):e.shiftKey||document.activeElement!==n||(e.preventDefault(),r.focus())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[b,Z]);let L=async()=>{let e=u.trim();if(!e||S)return;y(!0);let r=await a({...t,activityName:e,details:m.trim(),category:f});y(!1),r&&d()},R=async()=>{if(S)return;N(!0);let e=await i(t.id);N(!1),e?d():g("none")};return(0,n.jsxs)("div",{className:"fixed inset-0 z-[110] flex items-center justify-center p-4",children:[(0,n.jsx)("div",{className:"absolute inset-0 bg-black/50 dark:bg-black/60 backdrop-blur-sm animate-in fade-in duration-150",onClick:Z}),(0,n.jsxs)("div",{ref:z,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":"".concat(E,"-heading"),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&"Enter"===e.key&&(e.preventDefault(),L())},className:"relative flex flex-col w-full max-w-2xl max-h-[85vh] bg-white dark:bg-[#1A1A1A] rounded-2xl border border-zinc-200 dark:border-white/10 shadow-2xl animate-in fade-in zoom-in-95 duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500",children:[(0,n.jsxs)("div",{className:"shrink-0 flex items-start justify-between gap-3 px-5 pt-5 pb-4",children:[(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("h3",{id:"".concat(E,"-heading"),className:"text-[15px] font-semibold text-zinc-900 dark:text-white",children:"활동 기록"}),M&&(0,n.jsx)("p",{className:"mt-1 text-xs text-zinc-500 dark:text-zinc-400 truncate",children:M})]}),(0,n.jsx)("button",{"aria-label":"닫기",onClick:Z,className:"shrink-0 -mr-1.5 -mt-1 p-1.5 rounded-lg text-zinc-400 hover:text-zinc-900 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-white/10 transition-colors",children:(0,n.jsx)(o.Z,{size:18})})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-y-auto custom-scrollbar px-5 pb-5 space-y-5",children:[(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("span",{className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"활동 유형"}),(0,n.jsx)(k.s,{value:f,onChange:p,"aria-label":"활동 유형",className:"w-fit gap-1 p-1 rounded-xl bg-zinc-100 dark:bg-black/30",itemClassName:"px-6 py-1.5 rounded-lg text-sm font-medium",activeItemClassName:"text-zinc-900 dark:text-white",inactiveItemClassName:"text-zinc-500 dark:text-zinc-400 hover:text-zinc-800 dark:hover:text-zinc-200",indicatorClassName:"bg-white dark:bg-[#2C2C2C] rounded-lg shadow-sm",options:[{key:"autonomous",label:"자율"},{key:"career",label:"진로"}]})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("label",{htmlFor:"".concat(E,"-name"),className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"활동 제목"}),(0,n.jsx)("input",{id:"".concat(E,"-name"),type:"text",value:u,onChange:e=>x(e.target.value),onKeyDown:e=>{if("Enter"===e.key){var t;e.preventDefault(),null===(t=C.current)||void 0===t||t.focus()}},placeholder:"활동 제목을 입력하세요",className:"w-full px-3.5 py-2.5 bg-zinc-50 dark:bg-[#0D0D0D] border border-zinc-200 dark:border-white/10 rounded-lg text-[16px] md:text-[15px] text-zinc-900 dark:text-white placeholder-zinc-400 dark:placeholder-[#4A4A4A] focus:outline-none focus:border-toss-blue focus:ring-2 focus:ring-toss-blue/20 transition-colors",autoF
1ocus:D})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("label",{htmlFor:"".concat(E,"-details"),className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"활동 내용"}),(0,n.jsx)("textarea",{id:"".concat(E,"-details"),ref:C,value:m,onChange:e=>h(e.target.value),placeholder:"활동 내용을 입력하세요",className:"w-full px-3.5 py-3 bg-zinc-50 dark:bg-[#0D0D0D] border border-zinc-200 dark:border-white/10 rounded-lg text-[16px] md:text-sm leading-[1.75] text-zinc-800 dark:text-zinc-200 placeholder-zinc-400 dark:placeholder-[#4A4A4A] min-h-[168px] max-h-[46vh] resize-none overflow-y-auto custom-scrollbar focus:outline-none focus:border-toss-blue focus:ring-2 focus:ring-toss-blue/20 transition-colors"})]}),t.attachments&&t.attachments.length>0&&(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1.5 text-xs font-medium text-zinc-500 dark:text-zinc-400",children:[(0,n.jsx)(_.Z,{size:12}),"학생 첨부 파일 ",t.attachments.length,"개"]}),(0,n.jsx)(F,{attachments:t.attachments})]})]}),(0,n.jsx)("div",{className:"shrink-0 flex items-center justify-between gap-3 px-5 py-4",children:"delete"===b?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"text-sm text-zinc-600 dark:text-zinc-300",children:"삭제하면 되돌릴 수 없습니다."}),(0,n.jsxs)("div",{className:"shrink-0 flex items-center gap-2",children:[(0,n.jsx)("button",{onClick:()=>g("none"),className:J,children:"취소"}),(0,n.jsx)("button",{onClick:R,disabled:j,className:"brand-danger-btn min-w-[64px] flex items-center justify-center px-4 py-2 rounded-lg text-sm font-medium bg-red-600 hover:bg-red-700 disabled:bg-red-600/60 text-white transition-colors",children:j?(0,n.jsx)(c.Z,{size:16,className:"animate-spin"}):"삭제"})]})]}):"discard"===b?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"text-sm text-zinc-600 dark:text-zinc-300",children:"저장하지 않은 변경 사항이 있습니다."}),(0,n.jsxs)("div",{className:"shrink-0 flex items-center gap-2",children:[(0,n.jsx)("button",{onClick:()=>g("none"),className:J,children:"계속 편집"}),(0,n.jsx)("button",{onClick:d,className:"brand-danger-ghost px-4 py-2 rounded-lg text-sm font-medium text-red-600 dark:text-red-400 hover:bg-red-500/10 transition-colors",children:"저장하지 않고 닫기"})]})]}):(0,n.jsxs)(n.Fragment,{children:[D?(0,n.jsx)("span",{}):(0,n.jsxs)("button",{onClick:()=>g("delete"),className:"brand-danger-ghost -ml-1 flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-sm text-zinc-500 hover:text-red-600 dark:hover:text-red-400 hover:bg-red-500/10 transition-colors",children:[(0,n.jsx)(l.Z,{size:15}),"삭제"]}),(0,n.jsxs)("div",{className:"shrink-0 flex items-center gap-2",children:[(0,n.jsx)("button",{onClick:Z,className:J,children:"취소"}),(0,n.jsx)("button",{onClick:L,disabled:!u.trim()||S,className:(0,w.cn)("brand-primary-btn min-w-[64px] flex items-center justify-center px-4 py-2 rounded-lg text-sm font-medium transition-colors",u.trim()&&!S?"bg-toss-blue hover:bg-[#1B64DA] text-white":"bg-zinc-200 dark:bg-white/10 text-zinc-400 dark:text-zinc-500 cursor-not-allowed"),children:v?(0,n.jsx)(c.Z,{size:16,className:"animate-spin"}):"저장"})]})]})})]})]})}function $(){let{students:e,isLoaded:t}=(0,j.AF)(),l=(0,z.XC)(),M=(0,E.Dv)(),Z=e.filter(e=>"담임 학급"===e.homeClassId),{data:L=[],isLoading:R,error:T,refetch:K}=(0,A.We)(),{upsertActivity:F,deleteActivity:J}=(0,A.s9)(),{generateActivityDraft:$,generatingIds:G}=(0,I.l)(),{showToast:Y}=(0,S.pm)(),{openSettings:ee}=(0,O.Y)(),[et,er]=(0,s.useState)("all"),[en,ea]=(0,s.useState)("card"),[ei,es]=(0,s.useState)(!1),[el,eo]=(0,s.useState)(null),[ec,ed]=(0,s.useState)(null),[eu,ex]=(0,s.useState)(!1),[em,eh]=(0,s.use
1State)(null),[ef,ep]=(0,s.useState)(null),eb=(0,s.useRef)(null),eg=(0,s.useRef)(!1),ev=(0,s.useRef)(null),ey=(0,s.useRef)([]),[ew,ek]=(0,s.useState)(210),ej=(0,s.useRef)(null),{data:eN,setItem:ez,getItem:eC,savingKeys:eE,dirtyKeys:eD,recoveredKeys:eS,flushAll:eA}=(0,Q.M)({storageKeyPrefix:"activity-drafts",debounceMs:1e3,onSave:async(e,t)=>{let[r,n]=e.split(":");return(await (0,N.X)("upsertActivityDraft",{studentId:r,category:n,draft:t},l)).success}}),eI=(0,s.useRef)(void 0);eI.current=()=>{eA()},(0,s.useEffect)(()=>{let e=()=>{var e;"hidden"===document.visibilityState&&(null===(e=eI.current)||void 0===e||e.call(eI))},t=()=>{var e;return null===(e=eI.current)||void 0===e?void 0:e.call(eI)};return document.addEventListener("visibilitychange",e),window.addEventListener("pagehide",t),()=>{document.removeEventListener("visibilitychange",e),window.removeEventListener("pagehide",t)}},[]);let eM=(0,s.useRef)(null),eZ=(0,s.useCallback)(()=>{let e={};Z.forEach(t=>{e["".concat(t.id,":autonomous")]=eC("".concat(t.id,":autonomous"),""),e["".concat(t.id,":career")]=eC("".concat(t.id,":career"),"")}),ey.current.push(e),ey.current.length>20&&ey.current.shift()},[Z,eC]),eL=(0,s.useCallback)((e,t)=>{eC(e,"")!==t&&(eM.current&&clearTimeout(eM.current),eM.current=setTimeout(()=>{eZ()},500)),ez(e,t)},[eC,ez,eZ]),eR=(0,s.useCallback)(e=>{if("all"===et){let t=Math.floor(e/2);return t>=Z.length?null:{studentId:Z[t].id,category:e%2==0?"autonomous":"career"}}return e>=Z.length?null:{studentId:Z[e].id,category:et}},[et,Z]),eT=(0,s.useCallback)(e=>{let t=eR(e);return t?eC("".concat(t.studentId,":").concat(t.category),""):""},[eR,eC]),eK=(0,s.useCallback)(async()=>{if(!ec)return;let e=Math.min(ec.start.row,ec.end.row),t=Math.max(ec.start.row,ec.end.row),r="";for(let n=e;n<=t;n++)r+=(0,w.vB)(eT(n))+(n===t?"":"\r\n");try{await navigator.clipboard.writeText(r)}catch(e){console.error("Failed to copy",e)}},[ec,eT]),eF=(0,s.useCallback)((e,t)=>{let r;let n=null!=t?t:ec?{row:Math.min(ec.start.row,ec.end.row)}:null;if(!n)return;let a=(0,w.R3)(e);if(0===a.length)return;let i=a.length,s=!!t;if(s&&1===a.length&&1===a[0].length)return;eZ();let l=n.row;if(s&&i>1&&!e.includes("	")&&!e.includes("\r")&&(a=[[a.map(e=>e[0]).join("\n")]]),t||null===ec||ec.start.row===ec.end.row)r=a.length;else{let e=Math.min(ec.start.row,ec.end.row);r=Math.max(ec.start.row,ec.end.row)-e+1}for(let e=0;e<r;e++){var o;let t=eR(l+e);if(!t)break;let r=a[e%i];if(!r)continue;let n=null!==(o=r[0])&&void 0!==o?o:"";ez("".concat(t.studentId,":").concat(t.category),n)}},[ec,w.R3,eZ,eR,ez]),e_=(0,s.useCallback)(()=>{if(!ec)return;eZ();let e=Math.min(ec.start.row,ec.end.row),t=Math.max(ec.start.row,ec.end.row);for(let r=e;r<=t;r++){let e=eR(r);e&&ez("".concat(e.studentId,":").concat(e.category),"")}},[ec,eZ,eR,ez]),eQ=(e,t,r)=>{var n,a;let i=eb.current;i&&i.row===t&&i.col===r||((null===(a=e.target)||void 0===a?void 0:null===(n=a.dataset)||void 0===n?void 0:n.gridEditor)!=="true"&&e.preventDefault(),i&&e$(),eW(),ex(!0),eh({row:t,col:r}),ed({start:{row:t,col:r},end:{row:t,col:r}}))},eP=(e,t)=>{if(eu&&em){if(em.row!==e||em.col!==t){var r;null===(r=window.getSelection())||void 0===r||r.removeAllRanges()}ed({start:em,end:{row:e,col:t}})}},eq=(0,s.useCallback)(()=>{ex(!1),eh(null)},[]);(0,s.useEffect)(()=>(window.addEventListener("mouseup",eq),()=>window.removeEventListener("mouseup",eq)),[eq]),(0,s.useEffect)(()=>{let e=e=>{let t=ej.current;t&&ek(Math.max(120,Math.min(640,t.startWidth+(e.clientX-t.startX))))},t=()=>{ej.current=null};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",t),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",t)}},[]);let eU=(e,t)=>{if(!ec)return!1;let r=Math.min(ec.start.row,ec.end.row),n=Math.max(ec.start.row,ec.end.row),a=Math.min(ec.start.col,ec.end.col),i=Math.max(ec.start.col,ec.end.col);return e>=r&&e<=n&&t>=a&&t<=i},eX="all"===et?2*Z.length:Z.length,eH=(()=>
1{if(!ec||ec.start.row!==ec.end.row)return null;let e=ec.start.row;return eR(e)?e:null})(),eO=e=>eH===e,eB=e=>(null==ef?void 0:ef.row)===e,eW=()=>{eg.current=!0};(0,s.useEffect)(()=>{var e;if(!eg.current||(eg.current=!1,null===eH))return;let t=null===(e=ev.current)||void 0===e?void 0:e.querySelector('[data-grid-editor="true"]');if(!t||(t!==document.activeElement&&t.focus({preventScroll:!0}),eb.current))return;let r=t.value.length;t.setSelectionRange(r,r)});let eJ=e=>{var t,r;null===(r=ev.current)||void 0===r||null===(t=r.querySelector('[data-grid-row="'.concat(e,'"]')))||void 0===t||t.scrollIntoView({block:"nearest"})},eV=e=>{let t=Math.max(0,Math.min(eX-1,e));ed({start:{row:t,col:0},end:{row:t,col:0}}),eW(),eJ(t)},e$=()=>{eb.current=null,ep(null)},eG=e=>{var t;(null===(t=eb.current)||void 0===t?void 0:t.row)!==e&&eR(e)&&(ed({start:{row:e,col:0},end:{row:e,col:0}}),eb.current={row:e,col:0},ep({row:e,col:0}),eW())},eY=e=>{tp(e.target),e$()},e0=(e,t)=>{if(eb.current)return;if(e.detail>=2){eG(t);return}let r=e.currentTarget,n=r.value.length;r.setSelectionRange(n,n)},e1=e=>{eb.current||eG(e)},e2=()=>{eM.current&&(clearTimeout(eM.current),eM.current=null);let e=ey.current.pop();e&&Object.entries(e).forEach(e=>{let[t,r]=e;return ez(t,r)})},e5=(e,t)=>{if(!ec)return!1;let r=ec.start.row===ec.end.row;if(r&&("Enter"===e.key||"F2"===e.key))return e.preventDefault(),eG(ec.start.row),!0;if("ArrowUp"===e.key||"ArrowDown"===e.key){e.preventDefault();let t=Math.max(0,Math.min(eX-1,ec.end.row+("ArrowUp"===e.key?-1:1)));return e.shiftKey?(ed({start:ec.start,end:{row:t,col:0}}),eJ(t)):eV(t),!0}return"Tab"===e.key?(e.preventDefault(),eV(ec.end.row+(e.shiftKey?-1:1)),!0):"Delete"===e.key||"Backspace"===e.key?(e.preventDefault(),e_(),!0):(e.metaKey||e.ctrlKey)&&("c"===e.key||"C"===e.key)?(e.preventDefault(),eK(),!0):(e.metaKey||e.ctrlKey)&&("z"===e.key||"Z"===e.key)?(e.preventDefault(),e2(),!0):!!(!(null==t?void 0:t.yieldTyping)&&r&&(0,B.E$)(e))&&(e.preventDefault(),eG(ec.start.row),!0)},e3=(0,s.useRef)(e5);e3.current=e5;let e4=(e,t)=>{var r,n,a;if(e.nativeEvent.isComposing)return;if(!eB(t)||(null===(r=eb.current)||void 0===r?void 0:r.row)!==t){e5(e,{yieldTyping:!0})&&e.nativeEvent.stopImmediatePropagation();return}if((e.metaKey||e.ctrlKey)&&("z"===e.key||"Z"===e.key)){e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),e2();return}if("Enter"===e.key){if(e.preventDefault(),(0,B.xQ)({key:e.key,altKey:e.altKey,shiftKey:e.shiftKey,multiline:!0})){(0,B.yl)(e.currentTarget);return}e.nativeEvent.stopImmediatePropagation(),e$(),eV(t+1);return}if("Escape"===e.key||"Tab"===e.key){e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),e$(),eV("Tab"===e.key?t+(e.shiftKey?-1:1):t);return}let i=(0,B.Ud)({key:e.key,value:e.currentTarget.value,selectionStart:null!==(n=e.currentTarget.selectionStart)&&void 0!==n?n:0,selectionEnd:null!==(a=e.currentTarget.selectionEnd)&&void 0!==a?a:0,shiftKey:e.shiftKey});i&&0!==i.rowDelta&&(e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),e$(),eV(t+i.rowDelta))};(0,s.useEffect)(()=>{let e=e=>{if(!ec||eb.current)return;let t=document.activeElement;t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement||e3.current(e)},t=e=>{var t;if(!ec||eb.current)return;let r=document.activeElement;!(r instanceof HTMLElement&&"true"===r.dataset.gridEditor)&&r instanceof HTMLElement&&r.blur(),e.preventDefault(),eF((null===(t=e.clipboardData)||void 0===t?void 0:t.getData("text"))||"")};return window.addEventListener("keydown",e),window.addEventListener("paste",t),()=>{window.removeEventListener("keydown",e),window.removeEventListener("paste",t)}},[eK,eF,e_,ec,eZ]);
1let[e8,e6]=(0,s.useState)(null),[e9,e7]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let e=new URLSearchParams(window.location.search);if("1"!==e.get("resumeCredit"))return;e7(!0),e.delete("resumeCredit");let t=e.toString();window.history.replaceState(window.history.state,"","".concat(window.location.pathname).concat(t?"?".concat(t):"").concat(window.location.hash))},[]);let te=(0,j.fc)(),tt=P.H&&!M&&te,tr=(0,q.g)(),tn=tt&&!tr,[ta,ti]=(0,s.useState)(""),[ts,tl]=(0,s.useState)(!1);(0,s.useEffect)(()=>{var e;ei&&(null==l?void 0:null===(e=l.user)||void 0===e?void 0:e.id)?(async()=>{tl(!0);let e="".concat(window.location.origin,"/survey?class=").concat(encodeURIComponent("담임 학급"),"&u=").concat(encodeURIComponent(l.user.id));try{let t=await (0,C.C)(e);ti(t)}catch(t){ti(e)}finally{tl(!1)}})():ti("")},[ei,l]);let to=e=>{eo({id:"temp-".concat(Date.now()),studentId:e,category:"autonomous",activityName:"",details:"",createdAt:new Date().toISOString()})},tc=(0,s.useCallback)(async()=>{let e=await (0,N.X)("getActivityDrafts",{},l);e.success&&e.data&&e.data.forEach(e=>{ez("".concat(e.studentId,":").concat(e.category),t=>void 0!==t?t:e.draft)})},[l,ez]),td=async t=>{let r=e.find(e=>e.id===t.studentId),n=r?{name:r.name,number:r.number,grade:r.grade||1,classNum:r.classNum||0}:void 0;try{return await F.mutateAsync({...t,studentDetails:n}),!0}catch(e){return Y("활동 기록을 저장하지 못했습니다. 잠시 후 다시 시도해 주세요.","error"),!1}},tu=async e=>{try{return await J.mutateAsync(e),!0}catch(e){return Y("활동 기록을 삭제하지 못했습니다. 잠시 후 다시 시도해 주세요.","error"),!1}},tx=(0,s.useRef)(!1);(0,s.useEffect)(()=>{tx.current||(tx.current=!0,tc())},[tc]);let tm=(0,s.useCallback)(async()=>{if(M){e6(5);return}try{let e=await fetch("/api/credits");if(e.ok){let t=await e.json();e6(t.balance)}}catch(e){console.error("Failed to fetch credits:",e)}},[M]);(0,s.useEffect)(()=>{tm()},[tm]);let th=(t,r)=>{if(M){window.dispatchEvent(new CustomEvent("open-login-modal"));return}if((0,U.Ig)()){Y(X.Ad,"info");return}let n=e.find(e=>e.id===t);if(!n)return;let a=tf(t).filter(e=>e.category===r);if(0===a.length){Y("생성할 활동 기록이 없습니다. 먼저 활동을 추가해주세요.","warning");return}let i=a.map(e=>"".concat(e.activityName,": ").concat(e.details)).join("\n"),s=a.flatMap(e=>e.attachments||[]),l=s.filter(e=>"done"===e.extractStatus).length,o=s.filter(e=>"pending"===e.extractStatus).length;s.length>0&&(o>0?Y("첨부파일 ".concat(l,"개를 AI 자료로 사용합니다. (").concat(o,"개는 아직 분석 중)"),"info"):l>0&&Y("첨부파일 ".concat(l,"개를 AI 자료로 함께 활용합니다."),"info")),$({studentId:t,studentName:n.name,category:r,activityName:a.map(e=>e.activityName).join(", "),details:i,onSuccess:e=>{let n=e.draft||"";ez("".concat(t,":").concat(r),n)}})},tf=e=>L.filter(t=>t.studentId===e).filter(e=>"all"===et||e.category===et),tp=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e&&e instanceof HTMLTextAreaElement){if(t){var r;let t=null===(r=e.parentElement)||void 0===r?void 0:r.classList.contains("group/draft");e.style.height=t?"54px":"34px";return}e.style.height="auto",e.style.height="".concat(e.scrollHeight,"px")}},tb=e=>tp(e.target),tg=(0,s.useCallback)(async()=>{let e=await Promise.all([r.e(1425),r.e(6919)]).then(r.bind(r,2093)),t=[],n=[];if("card"===en){n=["학년","반","번호","이름","자율","진로"];let e=e=>{var t,r;let n=(null===(t=e.activityName)||void 0===t?void 0:t.trim())||"",a=(null===(r=e.details)||void 0===r?void 0:r.trim())||"",i=[];return n&&i.push("활동 제목: ".concat(n)),a&&i.push("활동 내용: ".concat(a)),i.join("\n")};Z.forEach(r=>{var n,a;let i=L.filter(e=>e.studentId===r.id&&"autonomous"===e.category).map(e).filter(Boolean).join("\n\n"),s=L.filter(e=>e.studentId===r.id&&"career"===e.category).map(e).filter(Boolean).join("\n\n");t.push([null!==(n=r.grade)&&void 0!==n?n:"",null!==(a=r.classNum)&&void 0!==a?a:"",r.number,r.name,i,s])})}else n=["학년","반","번호","이름","생기부(자율)","생기부(진로)"],Z.forEach(e
1=>{var r,n;let a=eC("".concat(e.id,":autonomous"),""),i=eC("".concat(e.id,":career"),"");t.push([null!==(r=e.grade)&&void 0!==r?r:"",null!==(n=e.classNum)&&void 0!==n?n:"",e.number,e.name,a,i])});let a=e.utils.aoa_to_sheet([n,...t]),i=e.utils.book_new();e.utils.book_append_sheet(i,a,"Data");let s="자율진로_".concat("card"===en?"활동":"생기부초안","_").concat((0,w.RJ)(),".xlsx");e.writeFile(i,s)},[en,Z,L,eC]);return(0,n.jsxs)("div",{className:"h-full flex 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 whitespace-nowrap",children:"자율\xb7진로"}),(0,n.jsx)("p",{className:"text-sm text-[#888] mt-1",children:"QR코드를 통해 학생들이 활동 기록을 제출하면 이곳에 자동으로 정리됩니다."})]}),(0,n.jsxs)("div",{className:"flex items-center gap-3 shrink-0",children:[(0,n.jsx)(k.s,{value:en,onChange:ea,"aria-label":"활동 보기 방식",className:"h-[38px] bg-[#f8f8f4] dark:bg-[#1A1A1A] border border-zinc-200 dark:border-white/5 rounded-lg p-1 mr-2",itemClassName:"h-full px-2 rounded-md",activeItem
1ClassName:"text-black dark:text-white",inactiveItemClassName:"text-zinc-500 hover:text-black dark:text-[#666] dark:hover:text-white",indicatorClassName:"bg-[#EEEEE8] dark:bg-white/10 rounded-md shadow-sm",options:[{key:"card",label:(0,n.jsx)(d,{size:18}),title:"카드 보기",ariaLabel:"카드 보기"},{key:"table",label:(0,n.jsx)(u.Z,{size:18}),title:"표 보기",ariaLabel:"표 보기"}]}),(0,n.jsx)(k.s,{value:et,onChange:er,"aria-label":"활동 분류 필터",className:"h-[38px] bg-[#f8f8f4] dark:bg-[#1A1A1A] border border-zinc-200 dark:border-white/5 rounded-lg p-1",itemClassName:"h-full px-3 text-sm font-medium rounded-md whitespace-nowrap",activeItemClassName:"text-black dark:text-white",inactiveItemClassName:"text-zinc-500 hover:text-black dark:text-[#666] dark:hover:text-white",indicatorClassName:"bg-[#EEEEE8] dark:bg-white/10 rounded-md shadow-sm",options:[{key:"all",label:"전체"},{key:"autonomous",label:"자율"},{key:"career",label:"진로"}]}),(0,n.jsxs)("button",{onClick:tg,className:"flex items-center gap-1.5 h-[38px] px-3 bg-[#f2f2ec] dark:bg-[#1A1A1A] border border-zinc-200 dark:border-white/5 text-zinc-600 dark:text-zinc-400 hover:text-black dark:hover:text-white hover:bg-[#EEEEE8] dark:hover:bg-[#222] rounded-lg transition text-sm font-medium whitespace-nowrap shrink-0",children:[(0,n.jsx)(x.Z,{size:16}),(0,n.jsx)("span",{children:"엑셀"})]}),"card"===en?(0,n.jsxs)("button",{onClick:()=>es(!0),className:"flex items-center gap-2 h-[38px] px-4 bg-blue-600 hover:bg-blue-700 text-white rounded-lg transition-colors border border-blue-600 whitespace-nowrap shrink-0",children:[(0,n.jsx)(m.Z,{size:18}),(0,n.jsx)("span",{className:"text-sm font-medium",children:"QR코드"})]}):tn?(0,n.jsxs)("button",{onClick:()=>{M?window.dispatchEvent(new CustomEvent("open-login-modal")):e7(!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)(g.O,{size:16,className:"text-black dark:text-white"}),"크레딧 ",null!=e8?e8:"-"]}):null]})]}),(0,n.jsx)("div",{ref:ev,className:"flex-1 overflow-y-auto custom-scrollbar",children:T?(0,n.jsx)(i.A,{message:"활동 기록을 불러오지 못했어요.",onRetry:()=>void K()}):(M||t)&&!R?0===Z.length?(0,n.jsx)("div",{className:"h-full flex items-center justify-center p-8",children:(0,n.jsx)(H.Z,{size:"lg",title:"담임 학급 학생이 없습니다",description:"학생 명단에서 먼저 담임 학급을 지정하고 학생을 등록해 주세요.",action:(0,n.jsx)("button",{onClick:()=>ee("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:"학생 등록하기"})})}):"table"===en?(0,n.jsxs)("table",{className:"w-full border-collapse table-fixed",children:[(0,n.jsxs)("colgroup",{children:[(0,n.jsx)("col",{style:{width:48}}),(0,n.jsx)("col",{style:{width:80}}),(0,n.jsx)("col",{style:{width:ew}}),(0,n.jsx)("col",{}),tt&&(0,n.jsx)("col",{style:{width:96}})]}),(0,n.jsx)("thead",{className:"sticky top-0 bg-[#0D0D0D] z-10",children:(0,n.jsxs)("tr",{className:"border-b border-t border-white/10",children:[(0,n.jsx)("th",{className:"text-center text-xs font-medium text-[#666] py-3 px-2",children:"번호"}),(0,n.jsx)("th",{className:"text-center text-xs font-medium text-[#666] py-3 px-2",children:"이름"}),(0,n.jsxs)("th",{className:"relative text-center text-xs font-medium text-[#666] py-3 px-2",children:["활동 제목",(0,n.jsx)("span",{role:"separator","aria-label":"활동 제목 열 너비 조절",onMouseDown:e=>{e.preventDefault(),e.stopPropagation(),ej.current={startX:e.clientX,startWidth:ew}},onDoubleClick:()=>ek(210),title:"끌어서 너비 조절 (두 번 클릭하면 기본값)",className:"absolute top-0 right-0 h-full w-2 translate-x-1/2 cursor-col-resize hover:bg-toss-blue/30 active:bg-toss-blue/50 transition-colors"})]}),(0,n.jsx)("th",{className:"text-center text-xs font-medium text-[#666] py-3 px-2",children:"생기부 초안"}),tt&&(0,n.jsx)("th",{className:"text-center text-xs font-medium text-[#666] py-3 px-2",children:"작성"})]})}),(0,n.jsx)("tbody",{children:Z.map((e,t)=>{let r=tf(e.id),a=r.filter(e=>"autonomous"===e.category),i=r.filter(e=>"career"===e.category),l=G.has("".concat(e.id,"-autonomous")),o=G.has("".concat(e.id,"-career")),d="all"===et?2*t:t,u="all"===et?2*t+1:t;return(0,n.jsxs)(s.Fragment,{children:[("all"===et||"autonomous"===et)&&(0,n.jsxs)("tr",{className:"border-b border-white/5 bg-[#121212]/30",children:[(0,n.jsx)("td",{rowSpan:"all"===et?2:1,className:"py-3 px-2 text-center text-sm text-[#888] border-r border-white/5",children:e.number}),(0,n.jsx)("td",{rowSpan:"all"===et?2:1,className:"py-3 px-2 text-center text-sm text-white font-medium border-r border-white/5",children:e.name}),(0,n.jsx)("td",{className:"py-2 px-3 text-sm text-gray-300 border-r border-white/5 border-b border-white/10 align-top",children:(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,n.jsx)("span",{className:"text-[10px] font-bold bg-vi
1olet-500/15 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300 px-1.5 py-0.5 rounded",children:"자율"}),a.length>0?a.map(e=>(0,n.jsxs)("div",{onClick:()=>eo(e),className:"px-2 py-1 rounded text-xs bg-white dark:bg-white/[0.02] border border-zinc-200 dark:border-white/10 text-zinc-700 dark:text-zinc-200 cursor-pointer hover:bg-zinc-100 dark:hover:bg-white/[0.05] transition-colors flex items-center gap-1 max-w-full min-w-0",children:[(0,n.jsx)("span",{className:"min-w-0 break-words",children:e.activityName}),e.attachments&&e.attachments.length>0&&(0,n.jsxs)("span",{className:"flex items-center gap-0.5 text-zinc-500 dark:text-zinc-400 font-bold shrink-0",title:"첨부파일 ".concat(e.attachments.length,"개"),children:[(0,n.jsx)(_.Z,{size:10}),e.attachments.length]})]},e.id)):(0,n.jsx)("span",{className:"text-gray-600 dark:text-gray-400 text-xs italic mt-0.5",children:"활동 없음"})]})}),(0,n.jsx)("td",{"data-grid-row":d,onMouseDown:e=>eQ(e,d,0),onDoubleClick:()=>eG(d),onMouseEnter:()=>eP(d,0),className:(0,w.cn)("p-0 border-r border-zinc-300 dark:border-white/5 border-b border-zinc-300 dark:border-white/10 hover:bg-black/5 dark:hover:bg-white/[0.02] focus-within:bg-black/5 dark:focus-within:bg-white/5 align-top transition-colors select-none",eU(d,0)&&"ring-1 ring-inset ring-blue-500 z-20",eU(d,0)&&!eB(d)&&"bg-blue-500/10 dark:bg-blue-500/20"),children:(0,n.jsxs)("div",{className:"relative group/draft h-full min-h-[54px]",children:[(0,n.jsxs)("div",{className:(0,w.cn)("absolute inset-0 px-2 pt-1.5 text-sm text-black dark:text-gray-300 pointer-events-none select-none flex flex-col transition-opacity",eO(d)&&"opacity-0 invisible"),children:[(0,n.jsx)("div",{className:"w-full whitespace-nowrap overflow-hidden",style:{textOverflow:"clip"},children:eC("".concat(e.id,":autonomous"),"").split("\n")[0]}),(eC("".concat(e.id,":autonomous"),"").includes("\n")||eC("".concat(e.id,":autonomous"),"").length>30)&&(0,n.jsx)("div",{className:"text-black dark:text-white text-[10px] leading-none mt-1 font-medium opacity-70",children:"... 더 보기"})]}),eO(d)&&(0,n.jsx)("textarea",{"data-grid-editor":"true",value:eC("".concat(e.id,":autonomous"),""),onChange:t=>{e1(d),eL("".concat(e.id,":autonomous"),t.target.value)},onBeforeInput:()=>e1(d),onCompositionStart:()=>e1(d),onMouseUp:e=>e0(e,d),onFocus:tb,onBlur:e=>{eY(e)},onKeyDown:e=>e4(e,d),onPaste:e=>{eb.current||(e.preventDefault(),e.nativeEvent.stopPropagation(),eF(e.clipboardData.getData("text"),{row:d}))},className:(0,w.cn)("w-full bg-transparent border border-transparent rounded-none px-2 pt-1.5 pb-6 text-sm text-black dark:text-gray-300 focus:outline-none focus:ring-0 resize-none overflow-hidden min-h-[54px] block",eB(d)?"caret-black dark:caret-white":"caret-transparent selection:bg-transparent")}),(0,n.jsx)("div",{className:"absolute top-2 right-2 opacity-0 group-hover/draft:opacity-100 transition-opacity pointer-events-none",children:eE.has("".concat(e.id,":autonomous"))?(0,n.jsx)(c.Z,{size:12,className:"animate-spin text-blue-500"}):eD.has("".concat(e.id,":autonomous"))?(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-amber-500",title:"저장 대기 중"}):eC("".concat(e.id,":autonomous"),"")&&(0,n.jsx)(h.Z,{size:12,className:"text-green-500 opacity-40"})}),(0,n.jsxs)("div",{className:(0,w.cn)("absolute bottom-1 right-2 text-[9px] font-mono pointer-events-none opacity-50 group-hover/draft:opacity-100",(0,w.CQ)(eC("".concat(e.id,":autonomous"),""))>1500?"text-red-400":"text-green-500"),children:[(0,w.CQ)(eC("".concat(e.id,":autonomous"),""))," / 1500"]})]})}),tt&&(0,n.jsx)("td",{className:"p-0 text-center border-b border-white/10",children:(0,n.jsx)("div",{className:"py-1.5 px-1 flex items-center justify-center",children:(0,n.jsx)("button",{onClick:()=>th(e.id,"autonomous"),disabled:l||0===a.length,className:"px-3 py-1 bg-zinc-100 hover:bg-zinc-200 dark:bg-zinc-200 dark:hover:bg-zinc-300 text-black border border-zinc-200 dark:border-zinc-300 rounded-full transition text-[11px] font-medium whitespace-nowrap shadow-sm disabled:opacity-50 flex items-center justify-center gap-1.5",children:l?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(b.W,{size:12,className:"text-zinc-600 dark:text-zinc-400"}),(0,n.jsx)("span",{children:"생성 중"})]}):(0,n.jsx)("span",{children:"AI 작성"})})})})]}),("all"===et||"career"===et)&&(0,n.jsxs)("tr",{className:"border-b border-white/10 bg-[#121212]/30",children:["career"===et&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("td",{className:"py-3 px-2 text-center text-sm text-[#888] border-r border-white/5",children:e.number}),(0,n.jsx)("td",{className:"py-3 px-2 text-center text-sm text-white font-medium border-r border-white/5",children:e.name})]}),(0,n.jsx)("td",{className:"py-2 px-3 text-sm text-gray-300 border-r border-white/5 align-top",children:(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,n.jsx)("span",{className:"text-[10px] font-bold bg-teal-500/15 text-teal-700 dark:bg-teal-500/20 dark:text-teal-300 px-1.5 py-0.5 rounded",children:"진로"}),i.length>0?i.map(e=>(0,n.jsxs)("div",{onClick:()=>eo(e),className:"px-2 py-1 rounded text-xs bg-white dark:bg-white/[0.02] border border-zinc-200 dark:border-white/10 text-zinc-700 dark:text-zinc-200 cursor-pointer hover:bg-zinc-100 dark:hover:bg-white/[0.05] transition-colors flex items-center gap-1 max-w-full min-w-0",children:[(0,n.jsx)("span",{className:"min-w-0 break-words",children:e.activityName}),e.attachments&&e.attachments.length>0&&(0,n.jsxs)("span",{className:"flex items-center gap-0.5 text-zinc-500 dark:text-zinc-400 font-bold shrink-0",title:"첨부파일 ".concat(e.attachments.length,"개"),children:[(0,n.jsx)(_.Z,{size:10}),e.attachments.length]})]},e.id)):(0,n.jsx)("span",{className:"text-gray-600 dark:text-gray-400 text-xs italic mt-0.5",children:"활동 없음"})]})}),(0,n.jsx)("td",{"data-grid-row":u,onMouseDown:e=>eQ(e,u,0),onDoubleClick:()=>eG(u),onMouseEnter:()=>eP(u,0),className:(0,w.cn)("p-0 border-r border-zinc-300 dark:border-white/5 hover:bg-black/5 dark:hover:bg-white/[0.02] focus-within:bg-black/5 dark:focus-within:bg-white/5 align-top transition-colors border-b border-zinc-300 dark:border-white/10 select-none",eU(u,0)&&"ring-1 ring-inset ring-blue-500 z-20",eU(u,0)&&!eB(u)&&"bg-blue-500/10 dark:bg-blue-500/20"),children:(0,n.jsxs)("div",{className:"relative group/draft h-full min-h-[54px]",children:[(0,n.jsxs)("div",{className:(0,w.cn)("absolute inset-0 px-2 pt-1.5 text-sm text-black dark:text-gray-300 pointer-events-none select-none flex flex-col transition-opacity",eO(u)&&"opacity-0 invisible"),children:[(0,n.jsx)("div",{className:"w-full whitespace-nowrap overflow-hidden",style:{textOverflow:"clip"},children:eC("".concat(e.id,":career"),"").split("\n")[0]}),(eC("".concat(e.id,":career"),"").includes("\n")||eC("".concat(e.id,":career"),"").length>30)&&(0,n.jsx)("div",{className:"text-black dark:text-white text-[10px] leading-none mt-1 font-medium opacity-70",children:"... 더 보기"})]}),eO(u)&&(0,n.jsx)("textarea",{"data-grid-editor":"true",value:eC("".concat(e.id,":career"),""),onChange:t=>{e1(u),eL("".concat(e.id,":career"),t.target.value)},onBeforeInput:()=>e1(u),onCompositionStart:()=>e1(u),onMouseUp:e=>e0(e,u),onFocus:tb,onBlur:e=>{eY(e)},onKeyDown:e=>e4(e,u),onPaste:e=>{eb.current||(e.preventDefault(),e.nativeEvent.stopPropagation(),eF(e.clipboardData.getData("text"),{row:u}))},className:(0,w.cn)("w-full bg-transparent border border-transparent roun
1ded-none px-2 pt-1.5 pb-6 text-sm text-black dark:text-gray-300 focus:outline-none focus:ring-0 resize-none overflow-hidden min-h-[54px] block",eB(u)?"caret-black dark:caret-white":"caret-transparent selection:bg-transparent")}),(0,n.jsx)("div",{className:"absolute top-2 right-2 opacity-0 group-hover/draft:opacity-100 transition-opacity pointer-events-none",children:eE.has("".concat(e.id,":career"))?(0,n.jsx)(c.Z,{size:12,className:"animate-spin text-blue-500"}):eD.has("".concat(e.id,":career"))?(0,n.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-amber-500",title:"저장 대기 중"}):eC("".concat(e.id,":career"),"")&&(0,n.jsx)(h.Z,{size:12,className:"text-green-500 opacity-40"})}),(0,n.jsxs)("div",{className:(0,w.cn)("absolute bottom-1 right-2 text-[9px] font-mono pointer-events-none opacity-50 group-hover/draft:opacity-100",(0,w.CQ)(eC("".concat(e.id,":career"),""))>2100?"text-red-400":"text-green-500"),children:[(0,w.CQ)(eC("".concat(e.id,":career"),""))," / 2100"]})]})}),tt&&(0,n.jsx)("td",{className:"p-0 text-center",children:(0,n.jsx)("div",{className:"py-1.5 px-1 flex items-center justify-center",children:(0,n.jsx)("button",{onClick:()=>th(e.id,"career"),disabled:o||0===i.length,className:"px-3 py-1 bg-zinc-100 hover:bg-zinc-200 dark:bg-zinc-200 dark:hover:bg-zinc-300 text-black border border-zinc-200 dark:border-zinc-300 rounded-full transition text-[11px] font-medium whitespace-nowrap shadow-sm disabled:opacity-50 flex items-center justify-center gap-1.5",children:o?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(g.O,{size:12,strokeWidth:3,className:"animate-spin text-zinc-600 dark:text-zinc-400"}),(0,n.jsx)("span",{children:"생성 중"})]}):(0,n.jsx)("span",{children:"AI 작성"})})})})]})]},e.id)})})]}):(0,n.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4 gap-4",children:Z.map(e=>(tf(e.id),(0,n.jsxs)("div",{className:"bg-[#121212] rounded-xl border border-white/5 p-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 mb-2 pb-2 border-b border-white/5",children:[(0,n.jsx)("span",{className:"w-5 h-5 rounded-full bg-white/10 flex items-center justify-center text-[10px] font-bold text-[#888]",children:e.number}),(0,n.jsx)("span",{className:"text-sm font-bold text-white",children:e.name}),(0,n.jsx)("button",{"aria-label":"추가",onClick:()=>to(e.id),className:"ml-auto p-1 text-[#444] hover:text-white hover:bg-white/10 rounded transition activity-add-btn",children:(0,n.jsx)(f.Z,{size:14})})]}),(0,n.jsx)("div",{className:"space-y-1",children:(()=>{let t=[...L.filter(t=>t.studentId===e.id).filter(e=>"all"===et||e.category===et||!e.activityName)].sort((e,t)=>e.category===t.category?e.createdAt.localeCompare(t.createdAt):"autonomous"===e.category?-1:1);return 0===t.length?(0,n.jsx)("div",{className:"text-center text-[#333] text-xs py-3 activity-empty-text",children:"+ 버튼으로 활동 추가"}):t.map(e=>(0,n.jsx)(W,{activity:e,onUpdate:td,onDelete:tu,onClick:()=>eo(e)},e.id))})()})]},e.id)))}):(0,n.jsx)(a.ContentLoadingState,{variant:"table",label:"활동 기록을 불러오고 있어요"})}),ei&&(0,n.jsx)("div",{className:"fixed inset-0 bg-black/70 flex items-center justify-center z-50 p-4",onClick:()=>es(!1),children:(0,n.jsxs)("div",{className:"bg-[#1A1A1A] rounded-2xl p-6 max-w-sm w-full shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,n.jsx)("h3",{className:"text-lg font-bold text-white",children:"QR 코드 공유"}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(y.a,{value:ta,disabled:ts}),(0,n.jsx)("button",{"aria-label":"닫기",onClick:()=>es(!1),className:"p-1 text-[#666] hover:text-white transition-colors",children:(0,n.jsx)(o.Z,{size:20})})]})]}),(0,n.jsx)("div",{id:"activity-qr-code",className:"bg-white rounded-xl p-6 flex items-center justify-center mb-4 min-h-[248px]",children:ts?(0,n.jsxs)("div",{className:"flex flex-col items-center justify-center text-zinc-400 gap-2",children:[(0,n.jsx)(c.Z,{className:"animate-spin text-zinc-300",size:24}),(0,n.jsx)("span",{className:"text-sm",children:"링크 생성 중..."})]}):ta?(0,n.jsx)(v.t,{value:ta,size:200,level:"H"}):null}),(0,n.jsx)(y.A,{value:ta,pending:ts}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsxs)("button",{onClick:()=>{let e=document.querySelector("#activity-qr-code svg");if(e){let t=new XMLSerializer().serializeToString(e),r=document.createElement("canvas"),n=r.getContext("2d"),a=new Image;a.onload=()=>{r.width=a.width,r.height=a.height,null==n||n.drawImage(a,0,0);let e=document.createElement("a");e.download="activity-qr-code.png",e.href=r.toDataURL("image/png"),e.click()},a.src="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(t)))}},className:"flex-1 flex items-center justify-center gap-2 py-2.5 bg-white/10 hover:bg-white/20 text-white rounded-lg transition-colors text-sm font-medium",children:[(0,n.jsx)(x.Z,{size:16}),"다운로드"]}),(0,n.jsxs)("button",{onClick:()=>{let e=window.open("","_blank");if(e){let t=document.querySelector("#activity-qr-code svg");e.document.write('\n                                            <html>\n                                                <head><title>QR 코드 인쇄</title></head>\n                                                <body style="display:flex;justify-content:center;align-items:center;height:100vh;margin:0;">\n                                                    '.concat((null==t?void 0:t.outerHTML)||"","\n                                                </body>\n                                            </html>\n                                        ")),e.document.close(),e.print()}},className:"flex-1 flex items-center justify-center gap-2 py-2.5 bg-white/10 hover:bg-white/20 text-white rounded-lg transition-colors text-sm font-medium",children:[(0,n.jsx)(p.Z,{size:16}),"인쇄"]})]})]})}),el&&(0,n.jsx)(V,{activity:el,studentLabel:(t=>{let r=e.find(e=>e.id===t);if(!r)return;let n=[];return r.grade&&r.classNum&&n.push("".concat(r.grade,"학년 ").concat(r.classNum,"반")),r.number&&n.push("".concat(r.number,"번")),n.push(r.name),n.join(" ")})(el.studentId),onSave:td,onDelete:tu,onClose:()=>eo(null)}),tn&&(0,n.jsx)(D.Z,{isOpen:e9,onClose:()=>e7(!1),currentBalance:null!=e8?e8:0,onChargeComplete:e=>{e6(e),e7(!1)}})]})}},16348:function(e,t,r){"use strict";r.d(t,{We:function(){return h},ZJ:function(){return m},s9:function(){return f}});var n=r(71632),a=r(29827),i=r(21770),s=r(83008),l=r(67920),o=r(27526),c=r(2265),d=r(54392),u=r(98319),x=r(54696);let m={all:["activities"],lists:()=>[...m.all,"list"],list:e=>[...m.lists(),e]};function h(e){var t,r,a,i;let{data:u,status:h}=(0,o.kP)(),f=(0,l.XC)(),p=(0,x.Dv)(),b=(0,c.useRef)(null==u?void 0:null===(t=u.user)||void 0===t?void 0:t.id);return(null==u?void 0:null===(r=u.user)||void 0===r?void 0:r.id)&&
1(b.current=u.user.id),(0,n.a)({queryKey:[...m.lists(),{userId:p?"guest":null!==(i=null==u?void 0:null===(a=u.user)||void 0===a?void 0:a.id)&&void 0!==i?i:b.current,...e}],enabled:"loading"!==h,queryFn:async()=>{if(p)return(await d.iT()).sort((e,t)=>new Date(t.createdAt).getTime()-new Date(e.createdAt).getTime());let t=await (0,s.X)("getActivityRecords",e||{},f);if(t.success&&t.data)return t.data;throw Error(t.error||"Failed to load activities")}})}function f(){let e=(0,a.NL)(),t=(0,l.XC)(),{showToast:r}=(0,u.pm)(),n=(0,x.Dv)();return{upsertActivity:(0,i.D)({mutationFn:async e=>{var r;if(!(null===(r=e.activityName)||void 0===r?void 0:r.trim()))return null;if(n){let t={...e,id:e.id&&e.id.startsWith("temp-")?crypto.randomUUID():e.id||crypto.randomUUID(),createdAt:e.createdAt||new Date().toISOString(),details:e.details||""};return await d.LI(t),t}let a=await (0,s.X)("upsertActivityRecord",{id:e.id&&e.id.startsWith("temp-")?void 0:e.id,studentId:e.studentId,category:e.category,activityName:e.activityName,details:e.details,studentDetails:e.studentDetails},t);if(!a.success)throw Error(a.error||"Failed to save activity");return a.data},onMutate:async t=>{await e.cancelQueries({queryKey:m.lists()});let r=e.getQueryData(m.lists());return e.setQueryData(m.lists(),e=>{let r={...t,id:t.id||"temp-".concat(Date.now()),createdAt:t.createdAt||new Date().toISOString(),details:t.details||""};return e?e.find(e=>e.id===t.id)?e.map(e=>e.id===t.id?{...e,...r}:e):[...e,r]:[r]}),{previousActivities:r}},onError:(t,n,a)=>{(null==a?void 0:a.previousActivities)&&e.setQueryData(m.lists(),a.previousActivities),r((null==t?void 0:t.message)||"활동 기록을 저장하지 못했습니다. 잠시 후 다시 시도해 주세요.","error")},onSettled:()=>{e.invalidateQueries({queryKey:m.lists()})}}),deleteActivity:(0,i.D)({mutationFn:async e=>{if(n)return await d.Qn(e),{success:!0,id:e};let r=await (0,s.X)("deleteActivityRecord",{id:e},t);if(!r.success)throw Error(r.error||"Failed to delete activity");return r.data},onMutate:async t=>{await e.cancelQueries({queryKey:m.lists()});let r=e.getQueryData(m.lists());return e.setQueryData(m.lists(),e=>e?e.filter(e=>e.id!==t):[]),{previousActivities:r}},onError:(t,n,a)=>{(null==a?void 0:a.previousActivities)&&e.setQueryData(m.lists(),a.previousActivities),r((null==t?void 0:t.message)||"활동 기록을 삭제하지 못했습니다. 잠시 후 다시 시도해 주세요.","error")},onSettled:()=>{e.invalidateQueries({queryKey:m.lists()})}}),generateDraft:(0,i.D)({mutationFn:async e=>{if(n)throw Error("게스트 모드에서는 AI 생성을 사용할 수 없습니다.");let r=await (0,s.X)("generateActivityDraft",{studentId:e.studentId,studentName:e.studentName,category:e.category,activityName:e.activityName,details:e.details},t);if(!r.success){if(r.needCredit)throw Error("크레딧이 부족합니다.");throw Error(r.error||"생성에 실패했습니다.")}return{...r.data,vars:e}}})}}},82374:function(e,t,r){"use strict";r.d(t,{H:function(){return n}});let n=!0},98907:function(e,t,r){"use strict";r.d(t,{$L:function(){return d},As:function(){return i},IL:function(){return l},Kl:function(){return s},_8:function(){return a},_l:function(){return n},gA:function(){return o},zN:function(){return c}});let n="naemo-checkout-draft",a="naemo-credit-draft",i=!1;function s(e){return i&&"SUBSCRIPTION"===e?"SUBSCRIPTION":"ONETIME"}function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return"number"==typeof e&&Number.isSafeInteger(e)&&e>0?e:t}function o(e){return"string"==typeof e&&["evaluation-record","behavior-record","activity"].includes(e)?e:"evaluation-record"}function c(e){try{let t=JSON.parse(sessionStorage.getItem(e)||"null");return t&&"object"==typeof t&&!Array.isArray(t)?t:null}catch(e){return null}}function d(e,t){try{sessionStorage.setItem(e,JSON.stringify(t))}catch(e){}}},12355:function(e){e.exports={expand:"QRShareControls_expand__lXb9E",collapse:"QRShareControls_collapse__MxHhH",link:"QRShareControls_link__jLWpe",fullscreen:"QRShareControls_fullscreen___R7RR",code:"QRShareControls_code__5kzLF"}}}]);

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.