PageSourceSearch

https://naemo.ai/_next/static/chunks/9589.e342062c734e78b1.js

js naemo.ai collected 2026-10-02 01:16:00 UTC 26,938 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9589],{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 h},a:function(){return v}});var n=r(57437),i=r(2265),a=r(54887),s=r(45884),l=r(34415),c=r(30401),o=r(78867),d=r(35398),u=r(34137),x=r(98319),m=r(12355),b=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 v(e){let{value:t,disabled:r=!1}=e,[c,o]=(0,i.useState)(!1),x=(0,i.useRef)(null),m=(0,i.useRef)(null),v=(0,i.useRef)(null),h=()=>{p(x.current),o(!1)};(0,u.j)(h,c),(0,i.useEffect)(()=>{var e;if(!c)return;let t=x.current,r=document.body.style.overflow;document.body.style.overflow="hidden",null===(e=v.current)||void 0===e||e.focus();let n=!1,i=()=>{f()===t?n=!0:n&&o(!1)};document.addEventListener("fullscreenchange",i),document.addEventListener("webkitfullscreenchange",i);let a=m.current;return()=>{document.body.style.overflow=r,document.removeEventListener("fullscreenchange",i),document.removeEventListener("webkitfullscreenchange",i),p(t),null==a||a.focus()}},[c]);let g=async()=>{(0,a.flushSync)(()=>o(!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:b().expand,onClick:g,disabled:r||!t,"aria-label":"QR 코드 전체화면",title:"QR 코드 전체화면",children:(0,n.jsx)(s.Z,{size:20,"aria-hidden":"true"})}),c&&(0,a.createPortal)((0,n.jsxs)("div",{ref:x,className:b().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=v.current)||void 0===t||t.focus()}},children:[(0,n.jsx)("button",{ref:v,type:"button",className:b().collapse,onClick:h,"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:b().code})]}),document.body)]})}function h(e){let{value:t,pending:r=!1}=e,[a,s]=(0,i.useState)(!1),{showToast:l}=(0,x.pm)();(0,i.useEffect)(()=>{if(!a)return;let e=window.setTimeout(()=>s(!1),2e3);return()=>window.clearTimeout(e)},[a]);let d=async()=>{try{await navigator.clipboard.writeText(t),s(!0),l("링크가 복사되었습니다.","success")}catch(e){l("링크를 복사하지 못했습니다. 주소를 선택해 직접 복사해 주세요.","error")}};return(0,n.jsxs)("div",{className:b().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":a?"링크 복사됨":"링크 복사",title:a?"복사됨":"링크 복사",children:a?(0,n.jsx)(c.Z,{size:18,"aria-hidden":"true"}):(0,n.jsx)(o.Z,{size:18,"aria-hidden":"true"})})]})}},99589:function(e,t,r){"use strict";r.r(t),r.d(t,{default:function(){return I}});var n=r(57437),i=r(10136),a=r(2265),s=r(67404),l=r(99397),c=r(88893),o=r(48736),d=r(40875),u=r(18930),x=r(32489),m=r(92735),b=r(17625),f=r(35398),p=r(97831),v=r(93448),h=r(25450),g=r(4908),y=r(67920),w=r(54696),k=r(16348),z=r(39136),j=r(83008),N=r(9235),C=r(98319),E=r(54292),R=r(43059),D=r(35596),S=r(62102),A=r(51817);function I(){let{students:e,isLoading:t}=(0,g.AF)(),{data:r=[],isLoading:I}=(0,k.We)(),{upsertActivity:_,deleteActivity:F,generateDraft:L}=(0,k.s9)(),{showToast:Q}=(0,C.pm)(),T=(0,y.XC)(),Z=(0,i.N)(),q=(0,w.Dv)()?e:e.filter(e=>"담임 학급"===e.homeClassId),[M,P]=(0,a.useState)("all"),[U,X]=(0,a.useState)(!1),[B,H]=(0,a.useState)(null),[K,W]=(0,a.useState)(!1),[O,J]=(0,a.useState)(""),[V,$]=(0,a.useState)(!1),[G,Y]=(0,a.useState)({}),ee=e=>{Y(t=>({...t,[e]:!t[e]}))},{getItem:et,setItem:er}=(0,z.M)({storageKeyPrefix:"activity-drafts",debounceMs:1e3,onSave:async(e,t)=>{let[r,n]=e.split(":");return(await (0,j.X)("upsertActivityDraft",{studentId:r,category:n,draft:t},T)).success}});(0,a.useEffect)(()=>{var e;K&&(null==T?void 0:null===(e=T.user)||void 0===e?void 0:e.id)?(async()=>{$(!0);let e="".concat(window.location.origin,"/survey?class=").concat(encodeURIComponent("담임 학급"),"&u=").concat(encodeURIComponent(T.user.id));try{let t=await (0,S.C)(e);J(t)}catch(t){J(e)}finally{$(!1)}})():J("")},[K,T]);let en=e=>r.filter(t=>t.studentId===e).filter(e=>"all"===M||e.category===M),ei=e=>{H({id:"temp-".concat(Date.now()),studentId:e,category:"autonomous",activityName:"",details:"",createdAt:new Date().toISOString()}),X(!0)},ea=e=>{H(e),X(!0)},es=e=>{(async()=>{await Z({title:"이 기록을 삭제할까요?",description:"삭제한 활동 기록은 되돌릴 수 없습니다."})&&(F.mutate(e),X(!1))})()};return(0,n.jsxs)("div",{className:"flex flex-col h-full bg-[#FBFBF9] dark:bg-[#111]",children:[(0,n.jsxs)("div",{className:"flex-1 overflow-y-auto px-4 mobile-scroll-bottom relative",children:[(0,n.jsxs)("div",{className:"sticky top-0 z-30 flex items-center justify-between py-2 transition pointer-events-none",children:[(0,n.jsx)("div",{className:"flex items-center gap-1.5 overflow-x-auto no-scrollbar py-1 pointer-events-auto",children:["all","autonomous","career"].map(e=>(0,n.jsx)("button",{onClick:()=>P(e),className:(0,h.Fk)(M===e,"whitespace-nowrap"),children:"all"===e?"전체":"autonomous"===e?"자율":"진로"},e))}),(0,n.jsxs)("button",{onClick:()=>W(!0),className:"pointer-events-auto flex items-center gap-1.5 px-4 py-1.5 bg-white dark:bg-zinc-900 border border-zinc-200/60 dark:border-zinc-800 text-zinc-700 dark:text-zinc-300 rounded-2xl transition shadow-sm active:scale-[0.95]",children:[(0,n.jsx)(s.Z,{size:14,className:"text-blue-600 dar
1k:text-blue-400"}),(0,n.jsx)("span",{className:"text-[13px] font-semibold",children:"QR코드"})]})]}),(0,n.jsx)("div",{className:"space-y-3",children:t||I?(0,n.jsx)(E.r,{label:"학생 활동을 불러오고 있어요"}):0===q.length?(0,n.jsx)("div",{className:"flex flex-col items-center justify-center py-20 text-zinc-400 dark:text-zinc-500 text-sm",children:(0,n.jsx)("p",{children:"검색 결과가 없습니다."})}):q.map(e=>{let t=en(e.id);return(0,n.jsxs)(R.ZP,{className:"space-y-3",children:[(0,n.jsxs)(R.Lz,{children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"text-xs font-bold text-zinc-400 dark:text-zinc-500",children:e.number}),(0,n.jsx)("span",{className:"text-sm font-bold text-zinc-900 dark:text-zinc-100",children:e.name})]}),(0,n.jsx)("button",{"aria-label":"추가",onClick:()=>ei(e.id),className:"p-1 text-zinc-400 dark:text-zinc-500 active:scale-90 transition",children:(0,n.jsx)(l.Z,{size:18})})]}),(0,n.jsx)("div",{className:"space-y-2",children:0===t.length?(0,n.jsx)("p",{className:"text-[12px] text-zinc-400 dark:text-zinc-500 py-1",children:"추가된 활동 기록이 없습니다."}):t.map(e=>(0,n.jsxs)("div",{onClick:()=>ea(e),className:"flex items-center gap-2 p-2 rounded-lg border border-zinc-200 dark:border-white/10 bg-zinc-50 dark:bg-white/[0.02] transition-colors active:scale-[0.98]",children:[(0,n.jsx)("span",{className:(0,v.cn)("px-1.5 py-0.5 text-[10px] font-bold rounded uppercase","autonomous"===e.category?"bg-violet-500/15 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300":"bg-teal-500/15 text-teal-700 dark:bg-teal-500/20 dark:text-teal-300"),children:"autonomous"===e.category?"자율":"진로"}),(0,n.jsx)("span",{className:"flex-1 text-[13px] text-zinc-800 dark:text-zinc-200 truncate",children:e.activityName}),(0,n.jsx)(c.Z,{size:12,className:"text-zinc-400 dark:text-zinc-500"})]},e.id))}),(0,n.jsxs)("div",{className:"pt-2 border-t border-zinc-100 dark:border-white/5",children:[(0,n.jsxs)("button",{onClick:()=>ee(e.id),className:"flex items-center justify-between w-full py-1.5 text-xs text-zinc-500 dark:text-zinc-400 active:text-zinc-800 dark:active:text-zinc-200 transition",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1.5 font-medium",children:[(0,n.jsx)(o.Z,{size:13,className:"text-blue-500"}),"생기부 초안 확인\xb7수정"]}),(0,n.jsx)(d.Z,{size:14,className:(0,v.cn)("transition-transform duration-200",G[e.id]&&"rotate-180")})]}),G[e.id]&&(0,n.jsxs)("div",{className:"mt-2 space-y-3 pt-2 border-t border-dashed border-zinc-200 dark:border-white/10",children:[(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"flex items-center justify-between mb-1",children:[(0,n.jsx)("span",{className:"text-[11px] font-bold text-violet-600 dark:text-violet-400",children:"자율활동 초안"}),(0,n.jsxs)("span",{className:(0,v.cn)("text-[10px] font-mono",(0,N.C)(et("".concat(e.id,":autonomous"),""))>1500?"text-red-500 font-bold":"text-zinc-400"),children:[(0,N.C)(et("".concat(e.id,":autonomous"),""))," / 1,500B"]})]}),(0,n.jsx)("textarea",{rows:3,value:et("".concat(e.id,":autonomous"),""),onChange:t=>er("".concat(e.id,":autonomous"),t.target.value),placeholder:"자율활동 초안을 입력하세요...",className:"w-full bg-zinc-50 dark:bg-zinc-900/60 border border-zinc-200 dark:border-white/10 rounded-lg p-2 text-xs text-zinc-800 dark:text-zinc-100 resize-none focus:outline-none focus:ring-2 focus:ring-violet-500"})]}),(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"flex items-center justify-between mb-1",children:[(0,n.jsx)("span",{className:"text-[11px] font-bold text-teal-600 dark:text-teal-400",children:"진로활동 초안"}),(0,n.jsxs)("span",{className:(0,v.cn)("text-[10px] font-mono",(0,N.C)(et("".concat(e.id,":career"),""))>2100?"text-red-500 font-bold":"text-zinc-400"),children:[(0,N.C)(et("".concat(e.id,":career"),""))," / 2,100B"]})]}),(0,n.jsx)("textarea",{rows:3,value:et("".concat(e.id,":career"),""),onChange:t=>er("".concat(e.id,":career"),t.target.value),placeholder:"진로활동 초안을 입력하세요...",className:"w-full bg-zinc-50 dark:bg-zinc-900/60 border border-zinc-200 dark:border-white/10 rounded-lg p-2 text-xs text-zinc-800 dark:text-zinc-100 resize-none focus:outline-none focus:ring-2 focus:ring-teal-500"})]})]})]})]},e.id)})})]}),(0,n.jsx)(D.Z,{isOpen:U,onClose:()=>X(!1),title:(null==B?void 0:B.id.startsWith("temp-"))?"활동 기록 추가":"활동 기록 수정",children:B&&(0,n.jsxs)("div",{className:"space-y-5 pb-6",children:[(0,n.jsx)("div",{className:"grid grid-cols-2 gap-2",children:["autonomous","career"].map(e=>(0,n.jsx)("button",{onClick:()=>H({...B,category:e}),className:(0,v.cn)("py-2.5 rounded-xl text-sm font-bold transition border",B.category===e?"bg-zinc-800 text-white dark:bg-zinc-100 dark:text-zinc-900 border-transparent":"bg-white text-zinc-500 border-zinc-200 dark:bg-zinc-800 dark:border-zinc-700 dark:text-zinc-400"),children:"autonomous"===e?"자율":"진로"},e))}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("label",{className:"text-xs font-bold text-zinc-500 dark:text-zinc-400 uppercase ml-1",children:"활동 제목"}),(0,n.jsx)("input",{type:"text",value:B.activityName,onChange:e=>H({...B,activityName:e.target.value}),placeholder:"활동명을 입력하세요",className:"w-full px-4 py-3 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl text-[16px] text-zinc-900 dark:text-zinc-100 placeholder:text-zinc-400 dark:placeholder:text-zinc-500 focus:outline-none focus:border-blue-500"})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("label",{className:"text-xs font-bold text-zinc-500 dark:text-zinc-400 uppercase ml-1",children:"상세 내용"}),(0,n.jsx)("textarea",{value:B.details,onChange:e=>H({...B,details:e.target.value}),placeholder:"상세 내용을 입력하세요",rows:6,className:"w-full px-4 py-3 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-xl text-[16px] text-zinc-900 dark:text-zinc-100 placeholder:text-zinc-400 dark:placeholder:text-zinc-500 focus:outline-none focus:border-blue-500 resize-none"})]}),(0,n.jsxs)("div",{className:"flex gap-2",children:[!B.id.startsWith("temp-")&&(0,n.jsx)("button",{"aria-label":"삭제",onClick:()=>es(B.id),className:"px-4 py-3 bg-red-50 dark:bg-red-950/30 text-red-600 dark:text-red-400 rounded-xl active:bg-red-100 dark:active:bg-red-950/50 transition shadow-sm",children:(0,n.jsx)(u.Z,{size:20})}),(0,n.jsx)("button",{onClick:()=>
1{if(!B||!B.activityName.trim())return;let t=e.find(e=>e.id===B.studentId),r=t?{name:t.name,number:t.number,grade:t.grade||1,classNum:t.classNum||0}:void 0;_.mutate({...B,studentDetails:r},{onSuccess:()=>{Q("기록이 저장되었습니다.","success"),X(!1)}})},disabled:!B.activityName.trim(),className:"flex-1 py-3 bg-blue-600 text-white font-bold rounded-xl active:bg-blue-700 disabled:opacity-50",children:"저장하기"})]})]})}),K&&(0,n.jsx)("div",{className:"fixed inset-0 bg-black/70 flex items-center justify-center z-[110] p-4",onClick:()=>W(!1),children:(0,n.jsxs)("div",{className:"bg-white dark: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-zinc-900 dark:text-white",children:"학생 제출 QR 코드"}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(p.a,{value:O,disabled:V}),(0,n.jsx)("button",{"aria-label":"닫기",onClick:()=>W(!1),className:"p-1 text-zinc-400 hover:text-zinc-900 dark:hover:text-white transition-colors",children:(0,n.jsx)(x.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 border border-zinc-100 dark:border-white/5 min-h-[248px]",children:V?(0,n.jsxs)("div",{className:"flex flex-col items-center justify-center text-zinc-400 gap-2",children:[(0,n.jsx)(A.Z,{className:"animate-spin text-zinc-300",size:24}),(0,n.jsx)("span",{className:"text-sm",children:"링크 생성 중..."})]}):O?(0,n.jsx)(f.t,{value:O,size:200,level:"H"}):null}),(0,n.jsx)(p.A,{value:O,pending:V}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsxs)("button",{onClick:async()=>{let e=document.querySelector("#activity-qr-code svg");if(e){let t=new XMLSerializer().serializeToString(e),r=document.createElement("canvas"),n=r.getContext("2d"),i=new Image;i.onload=async()=>{r.width=i.width,r.height=i.height,null==n||n.drawImage(i,0,0);try{var e,t;let n=await new Promise(e=>r.toBlob(e,"image/png"));if(n&&(null===(e=(t=navigator).canShare)||void 0===e?void 0:e.call(t,{files:[new File([n],"qr-code.png",{type:"image/png"})]}))){let e=new File([n],"activity-qr-code.png",{type:"image/png"});await navigator.share({files:[e]})}else{let e=document.createElement("a");e.download="activity-qr-code.png",e.href=r.toDataURL("image/png"),e.click()}}catch(e){if("AbortError"!==e.name){let e=document.createElement("a");e.download="activity-qr-code.png",e.href=r.toDataURL("image/png"),e.click()}}},i.src="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(t)))}},className:"flex-1 flex items-center justify-center gap-2 py-2.5 bg-zinc-100 dark:bg-white/10 hover:bg-zinc-200 dark:hover:bg-white/20 text-zinc-900 dark:text-white rounded-lg transition-colors text-sm font-semibold",children:[(0,n.jsx)(m.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-zinc-100 dark:bg-white/10 hover:bg-zinc-200 dark:hover:bg-white/20 text-zinc-900 dark:text-white rounded-lg transition-colors text-sm font-semibold",children:[(0,n.jsx)(b.Z,{size:16}),"인쇄"]})]})]})})]})}},35596:function(e,t,r){"use strict";r.d(t,{Z:function(){return z}});var n=r(57437),i=r(2265),a=r(52345),s=r(59717),l=r(81906),c=r(33728),o=r(57586),d=r(13100),u=r(32489),x=r(46977),m=r(93448),b=r(21652),f=r(8345),p=r(82941);let v=0,h=[],g=0,y=!1;function w(){g++,window.history.back()}let k="";function z(e){let{isOpen:t,onClose:r,title:z,children:j,footer:N,className:C}=e,E=(0,i.useId)(),R=(0,a.J)(),D=(0,s.o)(),S=(0,l.c)(0);(0,i.useEffect)(()=>{t&&S.set(0)},[t,S]);let A=(0,c.H)(S,[0,240],[1,0]),I=(0,i.useRef)(r),_=(0,i.useRef)(!1);(0,i.useEffect)(()=>{I.current=r},[r]),(0,i.useEffect)(()=>
1{if(!t)return;v||(k=document.body.style.overflow),v++,y||(y=!0,window.addEventListener("popstate",e=>{var t;if((g>0||h.length>0)&&(0,f.l)(e),g>0){g--;return}null===(t=h.at(-1))||void 0===t||t.onPop()},{capture:!0}));let e={id:E,onPop:()=>{_.current&&(_.current=!1,I.current())}};h.push(e),document.body.style.overflow="hidden";let r=(0,b.UM)(),n=window.history.state||{};return r&&!_.current&&(window.history.pushState({...n,isBottomSheet:!0,sheetId:E},""),_.current=!0),()=>{var t;_.current&&(null===(t=window.history.state)||void 0===t?void 0:t.sheetId)===E&&(_.current=!1,w()),h.splice(h.indexOf(e),1),--v<=0&&(v=0,document.body.style.overflow=k)}},[t,E]);let F=(0,i.useCallback)(()=>{_.current&&(_.current=!1,w()),r()},[r]),L=(0,x.a)(t,F),Q=(0,i.useCallback)((e,t)=>{"pointercancel"!==e.type&&"touchcancel"!==e.type&&(t.velocity.y>500||t.offset.y>100)&&F()},[F]),T=(0,i.useRef)(null),Z=(0,i.useRef)(null);return(0,i.useEffect)(()=>{if(!t)return;let e=T.current;if(!e)return;let r=[],n=function(t){let r=!(arguments.length>1)||void 0===arguments[1]||arguments[1];if(!e.contains(t)||Z.current!==t)return;let n=e.getBoundingClientRect(),i=t.getBoundingClientRect(),a=(0,p.Wk)({top:i.top-n.top,bottom:i.bottom-n.top},e.clientHeight,12,12);0!==a&&e.scrollTo({top:Math.max(0,e.scrollTop+a),behavior:r?"smooth":"auto"})},i=e=>{let t=e.target;t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||"SELECT"===t.tagName||t.isContentEditable)&&(Z.current=t,n(t,!1),r.push(setTimeout(()=>n(t,!0),120)),r.push(setTimeout(()=>n(t,!0),300)),r.push(setTimeout(()=>n(t,!0),500)))},a=()=>{Z.current=null},s=()=>{Z.current&&n(Z.current,!0)};e.addEventListener("focusin",i),e.addEventListener("focusout",a);let l=window.visualViewport;return null==l||l.addEventListener("resize",s),()=>{r.forEach(clearTimeout),e.removeEventListener("focusin",i),e.removeEventListener("focusout",a),null==l||l.removeEventListener("resize",s)}},[t]),(0,n.jsx)(o.M,{children:t&&(0,n.jsxs)("div",{className:"md:hidden fixed inset-x-0 z-[100] flex items-end",style:{top:"var(--vv-offset-top, 0px)",height:"var(--app-height)"},children:[(0,n.jsx)(d.E.div,{initial:{opacity:0}
1,animate:{opacity:1},exit:{opacity:0},transition:{duration:.22,ease:[.22,1,.36,1]},className:"absolute inset-0",children:(0,n.jsx)(d.E.div,{style:{opacity:A},onClick:F,className:"absolute inset-0 bg-black/50 backdrop-blur-sm"})}),(0,n.jsxs)(d.E.div,{style:{y:S,maxHeight:"90%"},initial:R?{opacity:0}:{y:"100%"},animate:{y:0,opacity:1},exit:R?{opacity:0}:{y:"100%"},transition:R?{duration:.12}:{type:"spring",damping:30,stiffness:320,mass:.8},drag:"y",dragListener:!1,dragControls:D,dragConstraints:{top:0},dragSnapToOrigin:!0,dragMomentum:!1,dragElastic:{top:.12,bottom:.75},onDragEnd:Q,ref:L,tabIndex:-1,"aria-label":z||"상세 설정",role:"dialog","aria-modal":"true",className:(0,m.cn)("relative w-full bg-white dark:bg-[#18181b] border-t border-transparent dark:border-white/[0.08] rounded-t-2xl","flex flex-col overflow-hidden mobile-sheet-pad shadow-2xl",C),children:[(0,n.jsxs)("div",{onPointerDown:e=>{e.target.closest("button")||D.start(e)},className:"shrink-0 cursor-grab active:cursor-grabbing touch-none select-none",children:[(0,n.jsx)("div",{className:"flex justify-center pt-3 pb-2",children:(0,n.jsx)("div",{className:"w-9 h-1 rounded-full bg-zinc-400/70 dark:bg-zinc-700"})}),(0,n.jsxs)("div",{className:"flex items-center justify-between px-4 pb-2 border-b border-zinc-200/40 dark:border-zinc-800/60",children:[(0,n.jsx)("h3",{className:"text-[var(--mobile-font-h2)] font-semibold text-zinc-900 dark:text-zinc-100",children:z}),(0,n.jsx)("button",{type:"button",onClick:F,"aria-label":"닫기",className:"flex h-11 w-11 items-center justify-center rounded-lg text-zinc-600 dark:text-zinc-300",children:(0,n.jsx)(u.Z,{size:20})})]})]}),(0,n.jsx)("div",{ref:T,className:"flex-1 overflow-y-auto overflow-x-hidden px-4 pt-3 pb-2 mobile-scroll mobile-sheet-scroll",children:j}),N&&(0,n.jsx)("div",{className:"shrink-0 px-4 pt-2.5 pb-1 border-t border-zinc-100 dark:border-zinc-800/80 bg-white/95 dark:bg-[#18181b]/95 backdrop-blur-md",children:N})]})]})})}},43059:function(e,t,r){"use strict";r.d(t,{Lz:function(){return d},ZP:function(){return o}});var n=r(57437),i=r(93448);r(2265);var a=r(52345),s=r(13100),l=r(92846);let c={type:"spring",stiffness:450,damping:30,mass:.5};function o(e){let{children:t,className:r,onClick:o,hapticFeedback:d=!0}=e,u=(0,a.J)(),x=()=>{o&&(d&&l.MU.tap(),o())},m=(0,i.cn)("relative overflow-hidden","bg-white dark:bg-[#1C1C1E]","border border-zinc-200/70 dark:border-white/[0.08] shadow-[0_1px_3px_rgba(0,0,0,0.03)] dark:shadow-none","rounded-[var(--mobile-radius-card)]","p-4 transition-[background-color,border-color] duration-200",o&&"cursor-pointer touch-pan-y select-none",r);return o?(0,n.jsx)(s.E.div,{role:"button",tabIndex:0,whileTap:u?void 0:{scale:.975},transition:c,onClick:x,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),x())},className:m,style:{borderRadius:"var(--mobile-radius-card)"},children:t}):(0,n.jsx)("div",{className:m,style:{borderRadius:"var(--mobile-radius-card)"},children:t})}function d(e){let{children:t,className:r}=e;return(0,n.jsx)("div",{className:(0,i.cn)("flex items-center justify-between mb-2 text-zinc-900 dark:text-zinc-100",r),children:t})}},16348:function(e,t,r){"use strict";r.d(t,{We:function(){return b},ZJ:function(){return m},s9:function(){return f}});var n=r(71632),i=r(29827),a=r(21770),s=r(83008),l=r(67920),c=r(27526),o=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 b(e){var t,r,i,a;let{data:u,status:b}=(0,c.kP)(),f=(0,l.XC)(),p=(0,x.Dv)(),v=(0,o.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(v.current=u.user.id),(0,n.a)({queryKey:[...m.lists(),{userId:p?"guest":null!==(a=null==u?void 0:null===(i=u.user)||void 0===i?void 0:i.id)&&void 0!==a?a:v.current,...e}],enabled:"loading"!==b,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,i.NL)(),t=(0,l.XC)(),{showToast:r}=(0,u.pm)(),n=(0,x.Dv)();return{upsertActivity:(0,a.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 i=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(!i.success)throw Error(i.error||"Failed to save activity");return i.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,i)=>{(null==i?void 0:i.previousActivities)&&e.setQueryData(m.lists(),i.previousActivities),r((null==t?void 0:t.message)||"활동 기록을 저장하지 못했습니다. 잠시 후 다시 시도해 주세요.","error")},onSettled:()=>{e.invalidateQueries({queryKey:m.lists()})}}),deleteActivity:(0,a.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,i)=>{(null==i?void 0:i.previousActivities)&&e.setQueryData(m.lists(),i.previousActivities),r((null==t?void 0:t.message)||"활동 기록을 삭제하지 못했습니다. 잠시 후 다시 시도해 주세요.","error")},onSettled:()=>{e.invalidateQueries({queryKey:m.lists()})}}),generateDraft:(0,a.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}}})}}},9235:function(e,t,r){"use strict";function n(e){if(!e)return 0;let t=e.replace(/\r?\n/g,"\r\n"),r=0;for(let e=0;e<t.length;e++)r+=t.charCodeAt(e)>255?2:1;let n=t.length;return(r-n)*2+n}r.d(t,{C:function(){return n}})},25450:function(e,t,r){"use strict";r.d(t,{Fk:function(){return i}});var n=r(93448);function i(e){for(var t=arguments.length,r=Array(t>1?t-1:0),i=1;i<t;i++)r[i-1]=arguments[i];return(0,n.cn)("inline-flex items-center justify-center h-8 px-3 rounded-full text-[13px] transition active:scale-[0.96]",e?"bg-white dark:bg-[#1C1C1E] text-zinc-900 dark:text-zinc-100 font-semibold border border-zinc-200/90 dark:border-white/[0.12] shadow-[0_1px_2px_rgba(0,0,0,0.04)]":"bg-zinc-100/80 dark:bg-zinc-800/60 text-zinc-500 dark:text-zinc-400 font-medium border border-transparent",...r)}},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.