PageSourceSearch

https://naemo.ai/_next/static/chunks/2207.7538ff9d651e9c1a.js

js naemo.ai collected 2026-09-24 14:30:43 UTC 47,286 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2207],{88893:function(e,t,n){n.d(t,{Z:function(){return r}});let r=(0,n(79205).Z)("Pen",[["path",{d:"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z",key:"5qss01"}]])},82431:function(e,t,n){n.d(t,{Z:function(){return r}});let r=(0,n(79205).Z)("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},72173:function(e,t,n){n.d(t,{R:function(){return d}});var r=n(57437),i=n(2265);let l=(0,n(79205).Z)("CloudOff",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193",key:"yfwify"}],["path",{d:"M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07",key:"jlfiyv"}]]);var a=n(82431),s=n(51817),c=n(30401),o=n(93448);function d(e){let{isSaving:t,hasUnsavedChanges:n,error:d=null,onRetry:u,className:x}=e,h=t||n,[f,p]=(0,i.useState)(!1),m=(0,i.useRef)(!1);(0,i.useEffect)(()=>{h?m.current=!0:m.current&&(m.current=!1,d||p(!0))},[h,d]);let g=(0,o.cn)("flex items-center gap-1.5 text-xs font-medium select-none transition-opacity duration-300",x);return d?(0,r.jsxs)("div",{role:"status","aria-live":"assertive",className:g,children:[(0,r.jsxs)("span",{className:"flex items-center gap-1.5 text-red-600 dark:text-red-400",children:[(0,r.jsx)(l,{size:13,strokeWidth:2.25,"aria-hidden":"true"}),"저장 안 됨"]}),u&&(0,r.jsxs)("button",{type:"button",onClick:u,className:"inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-red-700 dark:text-red-300 hover:bg-red-50 dark:hover:bg-red-500/10 transition-colors",children:[(0,r.jsx)(a.Z,{size:11,strokeWidth:2.5,"aria-hidden":"true"}),"다시 시도"]})]}):(0,r.jsx)("div",{role:"status","aria-live":"polite",className:g,children:h?(0,r.jsxs)("span",{className:"flex items-center gap-1.5 text-zinc-600 dark:text-zinc-300",children:[(0,r.jsx)(s.Z,{size:13,className:"animate-spin",strokeWidth:2.25,"aria-hidden":"true"}),"저장 중"]}):f?(0,r.jsxs)("span",{className:"flex items-center gap-1.5 text-zinc-600 dark:text-zinc-300",children:[(0,r.jsx)(c.Z,{size:13,className:"text-emerald-600 dark:text-emerald-400",strokeWidth:2.5,"aria-hidden":"true"}),"저장됨"]}):(0,r.jsxs)("span",{className:"flex items-center gap-1.5 text-zinc-500 dark:text-zinc-400",children:[(0,r.jsx)("span",{"aria-hidden":"true",className:"inline-block w-1.5 h-1.5 rounded-full bg-zinc-400 dark:bg-zinc-500"}),"자동 저장"]})})}},72207:function(e,t,n){n.r(t),n.d(t,{default:function(){return Y}});var r=n(57437),i=n(2265),l=n(73247),a=n(32489),s=n(99397),c=n(95805),o=n(41905),d=n(79205);let u=(0,d.Z)("Pin",[["line",{x1:"12",x2:"12",y1:"17",y2:"22",key:"1jrz49"}],["path",{d:"M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z",key:"13yl11"}]]),x=(0,d.Z)("PinOff",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["line",{x1:"12",x2:"12",y1:"17",y2:"22",key:"1jrz49"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h12",key:"13x2n8"}],["path",{d:"M15 9.34V6h1a2 2 0 0 0 0-4H7.89",key:"reo3ki"}]]);var h=n(88893),f=n(18930),p=n(30166),m=n(53834),g=n(64954),b=n(93448),v=n(67920),w=n(83008),k=n(16481);let y=e=>{try{return JSON.stringify(e)}catch(e){return null}};function j(e){let{storageKey:t,initialData:n,onSave:r,debounceMs:l=1e3,enableLocalStorage:a=!0}=e,s="autosave:".concat(t),c=(0,i.useRef)(r);(0,i.useEffect)(()=>{c.current=r},[r]);let o=(0,i.useState)(()=>{if(!a)return{data:n,recovered:!1,matchesServer:!1};try{let e=localStorage.getItem(s);if(e){let t=JSON.parse(e);if(t&&Date.now()-t.timestamp<864e5){let e=t.data,r=y(e);return{data:e,recovered:!0,matchesServer:null!==r&&r===y(n)}}}}catch(e){}return{data:n,recovered:!1,matchesServer:!1}})[0],d=o.recovered&&o.matchesServer,[u,x]=(0,i.useState)(o.data),[h]=(0,i.useState)(o.recovered&&!d),[f,p]=(0,i.useState)(!1),[m,g]=(0,i.useState)(o.recovered&&!d),b=(0,i.useRef)(null),v=(0,i.useRef)(!0);(0,i.useEffect)(()=>(v.current=!0,()=>{v.current=!1}),[]);let w=(0,i.useRef)(u);w.current=u;let j=(0,i.useRef)(m);j.current=m;let z=(0,i.useRef)(!o.recovered||d?y(o.data):null);(0,i.useEffect)(()=>
1{if(d&&a)try{localStorage.removeItem(s)}catch(e){}},[]);let N=(0,i.useCallback)(async()=>{let e=w.current,t=y(e);if(null!==t&&t===z.current){if(v.current&&g(!1),a)try{localStorage.removeItem(s)}catch(e){}return!0}v.current&&p(!0);let n=!1;for(let t=0;t<3&&!n;t++){t>0&&await new Promise(e=>setTimeout(e,2e3));try{n=await c.current(e)}catch(e){console.warn("[useAutoSave] Save attempt failed:",e)}}if(n&&(z.current=t),v.current&&(p(!1),n&&y(w.current)===t&&(g(!1),a)))try{localStorage.removeItem(s)}catch(e){}return n},[a,s]),C=(0,i.useRef)((0,k.c)()),S=(0,i.useCallback)(()=>C.current(N),[N]);(0,i.useEffect)(()=>{if(m){if(a)try{localStorage.setItem(s,JSON.stringify({data:u,timestamp:Date.now()}))}catch(e){}b.current&&clearTimeout(b.current),b.current=setTimeout(()=>{S()},l)}},[u,m,l,a,s,S]);let E=(0,i.useCallback)(async()=>{b.current&&clearTimeout(b.current),j.current&&await S()},[S]);(0,i.useEffect)(()=>{let e=()=>{"hidden"===document.visibilityState&&E()};return document.addEventListener("visibilitychange",e),window.addEventListener("pagehide",E),()=>{document.removeEventListener("visibilitychange",e),window.removeEventListener("pagehide",E)}},[E]);let P=(0,i.useCallback)(e=>{let t="function"==typeof e?e(w.current):e;w.current=t,j.current=!0,x(t),g(!0)},[]),R=(0,i.useCallback)(()=>{if(a)try{localStorage.removeItem(s)}catch(e){}},[s,a]);return{data:u,setData:P,syncExternal:(0,i.useCallback)(e=>{if(x(e),z.current=y(e),a)try{localStorage.removeItem(s)}catch(e){}},[a,s]),isSaving:f,hasUnsavedChanges:m,flushSave:E,clearLocalDraft:R,wasRecovered:h}}function z(e){let{latest:t,current:n,initialUpdatedAt:r,hasUnsavedChanges:l,isSaving:a,applyExternal:s,containerRef:c}=e,[o,d]=(0,i.useState)(0),u=(0,i.useRef)(r),x=(0,i.useRef)(t);x.current=t;let h=(0,i.useRef)(n);h.current=n;let f=(0,i.useRef)(l);f.current=l;let p=(0,i.useRef)(a);p.current=a;let m=(0,i.useRef)(s);m.current=s;let g=(0,i.useCallback)(()=>{let e=x.current;if(!(null==e?void 0:e.updatedAt)||e.updatedAt===u.current)return;let t=h.current;if(e.content===t.content&&e.title===t.title){u.current=e.updatedAt;return}if(f.current||p.current)return;let n=c.current;n&&n.contains(document.activeElement)||(u.current=e.updatedAt,m.current({...t,title:e.title,content:e.content}),d(e=>e+1))},[c]);return(0,i.useEffect)(()=>{g()},[null==t?void 0:t.updatedAt,g]),o}var N=n(88507),C=n(59717),S=n(66109),E=n(27526),P=n(54696),R=n(72173),D=n(86267),I=n(58819),T=n(98319);function A(e){return e?e.replace(/<\/(p|div|h[1-6]|li|blockquote|tr|figcaption)>/gi," ").replace(/<br\s*\/?>/gi," ").replace(/<[^>]+>/g,"").replace(/&nbsp;/gi," ").replace(/&amp;/gi,"&").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&quot;/gi,'"').replace(/&#0*39;|&apos;/gi,"'").replace(/\s+/g," ").trim():""}function W(e,t,n){let r=Math.max(0,t-32),i=Math.min(e.length,t+n+32),l=e.slice(r,i);return r>0&&(l="…"+l),i<e.length&&(l+="…"),l}function M(e,t,n){var r;let i=t.trim().toLowerCase();if(!i)return[];let l=null!==(r=null==n?void 0:n.getBody)&&void 0!==r?r:e=>A(e.content),a=[],s=[];for(let t of e){let e=t.title.toLowerCase().includes(i),n=l(t),r=n.toLowerCase().indexOf(i);e?a.push({note:t,titleMatch:!0,snippet:r>=0?W(n,r,i.length):null}):r>=0&&s.push({note:t,titleMatch:!1,snippet:W(n,r,i.length)})}return[...a,...s]}function Z(e){let{text:t,query:n,className:i}=e,l=function(e,t){let n=t.trim().toLowerCase();if(!n||!e)return[{text:e,hit:!1}];let r=e.toLowerCase(),i=[],l=0;for(;l<e.length;){let t=r.indexOf(n,l);if(t<0){i.push({text:e.slice(l),hit:!1});break}t>l&&i.push({text:e.slice(l,t),hit:!1}),i.push({text:e.slice(t,t+n.length),hit:!0}),l=t+n.length}return i}(t,n);return(0,r.jsx)("span",{className:i,children:l.map((e,t)=>e.hit?(0,r.jsx)("mark",{className:(0,b.cn)("rounded-[2px] px-[1px] text-inherit","bg-amber-200/70 dark:bg-amber-400/25"),children:e.text},t):(0,r.jsx)("span",{children:e.text},t))})}var F=n(33145),X=n(99388),L=n(21751);let B=(0,p.default)(()=>Promise.all([n.e(3572),n.e(7902),n.e(1597),n.e(7882)]).then(n.bind(n,87882)),{loadableGenerated:{webpack:()=>[87882]},ssr:!1});function O(e){let{notes:t,isLoadingList:o,onCreateNote:d,onTitleChange:u,onPersisted:x,onDeleteNote:h,onTogglePin:f}=e,[p,g]=(0,i.useState)(null),[k,y]=(0,i.useState)(""),[j,z]=(0,i.useState)(!1),[N,C]=(0,i.useState)(""),[S,E]=(0,i.useState)(!1),R=(0,i.useRef)(!1),D=(0,v.XC)(),[I,T]=(0,i.useState)(!1),[W,Z]=(0,i.useState)([]),[B,O]=(0,i.useState)([]),[K,V]=(0,i.useState)(null);(0,i.useEffect)(()=>{p&&!t.some(e=>e.id===p)&&g(null)}
1,[t,p]);let H=(0,i.useRef)(new Map),Y=(0,i.useCallback)(e=>{let t=H.current.get(e.id);if(t&&t.content===e.content)return t.text;let n=A(e.content);return H.current.set(e.id,{content:e.content,text:n}),n},[]),U=k.trim(),G=U.length>0,J=G?M(t,U,{getBody:Y}):[],Q=t.filter(e=>e.isPinned),$=t.filter(e=>!e.isPinned),ee=t.find(e=>e.id===p);(0,L.rr)(p?(null==ee?void 0:ee.title)||"노트 상세":null,(0,i.useCallback)(()=>g(null),[]));let et=(0,P.Dv)(),en=(0,i.useCallback)(async e=>{if(V(e),T(!0),et){if(0===W.length){let{getGuestData:e}=await n.e(6214).then(n.bind(n,96214)),t=await e();Z(t.students||[]),O(Array.from(new Set((t.students||[]).map(e=>e.homeClassId||"담임 학급"))))}return}if(0===W.length){let e=await (0,w.X)("listStudents",{},D);e.success&&e.data&&Z(e.data)}let t=await (0,w.X)("getClasses",{},D);t.success&&t.data&&O(t.data)},[D,W.length,et]),er=(0,i.useCallback)(e=>{if(!K||!W.length)return;let t=W.filter(t=>{var n;return t.homeClassId===e||(null===(n=t.customClassIds)||void 0===n?void 0:n.includes(e))});t.sort((e,t)=>e.number-t.number);let n='<table class="tiptap-table"><thead><tr><th style="text-align: center; font-weight: 600">학년</th><th style="text-align: center; font-weight: 600">반</th><th style="text-align: center; font-weight: 600">번호</th><th style="text-align: center; font-weight: 600">이름</th><th style="text-align: center; font-weight: 600">비고</th></tr></thead><tbody>';t.forEach(e=>{n+='<tr><td style="text-align: center">'.concat(e.grade||"",'</td><td style="text-align: center">').concat(e.classNum||"",'</td><td style="text-align: center">').concat(e.number,'</td><td style="text-align: center">').concat(e.name,"</td><td></td></tr>")}),n+="</tbody></table><p></p>",K.chain().focus().insertContent(n).run(),T(!1),V(null)},[K,W]),ei=async()=>{if(!R.current){R.current=!0,E(!0);try{let e=N.trim()||"제목 없음",t=await d(e);t&&g(t)}finally{z(!1),C(""),E(!1),R.current=!1}}};return p&&ee?(0,r.jsxs)("div",{className:"flex flex-col h-full relative",style:{backgroundColor:"#FBFBF9"},children:[(0,r.jsx)("div",{className:"flex-1 overflow-hidden flex flex-col",children:(0,r.jsx)(q,{id:p,initialData:ee,latest:ee,onTitleChange:u,onPersisted:x,onImportRoster:en},p)}),I&&(0,r.jsx)("div",{className:"absolute inset-0 z-[60] flex items-center justify-center bg-black/50 backdrop-blur-sm p-4",children:(0,r.jsxs)("div",{className:"bg-white dark:bg-[#18181b] w-full max-w-sm rounded-xl shadow-2xl border border-zinc-200 dark:border-white/10 overflow-hidden flex flex-col max-h-[80%]",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-zinc-100 dark:border-white/10",children:[(0,r.jsxs)("h3",{className:"font-bold text-zinc-900 dark:text-white flex items-center gap-2 text-sm",children:[(0,r.jsx)(c.Z,{size:15}),"수업 명렬표 가져오기"]}),(0,r.jsx)("button",{"aria-label":"닫기",onClick:()=>T(!1),className:"p-1 text-zinc-400 hover:text-zinc-600 dark:text-zinc-500 dark:hover:text-zinc-300 rounded-md",children:(0,r.jsx)(a.Z,{size:16})})]}),(0,r.jsx)("div",{className:"flex-1 overflow-y-auto p-2",children:0===W.length?(0,r.jsxs)("div",{className:"py-8 text-center text-sm text-zinc-400 dark:text-zinc-500 flex flex-col items-center gap-2",children:[(0,r.jsx)(m.W,{size:24}),(0,r.jsx)("span",{children:"학생 데이터를 불러오는 중..."})]}):0===B.length?(0,r.jsx)("div",{className:"py-8 text-center text-sm text-zinc-400 dark:text-zinc-500",children:"등록된 학생/학급이 없습니다."}):(0,r.jsx)("div",{className:"grid gap-1",children:B.map(e=>(0,r.jsxs)("button",{onClick:()=>er(e),className:"flex items-center justify-between w-full px-4 py-3 text-left bg-zinc-50 dark:bg-white/5 hover:bg-zinc-100 dark:hover:bg-white/10 rounded-lg transition-colors active:scale-[0.98]",children:[(0,r.jsx)("span",{className:"font-medium text-zinc-800 dark:text-zinc-200 text-sm",children:e}),(0,r.jsxs)("span",{className:"text-xs text-zinc-400 dark:text-zinc-500",children:[W.filter(t=>{var n;return t.homeClassId===e||(null===(n=t.customClassIds)||void 0===n?void 0:n.includes(e))}).length,"명"]})]},e))})})]})})]}):(0,r.jsxs)("div",{className:"flex flex-col h-full relative overflow-y-auto scroll-smooth bg-[#FBFBF9] dark:bg-zinc-950",children:[(0,r.jsx)("div",{className:"flex-1 px-4 mobile-scroll-with-floating pt-2",children:o?(0,r.jsx)("div",{className:"flex justify-center py-16",children:(0,r.jsx)(m.W,{size:32})}):(0,r.jsxs)(r.Fragment,{children:[j&&(0,r.jsx)("div",{className:"mb-2",children:(0,r.jsx)("form",{onSubmit:e=>{e.preventDefault(),ei()},children:(0,r.jsx)("input",{autoFocus:!0,placeholder:"새 노트 제목",value:N,onChange:e=>C(e.target.value),className:"w-full h-10 bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 text-zinc-900 dark:text-zinc-100 placeholder:text-zinc-400 dark:placeholder:text-zinc-500 rounded-xl px-3 text-[16px] focus:outline-none focus:border-blue-400 shadow-sm",onBlur:()=>{N.trim()?ei():z(!1)},onKeyDown:e=>{"Escape"===e.key&&z(!1)}})})}),G?0===J.length?(0,r.jsxs)("div",{className:"text-center py-16 text-zinc-400 text-sm break-keep",children:["‘",U,"’ 검색 ê²°ê
1³¼ê°€ 없어요."]}):(0,r.jsx)("div",{className:"space-y-[2px]",children:J.map(e=>(0,r.jsx)(_,{note:e.note,query:U,snippet:e.snippet,onSelect:()=>g(e.note.id),onTogglePin:f,onDelete:h},e.note.id))}):0!==t.length||j?(0,r.jsxs)("div",{className:"space-y-[2px]",children:[Q.length>0&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"text-[11px] font-semibold text-zinc-400 px-3 pt-3 pb-1 uppercase tracking-wide",children:"고정됨"}),Q.map(e=>(0,r.jsx)(_,{note:e,onSelect:()=>g(e.id),onTogglePin:f,onDelete:h},e.id))]}),$.length>0&&(0,r.jsxs)(r.Fragment,{children:[Q.length>0&&(0,r.jsx)("div",{className:"text-[11px] font-semibold text-zinc-400 px-3 pt-4 pb-1 uppercase tracking-wide",children:"노트"}),$.map(e=>(0,r.jsx)(_,{note:e,onSelect:()=>g(e.id),onTogglePin:f,onDelete:h},e.id))]})]}):(0,r.jsxs)("div",{className:"flex flex-col items-center justify-center py-20 text-center",children:[(0,r.jsx)(F.default,{src:"/icons/empty-search.svg",alt:"",width:56,height:56,className:"w-14 h-14 object-contain mb-3.5",unoptimized:!0}),(0,r.jsx)("h3",{className:"text-zinc-900 dark:text-zinc-100 font-bold mb-1",children:"작성된 노트가 없습니다"}),(0,r.jsx)("p",{className:"text-zinc-500 dark:text-zinc-400 text-[13px] whitespace-pre-line",children:"기억해야 할 내용이나 할 일을\n하단 + 버튼을 눌러 기록해보세요."})]})]})}),!p&&(0,r.jsx)("div",{className:"fixed mobile-floating-bar left-0 right-0 px-6 flex justify-center z-40 pointer-events-none",children:(0,r.jsxs)("div",{className:"w-full max-w-[400px] flex gap-2 pointer-events-auto group",children:[(0,r.jsxs)("div",{className:(0,b.cn)("relative flex-1 flex items-center h-[48px] px-4","bg-white/80 dark:bg-zinc-900/80 backdrop-blur-xl border border-zinc-200/80 dark:border-white/10 rounded-full","shadow-[0_4px_12px_rgba(0,0,0,0.03)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3)]","transition duration-200 group-focus-within:border-zinc-300 dark:group-focus-within:border-zinc-600 group-focus-within:shadow-[0_4px_16px_rgba(0,0,0,0.06)]"),children:[(0,r.jsx)("div",{className:"shrink-0 text-zinc-400 dark:text-zinc-500",children:(0,r.jsx)(l.Z,{size:20,strokeWidth:1.5})}),(0,r.jsx)("input",{type:"text",placeholder:"노트 검색...",value:k,onChange:e=>y(e.target.value),className:(0,b.cn)("w-full h-full bg-transparent border-none outline-none","pl-3 pr-1 text-[16px] font-normal","text-zinc-900 dark:text-zinc-100 placeholder:text-zinc-400 dark:placeholder:text-zinc-500")}),k&&(0,r.jsx)("button",{"aria-label":"검색어 지우기",onClick:()=>y(""),className:"shrink-0 p-1.5 -mr-1 text-zinc-400 dark:text-zinc-500 active:text-zinc-600 dark:active:text-zinc-300 active:scale-95 transition",children:(0,r.jsx)(X.Z,{size:18,strokeWidth:1.75})})]}),(0,r.jsx)("button",{"aria-label":"새 메모",onClick:()=>z(!0),className:(0,b.cn)("w-[48px] h-[48px] shrink-0 flex items-center justify-center rounded-full","bg-white/80 dark:bg-zinc-900/80 backdrop-blur-xl border border-zinc-200/80 dark:border-white/10","shadow-[0_4px_12px_rgba(0,0,0,0.03)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3)]","text-zinc-400 dark:text-zinc-300 active:scale-90 transition"),children:(0,r.jsx)(s.Z,{size:22,strokeWidth:1.5})})]})})]})}function _(e){let{note:t,query:n,snippet:i,onSelect:l,onTogglePin:a,onDelete:s}=e,c=(()=>{try{return new Date(t.updatedAt).toLocaleDateString("ko-KR",{month:"short",day:"numeric"})}catch(e){return""}})();return(0,r.jsxs)("div",{role:"button",tabIndex:0,"aria-label":"노트 열기: ".concat(t.title||"제목 없음"),onClick:l,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),l())},className:"w-full flex items-center gap-3 px-3 py-[10px] rounded-2xl transition text-left active:scale-[0.985] active:bg-zinc-100/60 dark:active:bg-zinc-800/60 cursor-pointer",children:[t.isPinned&&(0,r.jsx)(u,{size:11,className:"text-yellow-500 shrink-0",fill:"currentColor"}),(0,r.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,r.jsx)("div",{className:"text-[14px] font-medium text-zinc-900 dark:text-zinc-100 truncate",children:n?(0,r.jsx)(Z,{text:t.title||"제목 없음",query:n}):t.title||"제목 없음"}),i?(0,r.jsx)("div",{className:"text-[12px] text-zinc-400 dark:text-zinc-500 mt-0.5 line-clamp-1 break-keep",children:(0,r.jsx)(Z,{text:i,query:n||""})}):c?(0,r.jsx)("div",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 mt-0.5",children:c}):null]}),(0,r.jsxs)("div",{className:"flex items-center gap-1 shrink-0",onClick:e=>e.stopPropagation(),children:[(0,r.jsx)("button",{"aria-label":t.isPinned?"고정 해제":"고정",onClick:e=>{navigator.vibrate&&navigator.vibrate(50),a(e,t.id,t.isPinned)},className:(0,b.cn)("flex items-center justify-center w-11 h-11 rounded-lg transition-colors active:bg-zinc-100 dark:active:bg-zinc-800",t.isPinned?"text-yellow-500":"text-zinc-300 hover:text-zinc-500 dark:text-zinc-500 dark:hover:text-zinc-400"),children:(0,r.jsx)(u,{size:16,fill:t.isPinned?"currentColor":"none"})}),(0,r.jsx)("button",{"aria-label":"삭제",onClick:e=>s(e,t.id),className:"flex items-center justify-center w-11 h-11 rounded-lg text-zinc-300 dark:text-zinc-500 hover:text-red-400 active:bg-zinc-100 dark:active:bg-zinc-800 transition-colors",children:(0,r.jsx)(f.Z,{size:16})})]})]})}function q(e){let{id:t,initialData:l,latest:a,onTitleChange:s,onPersisted:c,onImportRoster:o}=e,d=(0,P.Dv)(),u=(0,v.XC)(),x=(0,i.useRef)(l.title||""),h=(0,i.useRef)(null),{data:f,setData:p,syncExternal:m,hasUnsavedChanges:g,isSaving:b,flushSave:k}=j({storageKey:"work-note-v2-".concat(t),initialData:l,onSave:async e=>{var r,i;if(!t)return!1;let l=(null===(r=e.title)||void 0===r?void 0:r.trim())?e.title:"제목 없음",a=e.content||"";if(d){let{getGuestWorkNotes:e,saveGuestWorkNotes:r}=await n.e(6214).then(n.bind(n,96214)),i=await e(),o=new Date().toISOString(),d=i.map(e=>e.id===t?{...e,title:l,content:a,updatedAt:o}:e);return await r(d),l!==x.current&&(x.current=l,s(t,l)),null==c||c(t,{title:l,content:a,updatedAt:o}),!0}let o=await (0,w.X)("updateWorkNote",{id:t,title:l,content:a},u);if(o.success){l!==x.current&&(x.current=l,s(t,l));let e=null===(i=o.data)||void 0===i?void 0:i.updatedAt;null==c||c(t,e?{title:l,content:a,updatedAt:e}:{title:l,content:a})}return o.success},debounceMs:2500}),y=(0,i.useCallback)(e=>{p(t=>({...t,content:e}))},[p]),N=z({latest:a,current:f,initialUpdatedAt:l.updatedAt,hasUnsavedChanges:g,isSaving:b,applyExternal:m,containerRef:h}),C=(0,i.useRef)(k);return(0,i.useEffect)(()=>{C.current=k},[k]),(0,i.useEffect)(()=>()=>{C.current()},[]),(0,r.jsxs)("div",{ref:h,className:"flex flex-col h-full",children:[(0,r.jsxs)("div",{className:"px-5 pt-4 pb-3 border-b border-zinc-100/80 dark:border-zinc-800 bg-[#FBFBF9] dark:bg-zinc-950 flex items-center gap-3",children:[(0,r.jsx)("input",{type:"text",value:f.title||"",onChange:e=>p(t=>({...t,title:e.target.value})),onBlur:()=>k(),placeholder:"노트 제목",className:"text-xl font-bold bg-transparent border-none text-zinc-900 dark:text-zinc-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 flex-1 min-w-0 placeholder-zinc-300 dark:placeholder-zinc-600"}),(0,r.jsx)(R.R,{isSaving:b,hasUnsavedChanges:g,className:"shrink-0"})]}),(0,r.jsx)("div",{className:"flex-1 overflow-hidden mobile-note-wrapper",children:(0,r.jsx)(B,{content:f.content||"",onChange:y,onBlur:()=>k(),placeholder:"내용을 입력하세요...",onImportRoster:o,isMobile:!0},N)})]})}let K=(0,p.default)(()=>Promise.all([n.e(3572),n.e(7902),n.e(1597),n.e(7882)]).then(n.bind(n,87882)),{loadableGenerated:{webpack:()=>[87882]},ssr:!1}),V=e=>[...e].sort((e,t)=>
1(t.isPinned?1:0)-(e.isPinned?1:0)||e.displayOrder-t.displayOrder||new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()),H=(e,t)=>{if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],i=t[n];if(r.id!==i.id||r.title!==i.title||r.content!==i.content||r.isPinned!==i.isPinned||r.displayOrder!==i.displayOrder||r.updatedAt!==i.updatedAt)return!1}return!0};function Y(){let{status:e}=(0,E.kP)(),t=(0,P.Dv)(),o=(0,v.XC)(),d=(0,I.d)(),{showToast:u}=(0,T.p)(),x=(0,D.X)(e=>e.targetNoteId),h=(0,D.X)(e=>e.clearTargetNoteId),f=(0,D.X)(e=>e.removeLinkedNote),[p,b]=(0,i.useState)([]),[k,y]=(0,i.useState)(!0),[j,z]=(0,i.useState)(!1),[C,S]=(0,i.useState)(null),[R,W]=(0,i.useState)(""),[Z,F]=(0,i.useState)(!1),[X,L]=(0,i.useState)(null),[B,_]=(0,i.useState)(""),[q,K]=(0,i.useState)(!1),[Y,Q]=(0,i.useState)([]),[$,ee]=(0,i.useState)([]),[et,en]=(0,i.useState)(null),er=(0,i.useRef)(new Map),ei=(0,i.useRef)(new Set),el=(0,i.useCallback)(e=>e.filter(e=>!er.current.has(e.id)&&!ei.current.has(e.id)),[]),ea=(0,i.useCallback)(async()=>{if("loading"!==e){y(!0);try{if(t){let{getGuestWorkNotes:e}=await n.e(6214).then(n.bind(n,96214)),t=await e();b(el(t))}else{let e=await (0,w.X)("getWorkNotes",{},o);e.success&&e.data&&b(el(e.data))}}catch(e){console.error("[WorkNoteView] Failed to load work notes:",e)}finally{y(!1)}}},[o,t,e,el]);(0,i.useEffect)(()=>{("unauthenticated"!==e||t)&&ea()},[ea,e,t]);let es=(0,i.useRef)(0),ec=(0,i.useCallback)(()=>{es.current=Date.now()},[]);(0,i.useEffect)(()=>{if(t)return;let e=async()=>{if("visible"===document.visibilityState&&!(Date.now()-es.current<3e3))try{let e=await (0,w.X)("getWorkNotes",{},o);if(e.success&&e.data){let t=el(e.data);b(e=>H(e,t)?e:t)}}catch(e){console.warn("[WorkNoteView] silent refresh failed:",e)}},n=setInterval(e,12e3),r=()=>{"visible"===document.visibilityState&&e()};return document.addEventListener("visibilitychange",r),()=>{clearInterval(n),document.removeEventListener("visibilitychange",r)}},[o,t,el]);let eo=(0,i.useRef)(ea);(0,i.useEffect)(()=>{eo.current=ea},[ea]);let ed=(0,i.useRef)(0);(0,i.useEffect)(()=>{if(!k)return;let e=setTimeout(()=>{y(!1),0===p.length&&ed.current<2&&(ed.current+=1,console.warn("[WorkNoteView] 목록 로딩 지연 — 재시도합니다."),eo.current())},5e3);return()=>clearTimeout(e)},[k,p.length]),(0,i.useEffect)(()=>{!x||k||(p.length>0?(p.some(e=>e.id===x)&&(S(x),F(!1)),h()):k||h())},[x,p,k,h]),(0,i.useEffect)(()=>{k||"loading"===e||(d||C||!(p.length>0)||Z||x||S(p[0].id),x||z(!0))},[p,C,k,e,Z,x,d]),(0,i.useEffect)(()=>{!C||k||p.some(e=>e.id===C)||S(null)},[p,C,k]);let eu=()=>{W(""),F(!0),S(null)},ex=e=>{C!==e&&(S(e),F(!1))},eh=(0,i.useRef)({actionContext:o,markLocalMutation:ec,removeLinkedNote:f,showToast:u});eh.current={actionContext:o,markLocalMutation:ec,removeLinkedNote:f,showToast:u};let ef=(0,i.useCallback)(e=>{let t=er.current.get(e);if(!t)return;clearTimeout(t.timer),er.current.delete(e);let{actionContext:n,markLocalMutation:r,removeLinkedNote:i,showToast:l}=eh.current;r(),i(e);let a=()=>{b(n=>n.some(t=>t.id===e)?n:V([...n,t.note])),l("노트를 삭제하지 못했어요. 다시 시도해 주세요.","error")};(0,w.X)("deleteWorkNote",{id:e},n).then(t=>{t.success?ei.current.add(e):a()}).catch(a)},[]),ep=(0,i.useCallback)(e=>{let t=er.current.get(e);t&&(clearTimeout(t.timer),er.current.delete(e),eh.current.markLocalMutation(),b(n=>n.some(t=>t.id===e)?n:V([...n,t.note])))},[]);(0,i.useEffect)(()=>{let e=er.current,t=ei.current;return()=>{e.forEach((e,n)=>{clearTimeout(e.timer),t.add(n),eh.current.removeLinkedNote(n),(0,w.X)("deleteWorkNote",{id:n},eh.current.actionContext).catch(()=>{})}),e.clear()}},[]);let em=async(e,r)=>{e.stopPropagation();let i=p.find(e=>e.id===r);if(!i)return;if(ec(),t){let{getGuestWorkNotes:e,saveGuestWorkNotes:t}=await n.e(6214).then(n.bind(n,96214)),l=await e();await t(l.filter(e=>e.id!==r)),b(e=>e.filter(e=>e.id!==r)),f(r),C===r&&S(null),u("노트를 삭제했어요.","info",{label:"실행 취소",onClick:async()=>{let n=await e();n.some(e=>e.id===r)||(await t(V([...n,i])),b(e=>e.some(e=>e.id===r)?e:V([...e,i])))}});return}if(er.current.has(r))return;b(e=>e.filter(e=>e.id!==r)),C===r&&S(null);let l=setTimeout(()=>ef(r),4500);er.current.set(r,{note:i,timer:l}),u("노트를 삭제했어요.","info",{label:"실행 취소",onClick:()=>ep(r)})},eg=async(e,r,i)=>{if(e.stopPropagation(),ec(),t){let{saveGuestWorkNotes:e}=await n.e(6214).then(n.bind(n,96214)),t=p.map(e=>e.id===r?{...e,isPinned:!i}:e);await e(t),b(t);return}b(e=>e.map(e=>e.id===r?{...e,isPinned:!i}:e)),(await (0,w.X)("updateWorkNote",{id:r,isPinned:!i},o)).success||(b(e=>e.map(e=>e.id===r?{...e,isPinned:i}:e)),eh.current.showToast("고정 상태를 변경하지 못했어요.","error"))},eb=(e,t)=>{e.stopPropagation(),L(t.id),_(t.title)},ev=async e=>{if(!B.trim()){L(null);return}if(ec(),t){let{saveGuestWorkNotes:t}=await n.e(6214).then(n.bind(n,96214)),r=p.map(t=>
1t.id===e?{...t,title:B.trim()}:t);await t(r),b(r)}else(await (0,w.X)("updateWorkNote",{id:e,title:B.trim()},o)).success&&b(t=>t.map(t=>t.id===e?{...t,title:B.trim()}:t));L(null)},ew=async e=>{let r=e.trim()||"제목 없음";if(ec(),t){let{saveGuestWorkNotes:e}=await n.e(6214).then(n.bind(n,96214)),t=new Date().toISOString(),i={id:crypto.randomUUID(),title:r,content:"",isPinned:!1,displayOrder:0,createdAt:t,updatedAt:t},l=[i,...p];await e(l),b(l),F(!1),ex(i.id)}else{let e=await (0,w.X)("createWorkNote",{title:r},o);if(e.success&&e.data){let t=e.data;b(e=>[...e.filter(e=>e.isPinned),t,...e.filter(e=>!e.isPinned)]),F(!1),ex(t.id)}else u(e.error||"노트를 만들지 못했어요.","error")}},ek=(0,i.useRef)(null),ey=p.filter(e=>e.isPinned),ej=p.filter(e=>!e.isPinned),ez=(0,i.useRef)(new Map),eN=(0,i.useCallback)(e=>{let t=ez.current.get(e.id);if(t&&t.content===e.content)return t.text;let n=A(e.content);return ez.current.set(e.id,{content:e.content,text:n}),n},[]),eC=R.trim(),eS=eC.length>0,eE=(0,i.useMemo)(()=>eS?M(p,eC,{getBody:eN}):[],[p,eC,eS,eN]),eP=(0,i.useCallback)(()=>W(""),[]),eR=(0,i.useCallback)(async e=>{let t=e.trim()||"제목 없음";ec();let n=await (0,w.X)("createWorkNote",{title:t},o);if(n.success&&n.data){let e=n.data;return b(t=>[...t.filter(e=>e.isPinned),e,...t.filter(e=>!e.isPinned)]),e.id}return null},[o,ec]),eD=e=>{if(ec(),t){n.e(6214).then(n.bind(n,96214)).then(t=>t.saveGuestWorkNotes(e));return}ek.current&&clearTimeout(ek.current),ek.current=setTimeout(async()=>{let t=e.map(e=>e.id);await (0,w.X)("updateWorkNoteOrder",{orderedIds:t},o)},500)},eI=async e=>{if(en(e),K(!0),0===Y.length){let e=await (0,w.X)("listStudents",{},o);e.success&&e.data&&Q(e.data)}let t=await (0,w.X)("getClasses",{},o);t.success&&t.data&&ee(t.data)},eT=e=>{if(!et||!Y.length)return;let t=Y.filter(t=>{var n;return t.homeClassId===e||(null===(n=t.customClassIds)||void 0===n?void 0:n.includes(e))});t.sort((e,t)=>e.number-t.number);let n='<table class="tiptap-table"><thead><tr><th style="text-align: center; font-weight: 600">학년</th><th style="text-align: center; font-weight: 600">반</th><th style="text-align: center; font-weight: 600">번호</th><th style="text-align: center; font-weight: 600">이름</th><th style="text-align: center; font-weight: 600">비고</th></tr></thead><tbody>';t.forEach(e=>{n+='<tr><td style="text-align: center">'.concat(e.grade||"",'</td><td style="text-align: center">').concat(e.classNum||"",'</td><td style="text-align: center">').concat(e.number,'</td><td style="text-align: center">').concat(e.name,"</td><td></td></tr>")}),n+="</tbody></table><p></p>",et.chain().focus().insertContent(n).run(),K(!1),en(null)};return(0,r.jsxs)("div",{className:"flex h-full bg-[#fafaf9] dark:bg-[#0c0c0e]",children:[d&&(0,r.jsx)("div",{className:"md:hidden w-full h-full absolute inset-0 z-50 bg-[#FBFBF9] dark:bg-zinc-950",children:(0,r.jsx)(O,{notes:p,isLoadingList:k,onCreateNote:eR,onTitleChange:(e,t)=>
1b(n=>n.map(n=>n.id===e?{...n,title:t}:n)),onPersisted:(e,t)=>b(n=>n.map(n=>n.id===e?{...n,...t}:n)),onDeleteNote:em,onTogglePin:eg})}),!d&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"hidden md:flex w-60 flex-shrink-0 flex-col border-r border-zinc-200 dark:border-white/5 bg-white dark:bg-[#09090b] work-note-sidebar nav-rail-shadow sub-sidebar-enter",children:[(0,r.jsxs)("div",{className:"h-14 px-3 flex items-center gap-2 shrink-0 border-b border-zinc-200 dark:border-white/5",children:[(0,r.jsxs)("div",{className:"relative flex-1 min-w-0",children:[(0,r.jsx)(l.Z,{size:14,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-zinc-400 dark:text-white/30 pointer-events-none"}),(0,r.jsx)("input",{type:"text",value:R,onChange:e=>W(e.target.value),onKeyDown:e=>{"Escape"===e.key&&eP()},placeholder:"노트 검색","aria-label":"노트 검색",className:"w-full bg-[#fafaf9] dark:bg-[#18181b] text-zinc-900 dark:text-white placeholder-zinc-400 dark:placeholder-white/30 rounded-md py-2 pl-8 pr-7 text-xs focus:outline-none focus:ring-1 focus:ring-zinc-400 dark:focus:ring-white/10"}),R&&(0,r.jsx)("button",{"aria-label":"검색어 지우기",onClick:eP,className:"absolute right-1.5 top-1/2 -translate-y-1/2 p-0.5 rounded text-zinc-400 hover:text-zinc-700 dark:text-white/30 dark:hover:text-white/70 transition-colors",children:(0,r.jsx)(a.Z,{size:13})})]}),(0,r.jsx)("button",{"aria-label":"새 노트",onClick:eu,className:"shrink-0 p-1.5 hover:bg-zinc-100 dark:hover:bg-white/10 rounded-md text-zinc-400 dark:text-white/50 hover:text-zinc-900 dark:hover:text-white transition-colors",children:(0,r.jsx)(s.Z,{size:16})})]}),(0,r.jsx)("div",{className:"flex-1 overflow-y-auto w-full custom-scrollbar p-2",children:k||"loading"===e&&!(0,P.YY)()?(0,r.jsx)("div",{className:"flex justify-center py-12",children:(0,r.jsx)(m.W,{size:24})}):eS?0===eE.length?(0,r.jsxs)("div",{className:"text-center py-12 text-zinc-400 dark:text-white/20 text-xs px-4 leading-relaxed break-keep",children:["‘",eC,"’ 검색 결과가 없어요."]}):(0,r.jsx)("div",{className:"space-y-1",children:eE.map(e=>(0,r.jsx)(J,{hit:e,query:eC,selectedId:C,onSelect:ex,onTogglePin:eg,onDelete:em},e.note.id))}):0!==p.length||Z?(0,r.jsxs)("div",{className:"space-y-1",children:[Z&&(0,r.jsx)("div",{className:"px-1 mb-1",children:(0,r.jsx)("form",{onSubmit:e=>{e.preventDefault(),ew(e.currentTarget.elements[0].value)},children:(0,r.jsx)("input",{autoFocus:!0,placeholder:"새 노트 제목",className:"w-full bg-zinc-100 dark:bg-[#18181b] text-zinc-900 dark:text-white placeholder-zinc-400 dark:placeholder-white/30 rounded-md py-2 px-3 text-xs border border-zinc-300 dark:border-white/10 focus:outline-none focus:border-[#007AFF] dark:focus:border-[#007AFF]",onBlur:e=>{e.target.value.trim()||F(!1)},onKeyDown:e=>{"Escape"===e.key&&F(!1)}})})}),ey.length>0&&(0,r.jsx)(N.M,{axis:"y",values:ey,onReorder:e=>{let t=[...e,...ej];b(t),eD(t)},className:"space-y-1",children:ey.map(e=>(0,r.jsx)(G,{note:e,selectedId:C,editingTitleId:X,editingTitleValue:B,onSelect:ex,onTogglePin:eg,onStartEdit:eb,onDelete:em,setEditingTitleValue:_,handleSaveTitle:ev,setEditingTitleId:L},e.id))}),ej.length>0&&(0,r.jsx)(N.M,{axis:"y",values:ej,onReorder:e=>{let t=[...ey,...e];b(t),eD(t)},className:"space-y-1",children:ej.map(e=>(0,r.jsx)(G,{note:e,selectedId:C,editingTitleId:X,editingTitleValue:B,onSelect:ex,onTogglePin:eg,onStartEdit:eb,onDelete:em,setEditingTitleValue:_,handleSaveTitle:ev,setEditingTitleId:L},e.id))})]}):(0,r.jsxs)("div",{className:"text-center py-12 text-zinc-400 dark:text-white/20 text-xs px-4 leading-relaxed",children:["생성된 노트가 없습니다.",(0,r.jsx)("br",{}),"우상단 + 버튼을 눌러보세요."]})})]}),(0,r.jsxs)("div",{className:"hidden md:flex flex-1 flex-col overflow-hidden relative work-note-main bg-[#fafaf9] dark:bg-[#0c0c0e]",children:[C?(0,r.jsx)(U,{id:C,initialData:p.find(e=>e.id===C)||{id:C,title:"",content:""},latest:p.find(e=>e.id===C),onTitleChange:(e,t)=>
1{b(n=>n.map(n=>n.id===e?{...n,title:t}:n))},onPersisted:(e,t)=>{b(n=>n.map(n=>n.id===e?{...n,...t}:n))},onImportRoster:eI},C):(0,r.jsx)("div",{className:"flex-1 flex items-center justify-center p-8",children:j?(0,r.jsx)(g.Z,{size:"lg",title:"선택된 노트가 없습니다",description:"왼쪽 목록에서 노트를 선택하거나 새로운 업무 노트를 작성해 보세요.",action:(0,r.jsxs)("button",{type:"button",onClick:eu,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 flex items-center gap-1.5",children:[(0,r.jsx)(s.Z,{size:16}),"새 업무노트 만들기"]})}):(0,r.jsx)(m.W,{size:20,className:"text-zinc-300 dark:text-white/20 animate-delayed-fade-in"})}),q&&(0,r.jsx)("div",{className:"absolute inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4",children:(0,r.jsxs)("div",{className:"bg-white dark:bg-[#18181b] w-full max-w-sm rounded-2xl shadow-2xl border border-zinc-200 dark:border-white/10 overflow-hidden flex flex-col max-h-[80%]",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-zinc-100 dark:border-white/5",children:[(0,r.jsxs)("h3",{className:"font-bold text-zinc-900 dark:text-white flex items-center gap-2",children:[(0,r.jsx)(c.Z,{size:16}),"수업 명렬표 가져오기"]}),(0,r.jsx)("button",{"aria-label":"닫기",onClick:()=>K(!1),className:"p-1 hover:bg-zinc-100 dark:hover:bg-white/10 rounded-md text-zinc-400 hover:text-zinc-600 dark:text-white/40 dark:hover:text-white transition-colors",children:(0,r.jsx)(a.Z,{size:16})})]}),(0,r.jsx)("div",{className:"flex-1 overflow-y-auto p-2 custom-scrollbar",children:0===Y.length?(0,r.jsxs)("div",{className:"py-8 text-center text-sm text-zinc-400 flex flex-col items-center gap-2",children:[(0,r.jsx)(m.W,{size:24}),(0,r.jsx)("span",{children:"학생 데이터를 불러오는 중..."})]}):0===$.length?(0,r.jsx)("div",{className:"py-6",children:(0,r.jsx)(g.Z,{size:"sm",title:"등록된 학생/학급이 없습니다",description:"설정 > 학생 명단에서 학급과 학생을 먼저 등록해 주세요."})}):(0,r.jsx)("div",{className:"grid gap-1",children:$.map(e=>(0,r.jsxs)("button",{onClick:()=>eT(e),className:"flex items-center justify-between w-full px-4 py-3 text-left bg-zinc-50 dark:bg-white/5 hover:bg-zinc-100 dark:hover:bg-white/10 rounded-lg transition-colors group",children:[(0,r.jsx)("span",{className:"font-medium text-zinc-700 dark:text-zinc-200 group-hover:text-zinc-900 dark:group-hover:text-white",children:e}),(0,r.jsxs)("span",{className:"text-xs text-zinc-400",children:[Y.filter(t=>{var n;return t.homeClassId===e||(null===(n=t.customClassIds)||void 0===n?void 0:n.includes(e))}).length,"명"]})]},e))})})]})})]})]})]})}function U(e){let{id:t,initialData:l,latest:a,onTitleChange:s,onPersisted:c,onImportRoster:o}=e,d=(0,v.XC)(),u=(0,P.Dv)(),x=(0,i.useRef)(l.title||""),h=(0,i.useRef)(null),{data:f,setData:p,syncExternal:m,hasUnsavedChanges:g,isSaving:b,flushSave:k}=j({storageKey:"work-note-v2-".concat(t),initialData:l,onSave:async e=>{var r,i;if(!t)return!1;let l=(null===(r=e.title)||void 0===r?void 0:r.trim())?e.title:"제목 없음",a=e.content||"";if(u){let{getGuestWorkNotes:e,saveGuestWorkNotes:r}=await n.e(6214).then(n.bind(n,96214)),i=await e(),o=new Date().toISOString(),d=i.map(e=>e.id===t?{...e,title:l,content:a,updatedAt:o}:e);return await r(d),l!==x.current&&(x.current=l,s(t,l)),null==c||c(t,{title:l,content:a,updatedAt:o}),!0}let o=await (0,w.X)("updateWorkNote",{id:t,title:l,content:a},d);if(o.success){l!==x.current&&(x.current=l,s(t,l));let e=null===(i=o.data)||void 0===i?void 0:i.updatedAt;null==c||c(t,e?{title:l,content:a,updatedAt:e}:{title:l,content:a})}return o.success},debounceMs:1e3}),y=(0,i.useCallback)(e=>{p(t=>({...t,content:e}))},[p]),N=z({latest:a,current:f,initialUpdatedAt:l.updatedAt,hasUnsavedChanges:g,isSaving:b,applyExternal:m,containerRef:h}),C=(0,i.useRef)(k);return(0,i.useEffect)(()=>{C.current=k},[k]),(0,i.useEffect)(()=>()=>{C.current()},[]),(0,r.jsxs)("div",{ref:h,className:"flex flex-col flex-1 overflow-hidden",children:[(0,r.jsxs)("div",{className:"h-14 shrink-0 border-b border-zinc-200 dark:border-white/5 bg-[#fafaf9] dark:bg-[#09090b] flex items-center justify-between px-8 work-note-header",children:[(0,r.jsx)("input",{type:"text",value:f.title||"",onChange:e=>p(t=>({...t,title:e.target.value})),onBlur:()=>k(),placeholder:"노트 제목을 입력하세요",className:"text-lg font-bold bg-transparent border-none text-zinc-900 dark:text-white focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 flex-1 min-w-0 placeholder-zinc-300 dark:placeholder-white/10 work-note-title-input"}),(0,r.jsx)(R.R,{isSaving:b,hasUnsavedChanges:g,className:"ml-4 shrink-0"})]}),(0,r.jsx)("div",{className:"flex-1 overflow-hidden",children:(0,r.jsx)(K,{content:f.content||"",onChange:y,onBlur:()=>k(),placeholder:"",onImportRoster:o},N)})]})}function G(e){let{note:t,selectedId:n,editingTitleId:i,editingTitleValue:l,onSelect:a,onTogglePin:s,onStartEdit:c,onDelete:d,setEditingTitleValue:p,handleSaveTitle:m,setEditingTitleId:g}=e,v=(0,C.o)();return(0,r.jsxs)(S.e,{value:t,dragListener:!1,dragControls:v,onClick:()=>i!==t.id&&a(t.id),role:"button",tabIndex:i===t.id?-1:0,"aria-label":"노트 열기: ".concat(t.title||"제목 없음"),onKeyDown:e=>
1{i!==t.id&&("Enter"===e.key||" "===e.key)&&(e.preventDefault(),a(t.id))},"data-selected":n===t.id,className:(0,b.cn)("w-full flex items-center justify-between px-2 py-2.5 rounded-lg cursor-pointer group border border-transparent select-none work-note-menu-item","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#007AFF]/60",n===t.id?"bg-white/10 text-white":"text-[#a1a1aa] hover:bg-white/[0.03] hover:text-white"),whileDrag:{scale:1.02,boxShadow:"0 8px 24px rgba(0,0,0,0.4)",cursor:"grabbing"},layout:!0,transition:{type:"spring",stiffness:400,damping:30},children:[(0,r.jsx)("div",{onPointerDown:e=>{e.preventDefault(),v.start(e)},className:"shrink-0 cursor-grab active:cursor-grabbing text-zinc-400 dark:text-white/20 hover:text-zinc-600 dark:hover:text-white/40 mr-1 touch-none",children:(0,r.jsx)(o.Z,{size:14})}),(0,r.jsxs)("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:[t.isPinned&&(0,r.jsx)(u,{size:11,className:"text-yellow-500 shrink-0",fill:"currentColor"}),i===t.id?(0,r.jsx)("input",{type:"text",value:l,onChange:e=>p(e.target.value),onBlur:()=>m(t.id),onKeyDown:e=>{"Enter"===e.key&&m(t.id),"Escape"===e.key&&g(null)},onClick:e=>e.stopPropagation(),autoFocus:!0,className:"flex-1 min-w-0 text-[14px] bg-zinc-100 dark:bg-[#1a1a1c] border border-zinc-300 dark:border-white/20 rounded px-2 py-0.5 focus:outline-none focus:border-zinc-400 dark:focus:border-white/40 text-zinc-900 dark:text-white"}):(0,r.jsx)("span",{className:(0,b.cn)("text-[14px] truncate flex-1 min-w-0 
1work-note-title",n===t.id&&"font-medium"),children:t.title||"제목 없음"})]}),(0,r.jsxs)("div",{className:(0,b.cn)("flex items-center gap-0.5 shrink-0 transition-opacity",i===t.id?"hidden":"opacity-0 group-hover:opacity-100 group-focus-within:opacity-100"),children:[(0,r.jsx)("button",{"aria-label":t.isPinned?"고정 해제":"고정",onClick:e=>s(e,t.id,t.isPinned),className:(0,b.cn)("p-1 rounded hover:bg-white/10",t.isPinned?"text-yellow-500":"text-white/30"),children:t.isPinned?(0,r.jsx)(x,{size:12}):(0,r.jsx)(u,{size:12})}),(0,r.jsx)("button",{"aria-label":"수정",onClick:e=>c(e,t),className:"p-1 rounded hover:bg-white/10 text-white/30 hover:text-white",children:(0,r.jsx)(h.Z,{size:12})}),(0,r.jsx)("button",{"aria-label":"삭제",onClick:e=>d(e,t.id),className:"p-1 rounded hover:bg-white/10 text-white/30 hover:text-red-400",children:(0,r.jsx)(f.Z,{size:12})})]})]})}function J(e){let{hit:t,query:n,selectedId:i,onSelect:l,onTogglePin:a,onDelete:s}=e,{note:c,snippet:o}=t;return(0,r.jsxs)("div",{role:"button",tabIndex:0,"aria-label":"노트 열기: ".concat(c.title||"제목 없음"),onClick:()=>l(c.id),onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),l(c.id))},"data-selected":i===c.id,className:(0,b.cn)("group w-full px-2 py-2 rounded-lg cursor-pointer border border-transparent select-none work-note-menu-item","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#007AFF]/60",i===c.id?"bg-white/10 text-white":"text-[#a1a1aa] hover:bg-white/[0.03] hover:text-white"),children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[c.isPinned&&(0,r.jsx)(u,{size:11,className:"text-yellow-500 shrink-0",fill:"currentColor"}),(0,r.jsx)(Z,{text:c.title||"제목 없음",query:n,className:"text-[14px] truncate flex-1 min-w-0 
1work-note-title"}),(0,r.jsxs)("div",{className:"flex items-center gap-0.5 shrink-0 opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 transition-opacity",children:[(0,r.jsx)("button",{"aria-label":c.isPinned?"고정 해제":"고정",onClick:e=>a(e,c.id,c.isPinned),className:(0,b.cn)("p-1 rounded hover:bg-white/10",c.isPinned?"text-yellow-500":"text-white/30"),children:c.isPinned?(0,r.jsx)(x,{size:12}):(0,r.jsx)(u,{size:12})}),(0,r.jsx)("button",{"aria-label":"삭제",onClick:e=>s(e,c.id),className:"p-1 rounded hover:bg-white/10 text-white/30 hover:text-red-400",children:(0,r.jsx)(f.Z,{size:12})})]})]}),o&&(0,r.jsx)("div",{className:"mt-1 text-[11px] leading-snug text-zinc-500 dark:text-white/35 line-clamp-2 break-keep",children:(0,r.jsx)(Z,{text:o,query:n})})]})}},16481:function(e,t,n){n.d(t,{c:function(){return r}});function r(){let e=Promise.resolve();return function(t){let n=e.then(()=>t(),()=>t());return e=n.then(()=>void 0,()=>void 0),n}}},88507:function(e,t,n){n.d(t,{M:function(){return u}});var r=n(57437),i=n(62035),l=n(2265),a=n(8005),s=n(13100),c=n(53576),o=n(33811),d=n(98425);let u=(0,l.forwardRef)(function(e,t){let{children:n,as:u="ul",axis:f="y",onReorder:p,values:m,...g}=e,b=(0,c.h)(()=>s.E[u]),v=[],w=(0,l.useRef)(!1),k=(0,l.useRef)(null);(0,i.k)(!!m,"Reorder.Group must be provided a values prop","reorder-values"),(0,l.useEffect)(()=>{w.current=!1});let y={overflowAnchor:"none",...g.style};return(0,r.jsx)(b,{...g,style:y,ref:e=>{k.current=e,"function"==typeof t?t(e):t&&(t.current=e)},ignoreStrict:!0,children:(0,r.jsx)(a.Y.Provider,{value:{axis:f,groupRef:k,registerItem:(e,t)=>{let n=v.findIndex(t=>e===t.value);-1!==n?v[n].layout=t[f]:v.push({value:e,layout:t[f]}),v.sort(h)},updateOrder:(e,t,n)=>{if(w.current)return;let r=function(e,t,n,r){if(!r)return e;let i=e.findIndex(e=>e.value===t);if(-1===i)return e;let l=r>0?1:-1,a=e[i+l];if(!a)return e;let s=e[i],c=a.layout,u=(0,o.t)(c.min,c.max,.5);return 1===l&&s.layout.max+n>u||-1===l&&s.layout.min+n<u?(0,d.uo)(e,i,i+l):e}(v,e,t,n);v!==r&&(w.current=!0,p(r.map(x).filter(e=>-1!==m.indexOf(e))))}},children:n})})});function x(e){return e.value}function h(e,t){return e.layout.min-t.layout.min}},66109:function(e,t,n){n.d(t,{e:function(){return b}});var r=n(57437),i=n(87493),l=n(62035),a=n(2265),s=n(8005),c=n(13100),o=n(53576),d=n(81906),u=n(33728);let x=new Set(["auto","scroll"]),h=new WeakMap,f=new WeakMap,p=null;function m(e,t){let n=null==e?void 0:e.parentElement;for(;n;){if(function(e,t){let n=getComputedStyle(e),r="x"===t?n.overflowX:n.overflowY,i=e===document.body||e===document.documentElement;return x.has(r)||i}(n,t))return n;n=n.parentElement}return null}function g(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,i.i)(e)?e:(0,d.c)(t)}let b=(0,a.forwardRef)(function(e,t){let{children:n,style:i={},value:d,as:x="li",onDrag:b,onDragEnd:v,layout:w=!0,...k}=e,y=(0,o.h)(()=>c.E[x]),j=(0,a.useContext)(s.Y),z={x:g(i.x),y:g(i.y)},N=(0,u.H)([z.x,z.y],e=>{let[t,n]=e;return t||n?1:"unset"});(0,l.k)(!!j,"Reorder.Item must be a child of Reorder.Group","reorder-item-child");let{axis:C,registerItem:S,updateOrder:E,groupRef:P}=j;return(0,r.jsx)(y,{drag:C,...k,dragSnapToOrigin:!0,style:{...i,x:z.x,y:z.y,zIndex:N},layout:w,onDrag:(e,t)=>{let{velocity:n,point:r}=t;E(d,z[C].get(),n[C]),function(e,t,n,r){if(!e)return;p=e;let i=m(e,n);if(!i)return;let{amount:l,edge:a}=function(e,t,n){let r=t.getBoundingClientRect(),i="x"===n?Math.max(0,r.left):Math.max(0,r.top),l="x"===n?Math.min(window.innerWidth,r.right):Math.min(window.innerHeight,r.bottom),a=e-i,s=l-e;if(a<50){let e=1-a/50;return{amount:-25*e*e,edge:"start"}}if(s<50){let e=1-s/50;return{amount:25*e*e,edge:"end"}}return{amount:0,edge:null}}(t-("x"===n?window.scrollX:window.scrollY),i,n);if(null===a){f.delete(i),h.delete(i);return}let s=f.get(i),c=i===document.body||i===document.documentElement;if(s!==a){if(!("start"===a&&r<0||"end"===a&&r>0))return;f.set(i,a);let e="x"===n?i.scrollWidth-(c?window.innerWidth:i.clientWidth):i.scrollHeight-(c?window.innerHeight:i.clientHeight);h.set(i,e)}if(l>0){let e=h.get(i);if(("x"===n?c?window.scrollX:i.scrollLeft:c?window.scrollY:i.scrollTop)>=e)return}"x"===n?c?window.scrollBy({left:l}):i.scrollLeft+=l:c?window.scrollBy({top:l}):i.scrollTop+=l}(P.current,r[C],C,n[C]),b&&b(e,t)},onDragEnd:(e,t)=>{!function(){if(p){let e=m(p,"y");e&&(f.delete(e),h.delete(e));let t=m(p,"x");t&&t!==e&&(f.delete(t),h.delete(t)),p=null}}(),v&&v(e,t)},onLayoutMeasure:e=>{S(d,e)},ref:t,ignoreStrict:!0,children:n})})},8005:function(e,t,n){n.d(t,{Y:function(){return r}});let r=(0,n(2265).createContext)(null)},59717:function(e,t,n){n.d(t,{o:function(){return a}});var r=n(53576);
1class i{subscribe(e){return this.componentControls.add(e),()=>this.componentControls.delete(e)}start(e,t){this.componentControls.forEach(n=>{n.start(e.nativeEvent||e,t)})}cancel(){this.componentControls.forEach(e=>{e.cancel()})}stop(){this.componentControls.forEach(e=>{e.stop()})}constructor(){this.componentControls=new Set}}let l=()=>new i;function a(){return(0,r.h)(l)}}}]);

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.