1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2537],{83229:function(e,t,a){a.d(t,{Z:function(){return l}});let l=(0,a(79205).Z)("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]])},17689:function(e,t,a){a.d(t,{Z:function(){return l}});let l=(0,a(79205).Z)("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]])},52537:function(e,t,a){a.r(t),a.d(t,{default:function(){return A}});var l=a(57437),n=a(2265),s=a(54887),r=a(40875),i=a(98728),c=a(48736),d=a(41905),o=a(79205);let x=(0,o.Z)("Filter",[["polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3",key:"1yg77f"}]]);var u=a(83229),m=a(32489),h=a(17689),f=a(18930),b=a(92451),p=a(10407);let g=(0,o.Z)("ZoomOut",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]),v=(0,o.Z)("ZoomIn",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]);var k=a(99397),y=a(53834),j=a(93448),z=a(4908),w=a(67920),N=a(27526),C=a(54696),S=a(83008),D=a(30226),F=a(98319),P=a(84929),M=a(64954);let E=["ì§ë³","ì¸ì ","미ì¸ì ","기í"],R=["ê²°ì","ì§ê°","ì¡°í´","ê²°ê³¼"].flatMap(e=>E.map(t=>"".concat(e,"-").concat(t))),Z={combinations:[...R]},U=[{value:"studentName",label:"íì ì´ë¦",example:"í길ë"},{value:"grade",label:"íë
",example:"3"},{value:"classNum",label:"ë°",example:"2"},{value:"number",label:"ë²í¸",example:"15"},{value:"absenceType",label:"ì¶ê²° ì í",example:"ê²°ì"},{value:"reason",label:"ì¶ê²° ì¬ì ",example:"ì§ë³"},{value:"startDate",label:"ììì¼",example:"0000ë
00ì 00ì¼"},{value:"startMonth",label:"ììì¼ (ì)",example:"00"},{value:"startDay",label:"ììì¼ (ì¼)",example:"00"},{value:"endDate",label:"ì¢
ë£ì¼",example:"0000ë
00ì 00ì¼"},{value:"endMonth",label:"ì¢
ë£ì¼ (ì)",example:"00"},{value:"endDay",label:"ì¢
ë£ì¼ (ì¼)",example:"00"},{value:"details",label:"ìì¸ ì¬ì ",example:"ë
ê°ì¼ë¡ ì¸í ê²°ì"},{value:"duration",label:"ê¸°ê° (ì¼ì)",example:"3ì¼"},{value:"check-ê²°ì",label:"â (ê²°ì ì ì²´í¬ íì)",example:"â"},{value:"check-ì§ê°",label:"â (ì§ê° ì ì²´í¬ íì)",example:"â"},{value:"check-ì¡°í´",label:"â (ì¡°í´ ì ì²´í¬ íì)",example:"â"},{value:"check-ê²°ê³¼",label:"â (ê²°ê³¼ ì ì²´í¬ íì)",example:"â"},{value:"check-ì§ë³",label:"â (ì§ë³ ì ì²´í¬ íì)",example:"â"},{value:"check-ì¸ì ",label:"â (ì¸ì ì ì²´í¬ íì)",example:"â"},{value:"check-미ì¸ì ",label:"â (미ì¸ì ì ì²´í¬ íì)",example:"â"},{value:"check-기í",label:"â (기í ì ì²´í¬ íì)",example:"â"}];function A(){let{students:e,isLoaded:t}=(0,z.AF)(),d=(0,w.XC)(),{status:o}=(0,N.kP)(),x=(0,C.Dv)(),[u,m]=(0,n.useState)(!1),[h,f]=(0,n.useState)(null),{showToast:b}=(0,F.p)(),{openQuotaModal:p}=(0,P.f)(),g=(0,n.useRef)(!1),[v,k]=(0,n.useState)(!1),[M,E]=(0,n.useState)("templates"),[R,U]=(0,n.useState)([]),[A,T]=(0,n.useState)(null),[I,X]=(0,n.useState)(!0),[Y,O]=(0,n.useState)(""),[_,K]=(0,n.useState)(!1),[W,B]=(0,n.useState)([]),[H,V]=(0,n.useState)(null),[q,J]=(0,n.useState)([]),[G,Q]=(0,n.useState)(0),[$,ee]=(0,n.use
1State)([]),[et,ea]=(0,n.useState)(1),el=(0,n.useRef)(null),en=(0,n.useRef)(null),[es,er]=(0,n.useState)(null),[ei,ec]=(0,n.useState)(!1),[ed,eo]=(0,n.useState)([]),[ex,eu]=(0,n.useState)(null),[em,eh]=(0,n.useState)(null),[ef,eb]=(0,n.useState)(!1),[ep,eg]=(0,n.useState)("thisMonth"),[ev,ek]=(0,n.useState)(Z),[ey,ej]=(0,n.useState)(!1),ez=(0,n.useMemo)(()=>{let e=x?new Date("2026-03-12"):new Date,t=e=>{let t=e.getFullYear(),a=String(e.getMonth()+1).padStart(2,"0"),l=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(a,"-").concat(l)};return"thisMonth"===ep?{start:t(new Date(e.getFullYear(),e.getMonth(),1)),end:t(e)}:"lastMonth"===ep?{start:t(new Date(e.getFullYear(),e.getMonth()-1,1)),end:t(new Date(e.getFullYear(),e.getMonth(),0))}:{start:"",end:""}},[ep,x]),ew=(0,n.useCallback)(async()=>{X(!0);try{let e=await (0,S.X)("getAttendancePdfTemplates",{},d);e.success&&e.data&&U(e.data)}catch(e){console.error("Failed to load templates:",e)}finally{X(!1)}},[d]);(0,n.useEffect)(()=>{ew()},[ew]),(0,n.useEffect)(()=>{(async()=>{try{let e=await (0,S.X)("getAttendancePrintConfig",{},d);e.success&&e.data&&ek(e.data)}catch(e){console.error("Failed to load filter config:",e)}})()},[d]),(0,n.useEffect)(()=>{R.length>0&&!A&&T(R[0])},[R,A]);let eN=(0,n.useCallback)(async e=>{try{let t=await fetch("/api/files/".concat(e));if(!t.ok)throw Error("Failed to fetch PDF");let l=await t.arrayBuffer(),n=await Promise.all([a.e(9980),a.e(2957)]).then(a.bind(a,27781));n.GlobalWorkerOptions.workerSrc="/pdf.worker.min.mjs";let s=await n.getDocument({data:new Uint8Array(l)}).promise,r=[],i=[];for(let e=1;e<=s.numPages;e++){let t=await s.getPage(e),a=t.getViewport({scale:2}),l=document.createElement("canvas");l.width=a.width,l.height=a.height;let n=l.getContext("2d");await t.render({canvasContext:n,viewport:a}).promise,r.push(l.toDataURL("image/png"));let c=t.getViewport({scale:1});i.push({width:c.width,height:c.height})}J(r),ee(i),Q(0)}catch(e){console.error("Failed to load PDF preview:",e)}},[]),eC=(0,n.useCallback)(async e=>{if("application/pdf"===e.type){K(!0);try{let t=await (0,D.c)(e);if(!t.success||!t.file){if(t.quotaInfo){p(t.quotaInfo);return}throw Error(t.error||"Upload failed")}let a=Y.trim()||e.name.replace(".pdf",""),l=await (0,S.X)("saveAttendancePdfTemplate",{name:a,pdfFileKey:t.file.key,fields:[]},d);l.success&&l.data&&(await ew(),T(l.data),B([]),O(""),await eN(t.file.key),E("mapping"))}catch(e){console.error("Upload error:",e),b(e.message||"ì
ë¡ë ì¤ ì¤ë¥ê° ë°ìíìµëë¤.","error")}finally{K(!1)}}},[d,ew,Y,eN]),eS=(0,n.useCallback)(async e=>{try{(await (0,S.X)("deleteAttendancePdfTemplate",{id:e},d)).success&&((null==A?void 0:A.id)===e&&T(null),await ew())}catch(e){}},[d,ew,A]),eD=(0,n.useCallback)(async e=>{T(e),B(e.fields||[]),await eN(e.pdfFileKey),E("mapping")},[eN]),eF=(0,n.useCallback)(()=>{let e={fieldType:"studentName",label:"íì ì´ë¦",x:100,y:100,width:120,height:24,fontSize:12,page:G};B(t=>[...t,e]),V(W.length)},[G,W.length]),eP=(0,n.useCallback)(()=>{null!==H&&(B(e=>e.filter((e,t)=>t!==H)),V(null))},[H]),eM=(0,n.useCallback)((e,t)=>{B(a=>a.map((a,l)=>l===e?{...a,...t}:a))},[]),eE=(0,n.useCallback)(async()=>{if(A){ec(!0);try{(await (0,S.X)("saveAttendancePdfTemplate",{id:A.id,name:A.name,pdfFileKey:A.pdfFileKey,fields:W},d)).success&&(T({...A,fields:W}),await ew())}catch(e){}finally{ec(!1)}}},[A,W,d,ew]),eR=(0,n.useCallback)(e=>{let t=en.current;if(!t)return null;let a=t.getBoundingClientRect();return $[G]?{x:(e.clientX-a.left)/et,y:(e.clientY-a.top)/et}:null},[G,$,et]),eZ=(0,n.useCallback)((e,t)=>{e.preventDefault(),e.stopPropagation();let a=eR(e);if(!a)return;let l=W[t];V(t),er({fieldIndex:t,startMouseX:a.x,startMouseY:a.y,startFieldX:l.x,startFieldY:l.y})},[W,eR]);(0,n.useEffect)(()=>{if(!es)return;let e=e=>{let t=en.current;if(!t)return;let a=t.getBoundingClientRect(),l=$[G];if(!l)return;let n=(e.clientX-a.left)/et,s=(e.clientY-a.top)/et,r=n-es.startMouseX,i=s-es.startMouseY,c=Math.max(0,Math.min(l.width,es.startFieldX+r)),d=Math.max(0,Math.min(l.height,es.startFieldY+i));eM(es.fieldIndex,{x:Math.round(c),y:Math.round(d)})},t=()=>{er(null)};return document.addEventListener("mousemove",e),document.addEventListener("mouseup",t),()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t)}},[es,G,$,et,eM]);let eU=(0,n.useCallback)(e=>{(e.target===en.current||e.target===el.current)&&V(null)},[]),eA=(0,n.useMemo)(()=>W.map((e,t)=>({...e,_index:t})).filter(e=>e.page===G),[W,G]),eL=(0,n.useCallback)(async()=>
1{if("loading"!==o&&("unauthenticated"!==o||x)&&!g.current)try{if(console.log("[AttendancePrint] Fetching via API...",{dateRange:ez}),g.current=!0,m(!0),f(null),x){let{getGuestData:e,generateMockData:t,saveGuestData:l}=await Promise.resolve().then(a.bind(a,96214)),n=(await e()).attendanceRecords||[];0===n.length&&(n=(await t()).attendanceRecords||[],await l("attendanceRecords",n));let s=new Date(ez.start),r=new Date(ez.end);r.setDate(r.getDate()+1),r.setMilliseconds(-1);let i=n.filter(e=>{let t=new Date(e.date),a=e.endDate?new Date(e.endDate):null;return t<=r&&(!!a&&a>=s||!a&&t>=s)});eo(i)}else{let e=new URLSearchParams({startDate:ez.start,endDate:ez.end}).toString(),t=await fetch("/api/attendance/records?".concat(e)),a=await t.json();if(console.log("[AttendancePrint] API Response:",a.success),a.success&&a.data)eo(a.data);else if(!a.success)throw Error(a.error||"Failed to fetch")}}catch(e){console.error("Failed to load attendance records:",e),f("error")}finally{console.log("[AttendancePrint] Fetch completed"),m(!1),g.current=!1}},[ez,o,x]);(0,n.useEffect)(()=>{console.log("[AttendancePrint] Mount/Update Effect",{status:o}),"loading"!==o&&("unauthenticated"!==o||x)&&eL()},[eL,o,x]);let eT=(0,n.useMemo)(()=>ed.filter(e=>!e.type||!e.reason||ev.combinations.includes("".concat(e.type,"-").concat(e.reason))),[ed,ev]),eI=(0,n.useCallback)(async e=>{ek(e),ej(!0);try{await (0,S.X)("saveAttendancePrintConfig",e,d)}catch(e){console.error("Failed to save filter config:",e)}finally{ej(!1)}},[d]),eX=(0,n.useCallback)(async()=>{if(!A||!ex)return;let t=ed.find(e=>e.id===ex);if(!t)return;let l=e.find(e=>e.id===t.studentId);if(l){eb(!0);try{var n,s;let e=await fetch("/api/files/".concat(A.pdfFileKey));if(!e.ok)throw Error("Failed to fetch PDF");let r=await e.arrayBuffer(),i={name:l.name,grade:null!==(n=l.grade)&&void 0!==n?n:void 0,classNum:null!==(s=l.classNum)&&void 0!==s?s:void 0,number:l.number}
1,c={type:t.type,reason:t.reason,startDate:t.date,endDate:t.endDate,details:t.details},{generateFilledPdf:d}=await Promise.all([a.e(1917),a.e(3323),a.e(600)]).then(a.bind(a,30600)),o=await d(r,A.fields,i,c);em&&URL.revokeObjectURL(em);let x=URL.createObjectURL(o);eh(x)}catch(e){console.error("PDF generation error:",e)}finally{eb(!1)}}},[A,ex,ed,e,em]);(0,n.useEffect)(()=>{ex&&A&&eX()},[ex]),(0,n.useCallback)(()=>{if(!em)return;let e=document.createElement("iframe");e.style.display="none",e.src=em,document.body.appendChild(e),e.onload=()=>{var t;null===(t=e.contentWindow)||void 0===t||t.print(),setTimeout(()=>document.body.removeChild(e),1e3)}},[em]),(0,n.useCallback)(()=>{if(!em)return;let e=document.createElement("a");e.href=em,e.download="ì¶ê²°_".concat(ex||"output",".pdf"),e.click()},[em,ex]),(0,n.useEffect)(()=>()=>{em&&URL.revokeObjectURL(em)},[em]);let eY=(0,n.useCallback)(e=>{let t=R.find(t=>t.id===e);t&&(T(t),B(t.fields||[]),em&&(URL.revokeObjectURL(em),eh(null)))},[R,em]);return(0,n.useEffect)(()=>{ex&&A&&!ef&&eX()},[null==A?void 0:A.id]),(0,l.jsxs)("div",{className:"h-full flex flex-col md:flex-row bg-[#fafaf9] dark:bg-[#09090b] text-zinc-900 dark:text-zinc-100 overflow-x-hidden overflow-y-auto md:overflow-hidden",children:[(0,l.jsxs)("div",{className:"w-full md:w-60 max-h-[35vh] md:max-h-none shrink-0 border-b md:border-b-0 md:border-r border-zinc-200 dark:border-zinc-800 flex flex-col overflow-hidden bg-[#f8f8f5] dark:bg-[#0D0D0D] nav-rail-shadow sub-sidebar-enter",children:[(0,l.jsx)("div",{className:"shrink-0 h-[60px] flex items-center px-3 border-b border-zinc-200 dark:border-zinc-800",children:(0,l.jsx)("div",{className:"flex items-center h-[34px] w-full bg-[#fafaf9] dark:bg-[#1A1A1A] border border-zinc-200 dark:border-zinc-700 rounded-lg p-1",children:[{key:"thisMonth",label:"ì´ë²ë¬"},{key:"lastMonth",label:"ì§ëë¬"},{key:"all",label:"ì ì²´"}].map(e=>(0,l.jsx)("button",{onClick:()=>eg(e.key),className:(0,j.cn)("h-full flex-1 text-[13px] font-medium rounded-md transition flex items-center justify-center",ep===e.key?"bg-[#EEEEE8] text-black dark:bg-white/10 dark:text-white":"text-zinc-500 hover:text-zinc-900 dark:text-[#666] dark:hover:text-white"),children:e.label},e.key))})}),(0,l.jsx)("div",{className:"flex-1 overflow-y-auto",children:0===eT.length?(0,l.jsx)("div",{className:"h-full flex flex-col items-center justify-center p-8 text-zinc-400 dark:text-zinc-500 min-h-[200px]",children:u?(0,l.jsxs)("div",{className:"flex flex-col items-center gap-3",children:[(0,l.jsx)("div",{className:"w-5 h-5 border-2 border-zinc-300 border-t-zinc-600 dark:border-zinc-700 dark:border-t-zinc-400 rounded-full animate-spin"}),(0,l.jsx)("span",{className:"text-sm",children:"ë°ì´í°ë¥¼ ë¶ë¬ì¤ë ì¤..."})]}):h?(0,l.jsxs)("div",{className:"flex flex-col items-center gap-3 text-center px-4",children:[(0,l.jsx)("div",{className:"text-red-500 mb-1",children:"â ï¸"}),(0,l.jsx)("span",{className:"text-sm text-zinc-600 dark:text-zinc-400",children:"ë°ì´í°ë¥¼ ë¶ë¬ì¤ì§ 못íìµëë¤."}),(0,l.jsx)("button",{onClick:()=>eL(),className:"mt-1 px-3 py-1.5 bg-zinc-100 dark:bg-zinc-800 hover:bg-zinc-200 dark:hover:bg-zinc-700 rounded text-xs font-medium transition-colors border border-zinc-200 dark:border-zinc-700",children:"ë¤ì ìë"})]}):(0,l.jsx)("div",{className:"text-center text-xs",children:"í´ë¹ 기ê°ì ì¶ê²° 기ë¡ì´ ììµëë¤."})}):(0,l.jsx)("div",{className:"p-1.5 space-y-0.5",children:eT.map(e=>(0,l.jsxs)("button",{onClick:()=>eu(e.id),className:(0,j.cn)("w-full text-left px-3 py-2 rounded-md transition-colors",ex===e.id?"bg-[#EEEEE8] dark:bg-[#202023]":"hover:bg-[#EEEEE8] dark:hover:bg-[#202023]"),children:[(0,l.jsxs)("div",{className:"text-[13px]",children:[(0,l.jsx)("span",{className:"font-medium",children:e.studentName}),(e.reason||e.type)&&(0,l.jsxs)("span",{className:"text-zinc-500 dark:text-zinc-400",children:[" ",e.reason&&e.reason,e.type&&" ".concat(e.type)]})]}),(0,l.jsxs)("div",{className:"text-xs text-zinc-400 dark:text-zinc-500 mt-0.5",children:[e.date,e.endDate&&e.endDate!==e.date?" ~ ".concat(e.endDate):""]})]},e.id))})})]}),(0,l.jsxs)("div",{className:"flex-1 flex flex-col overflow-hidden",children:[(0,l.jsxs)("div",{className:"shrink-0 h-[60px] flex items-center justify-end gap-3 px-4 border-b border-zinc-200 dark:border-zinc-800",children:[I?(0,l.jsx)("span",{className:"text-sm text-zinc-400",children:"ë¶ë¬ì¤ë ì¤..."}):R.length>0&&(0,l.jsxs)("div",{className:"relative",children:[(0,l.jsx)("select",{value:(null==A?void 0:A.id)||"",onChange:e=>eY(e.target.value),className:"pl-3 pr-9 py-1.5 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-lg text-sm focus:outline-none focus:border-blue-500 appearance-none cursor-pointer",children:R.map(e=>(0,l.jsx)("option",{value:e.id,children:e.name},e.id))}),(0,l.jsx)(r.Z,{className:"absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-zinc-400 pointer-events-none"})]}),(0,l.jsx)("button",{onClick:()=>k(!0),className:"p-2 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-zinc-500 hover:text-zinc-700 dark:hover:text-zinc-300",title:"ì¶ê²° ì¶ë ¥ ì¤ì ",children:(0,l.jsx)(i.Z,{className:"w-5 h-5"})})]}),ef?(0,l.jsx)("div",{className:"flex-1 flex items-center justify-center text-zinc-400 dark:text-zinc-500",children:(0,l.jsxs)("div",{className:"text-center space-y-3",children:[(0,l.jsx)(y.W,{size:40,className:"mx-auto"}),(0,l.jsx)("p",{className:"text-sm",children:"PDF ìì± ì¤..."})]})}):em?(0,l.jsx)("div",{className:"flex-1 overflow-auto bg-[#fafaf9] dark:bg-zinc-950 flex items-start justify-center p-4",children:(0,l.jsx)("iframe",{src:em,className:"w-full h-full border-0 bg-white rounded-lg shadow-lg",title:"PDF Preview"})}):(0,l.jsx)("div",{className:"flex-1 flex items-center justify-center text-zinc-400 dark:text-zinc-500",children:(0,l.jsxs)("div",{className:"text-center space-y-2",children:[(0,l.jsx)(c.Z,{className:"w-12 h-12 mx-auto text-zinc-200 dark:text-zinc-800"}),A?(0,l.jsxs)("p",{className:"text-sm",children:["ì¼ìª½ìì ì¶ê²° 기ë¡ì ì ííë©´",(0,l.jsx)("br",{}),"ìëì¼ë¡ ë¯¸ë¦¬ë³´ê¸°ê° ìì±ë©ëë¤."]}):(0,l.jsxs)("div",{className:"space-y-2",children:[(0,l.jsx)("p",{className:"text-sm",children:"í
í릿ì 먼ì ì¤ì íì¸ì."}),(0,l.jsx)("button",{onClick:()=>{k(!0),E("templates")}
1,className:"text-sm text-blue-600 dark:text-blue-400 hover:underline",children:"ì¤ì ì´ê¸°"})]})]})})]}),v&&(0,s.createPortal)((0,l.jsx)(L,{settingsTab:M,setSettingsTab:E,onClose:()=>k(!1),templates:R,isLoadingTemplates:I,templateName:Y,setTemplateName:O,isUploading:_,onUpload:eC,onSelectTemplate:eD,onDeleteTemplate:eS,selectedTemplate:A,pdfPageImages:q,pdfDimensions:$,currentPage:G,setCurrentPage:Q,fields:W,currentPageFields:eA,selectedFieldIndex:H,setSelectedFieldIndex:V,zoom:et,setZoom:ea,canvasContainerRef:el,pdfWrapperRef:en,isDragging:!!es,onFieldMoveStart:eZ,onCanvasClick:eU,onAddField:eF,onRemoveField:eP,onUpdateField:eM,totalPages:q.length,onSaveFields:eE,isSavingTemplate:ei,filterConfig:ev,onSaveFilterConfig:eI,isSavingFilter:ey}),document.body)]})}function L(e){let{settingsTab:t,setSettingsTab:a,onClose:n,templates:s,isLoadingTemplates:r,templateName:i,setTemplateName:o,isUploading:h,onUpload:f,onSelectTemplate:b,onDeleteTemplate:p,selectedTemplate:g,pdfPageImages:v,pdfDimensions:k,currentPage:y,setCurrentPage:z,fields:w,currentPageFields:N,selectedFieldIndex:C,setSelectedFieldIndex:S,zoom:D,setZoom:F,canvasContainerRef:P,pdfWrapperRef:M,isDragging:E,onFieldMoveStart:R,onCanvasClick:Z,onAddField:U,onRemoveField:A,onUpdateField:L,totalPages:Y,onSaveFields:O,isSavingTemplate:_,filterConfig:K,onSaveFilterConfig:W,isSavingFilter:B}=e,H=[{key:"templates",label:"í
í릿",icon:c.Z},{key:"mapping",label:"íë 매í",icon:d.Z},{key:"filter",label:"íì ì¤ì ",icon:x}];return(0,l.jsxs)("div",{className:"fixed inset-0 z-[100] flex items-center justify-center",children:[(0,l.jsx)("div",{className:"absolute inset-0 bg-black/50",onClick:n}),(0,l.jsxs)("div",{className:"relative w-[95vw] max-w-[1200px] h-[85vh] bg-white dark:bg-zinc-900 rounded-2xl shadow-2xl flex flex-col overflow-hidden",children:[(0,l.jsxs)("div",{className:"shrink-0 flex items-center justify-between px-6 py-4 border-b border-zinc-200 dark:border-zinc-800",children:[(0,l.jsx)("h2",{className:"text-base font-semibold",children:"ì¶ê²° ì¶ë ¥ ì¤ì "}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:["mapping"===t&&(0,l.jsxs)("button",{onClick:O,disabled:_||!g,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm text-white bg-blue-600 hover:bg-blue-500 disabled:opacity-50 rounded-lg transition-colors",children:[(0,l.jsx)(u.Z,{className:"w-4 h-4"}),_?"ì ì¥ ì¤...":"ì ì¥"]}),(0,l.jsx)("button",{"aria-label":"ë«ê¸°",onClick:n,className:"p-2 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:(0,l.jsx)(m.Z,{className:"w-5 h-5"})})]})]}),(0,l.jsxs)("div",{className:"flex-1 flex overflow-hidden",children:[(0,l.jsx)("div",{className:"w-36 shrink-0 border-r border-zinc-200 dark:border-zinc-800 bg-zinc-50 dark:bg-zinc-900/50 py-2",children:H.map(e=>(0,l.jsxs)("button",{onClick:()=>a(e.key),className:(0,j.cn)("w-full flex items-center gap-2 px-4 py-2.5 text-sm transition-colors text-left",t===e.key?"bg-white dark:bg-zinc-800 text-blue-600 dark:text-blue-400 border-r-2 border-blue-600 dark:border-blue-400 font-medium":"text-zinc-600 dark:text-zinc-400 hover:bg-zinc-100 dark:hover:bg-zinc-800"),children:[(0,l.jsx)(e.icon,{className:"w-4 h-4 shrink-0"}),e.label]},e.key))}),(0,l.jsxs)("div",{className:"flex-1 overflow-hidden",children:["templates"===t&&(0,l.jsx)(I,{templates:s,isLoading:r,templateName:i,setTemplateName:o,isUploading:h,onUpload:f,onSelect:b,onDelete:p}),"mapping"===t&&(g?(0,l.jsx)(X,{pdfPageImages:v,pdfDimensions:k,currentPage:y,setCurrentPage:z,fields:w,currentPageFields:N,selectedFieldIndex:C,setSelectedFieldIndex:S,zoom:D,setZoom:F,canvasContainerRef:P,pdfWrapperRef:M,isDragging:E,onFieldMoveStart:R,onCanvasClick:Z,onAddField:U,onRemoveField:A,onUpdateField:L,totalPages:Y}):(0,l.jsx)("div",{className:"h-full flex items-center justify-center text-zinc-400 dark:text-zinc-500",children:(0,l.jsxs)("div",{className:"text-center space-y-2",children:[(0,l.jsx)(c.Z,{className:"w-12 h-12 mx-auto text-zinc-200 dark:text-zinc-800"}),(0,l.jsx)("p",{className:"text-sm",children:"먼ì í
í릿 íìì í
í릿ì ì ííì¸ì."})]})}
1)),"filter"===t&&(0,l.jsx)(T,{filterConfig:K,onSave:W,isSaving:B})]})]})]})]})}function T(e){let{filterConfig:t,onSave:a,isSaving:s}=e,[r,i]=(0,n.useState)(t.combinations);(0,n.useEffect)(()=>{i(t.combinations)},[t]);let c=e=>{i(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},d=JSON.stringify([...r].sort())!==JSON.stringify([...t.combinations].sort());return(0,l.jsx)("div",{className:"h-full overflow-y-auto p-6",children:(0,l.jsx)("div",{className:"max-w-2xl mx-auto space-y-6",children:(0,l.jsxs)("div",{className:"p-6 rounded-xl border border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-900/50 space-y-5",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h3",{className:"text-base font-medium mb-1",children:"íì ì¤ì "}),(0,l.jsx)("p",{className:"text-sm text-zinc-500 dark:text-zinc-400",children:"ì¬ì´ëë°ì íìí ì¶ê²° í목ì ì ííì¸ì."})]}),(0,l.jsx)("div",{className:"grid grid-cols-2 gap-2",children:R.map(e=>{let[t,a]=e.split("-");return(0,l.jsxs)("label",{className:"flex items-center gap-2.5 px-3 py-2 rounded-lg hover:bg-zinc-50 dark:hover:bg-zinc-800/50 cursor-pointer transition-colors",children:[(0,l.jsx)("input",{type:"checkbox",checked:r.includes(e),onChange:()=>c(e),className:"w-4 h-4 rounded border-zinc-300 dark:border-zinc-600 text-blue-600 focus:ring-blue-500 focus:ring-offset-0"}),(0,l.jsxs)("span",{className:"text-sm text-zinc-700 dark:text-zinc-300",children:[a,t]})]},e)})}),(0,l.jsxs)("button",{onClick:()=>a({combinations:r}),disabled:s||!d,className:"flex items-center gap-1.5 px-4 py-2 text-sm text-white bg-blue-600 hover:bg-blue-500 disabled:opacity-50 rounded-lg transition-colors",children:[(0,l.jsx)(u.Z,{className:"w-4 h-4"}),s?"ì ì¥ ì¤...":"ì ì¥"]})]})})})}function I(e){let{templates:t,isLoading:a,templateName:s,setTemplateName:r,isUploading:i,onUpload:d,onSelect:o,onDelete:x}=e,u=(0,n.useRef)(null);return(0,l.jsx)("div",{className:"h-full overflow-y-auto p-6",children:(0,l.jsxs)("div",{className:"max-w-2xl mx-auto space-y-6",children:[(0,l.jsxs)("div",{className:"p-6 rounded-xl border border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-900/50 space-y-4",children:[(0,l.jsx)("h2",{className:"text-base font-medium",children:"ì í
í릿 ì¶ê°"}),(0,l.jsx)("p",{className:"text-sm text-zinc-500 dark:text-zinc-400",children:"íêµìì ì¬ì©íë ê²°ìê³ PDF ììì ì
ë¡ëíì¸ì. ì
ë¡ë í íë를 ë°°ì¹í ì ììµëë¤."}),(0,l.jsxs)("div",{className:"flex gap-3",children:[(0,l.jsx)("input",{type:"text",placeholder:"í
í릿 ì´ë¦ (ì í)",value:s,onChange:e=>r(e.target.value),className:"flex-1 px-3 py-2 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-lg text-sm focus:outline-none focus:border-blue-500"}),(0,l.jsx)("input",{ref:u,type:"file",accept:".pdf",className:"hidden",onChange:e=>{var t;let a=null===(t=e.target.files)||void 0===t?void 0:t[0];a&&d(a),e.target.value=""}}),(0,l.jsxs)("button",{onClick:()=>{var e;return null===(e=u.current)||void 0===e?void 0:e.click()},disabled:i,className:"flex items-center gap-2 px-4 py-2 text-white bg-blue-600 hover:bg-blue-500 disabled:opacity-50 rounded-lg text-sm font-medium transition-colors",children:[(0,l.jsx)(h.Z,{className:"w-4 h-4"}),i?"ì
ë¡ë ì¤...":"PDF ì
ë¡ë"]})]})]}),(0,l.jsxs)("div",{className:"space-y-3",children:[(0,l.jsx)("h2",{className:"text-base font-medium",children:"ì ì¥ë í
í릿"}),a?(0,l.jsx)("div",{className:"text-sm text-zinc-500 py-8 text-center",children:"ë¶ë¬ì¤ë ì¤..."}):0===t.length?(0,l.jsx)("div",{className:"border border-zinc-200 dark:border-zinc-800 rounded-2xl bg-zinc-50/50 dark:bg-zinc-900/20 py-8 px-4",children:(0,l.jsx)(M.Z,{size:"sm",title:"ì ì¥ë í
íë¦¿ì´ ììµëë¤",description:"ì¶ê²° íµì§ìë íì¸ì PDF ììì ì
ë¡ëíì¬ í
í릿ì ë±ë¡í´ ë³´ì¸ì."})}):t.map(e=>{var t;return(0,l.jsxs)("div",{className:"flex items-center justify-between p-4 rounded-xl border border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-900/50 hover:border-zinc-300 dark:hover:border-zinc-700 transition-colors group",children:[(0,l.jsxs)("button",{onClick:()=>o(e),className:"flex items-center gap-3 flex-1 text-left",children:[(0,l.jsx)(c.Z,{className:"w-5 h-5 text-zinc-400"}),(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"text-sm font-medium",children:e.name}),(0,l.jsxs)("div",{className:"text-xs text-zinc-500",children:["íë ",(null===(t=e.fields)||void 0===t?void 0:t.length)||0,"ê° \xb7 ",new Date(e.updatedAt).toLocaleDateString("ko-KR")]})]})]}),(0,l.jsx)("button",{"aria-label":"í
í릿 ìì ",onClick:t=>{t.stopPropagation(),x(e.id)},className:"p-2 rounded-lg text-zinc-400 hover:text-red-500 dark:hover:text-red-400 hover:bg-zinc-100 dark:hover:bg-zinc-800 opacity-0 group-hover:opacity-100 transition",children:(0,l.jsx)(f.Z,{className:"w-4 h-4"})})]},e.id)})]})]})})}function X(e){let{pdfPageImages:t,pdfDimensions:a,currentPage:s,setCurrentPage:r,fields:i,currentPageFields:c,selectedFieldIndex:o,setSelectedFieldIndex:x,zoom:u,setZoom:m,canvasContainerRef:h,pdfWrapperRef:y,isDragging:z,onFieldMoveStart:w,onCanvasClick:N,onAddField:C,onRemoveField:S,onUpdateField:D,totalPages:F}=e,P=null!==o?i[o]:null,M=a[s];return(0,n.useEffect)(()=>{let e=e=>{if(null===o)return;let t=i[o];if(!t)return;let l=e.shiftKey?10:1,n=0,s=0;switch(e.key){case"ArrowUp":s=-l;break;case"ArrowDown":s=l;break;case"ArrowLeft":n=-l;break;case"ArrowRight":n=l;break;default:return}e.preventDefault();let r=t.x+n,c=t.y+s,d=a[t.page];D(o,{x:Math.max(0,Math.min(d?d.width:5e3,r)),y:Math.max(0,Math.min(d?d.height:5e3,c))})};return window.addEventListener("keydown",e),()=>{window.removeEventListener("keydown",e)}},[o,i,a,D]),(0,l.jsxs)("div",{className:"h-full flex",children:[(0,l.jsxs)("div",{className:"flex-1 flex flex-col overflow-hidden",children:[(0,l.jsxs)("div",{className:"shrink-0 flex items-center justify-between px-4 py-2 border-b border-zinc-200 dark:border-zinc-800 bg-zinc-50 dark:bg-zinc-900/50",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("button",{"aria-label":"ì´ì íì´ì§",onClick:()=>r(Math.max(0,s-1)),disabled:0===s,className:"p-1 rounded hover:bg-zinc-200 dark:hover:bg-zinc-800 disabled:opacity-30",children:(0,l.jsx)(b.Z,{className:"w-4 h-4"})}),(0,l.jsxs)("span",{className:"text-xs text-zinc-500 dark:text-zinc-400",children:[s+1," / ",F]}),(0,l.jsx)("button",{"aria-label":"ë¤ì íì´ì§",onClick:()=>r(Math.min(F-1,s+1)),disabled:s>=F-1,className:"p-1 rounded hover:bg-zinc-200 dark:hover:bg-zinc-800 disabled:opacity-30",children:(0,l.jsx)(p.Z,{className:"w-4 h-4"})})]}),(0,l.jsxs)("div",{className:"flex items-center gap-1",children:[(0,l.jsx)("button",{"aria-label":"ì¶ì",onClick:()=>m(Math.max(.5,u-.25)),className:"p-1 rounded hover:bg-zinc-200 dark:hover:bg-zinc-800",children:(0,l.jsx)(g,{className:"w-4 h-4"})}),(0,l.jsxs)("span",{className:"text-xs text-zinc-500 dark:text-zinc-400 w-12 text-center",children:[Math.round(100*u),"%"]}),(0,l.jsx)("button",{"aria-label":"íë",onClick:()=>m(Math.min(3,u+.25)),className:"p-1 rounded hover:bg-zinc-200 dark:hover:bg-zinc-800",children:(0,l.jsx)(v,{className:"w-4 h-4"})})]}),(0,l.jsxs)("button",{onClick:C,className:"flex items-center gap-1 px-2 py-1 text-xs text-white bg-blue-600 hover:bg-blue-500 rounded-md transition-colors",children:[(0,l.jsx)(k.Z,{className:"w-3 h-3"}),"íë ì¶ê°"]})]}),(0,l.jsx)("div",{ref:h,className:(0,j.cn)("flex-1 overflow-auto bg-[#fafaf9] dark:bg-zinc-950",z&&"select-none"),onClick:N,children:t[s]&&M&&(0,l.jsxs)("div",{ref:y,className:"relative inline-block m-4 shadow-lg",style:{width:M.width*u,height:M.height*u},children:[(0,l.jsx)("img",{src:t[s],alt:"Page ".concat(s+1),className:"w-full h-full pointer-events-none select-none",draggable:!1}),c.map(e=>{var t,a;let n=o===e._index,s=(t=e.fieldType,(null===(a=U.find(e=>e.value===t))||void 0===a?void 0:a.example)||t),r=e.fieldType.startsWith("check-"),i=r?1.3*e.fontSize:e.fontSize;return(0,l.jsx)("div",{className:(0,j.cn)("absolute cursor-move whitespace-nowrap select-none","text-blue-600 dar
1k:text-blue-400",n&&"z-10",r&&"font-bold"),style:{left:e.x*u,top:e.y*u+.18*i*u,fontSize:i*u,lineHeight:1,fontFamily:"'Noto Sans KR', sans-serif"},onMouseDown:t=>w(t,e._index),children:s},e._index)})]})})]}),(0,l.jsxs)("div",{className:"w-72 shrink-0 border-l border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-900/30 flex flex-col overflow-hidden",children:[(0,l.jsx)("div",{className:"p-4 border-b border-zinc-200 dark:border-zinc-800",children:(0,l.jsx)("h3",{className:"text-sm font-medium",children:"íë ìì±"})}),(0,l.jsx)("div",{className:"flex-1 overflow-y-auto p-4",children:P&&null!==o?(0,l.jsxs)("div",{className:"space-y-4",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"text-xs text-zinc-500 dark:text-zinc-400 mb-1 block",children:"íë ì í"}),(0,l.jsx)("select",{value:P.fieldType,onChange:e=>{let t=U.find(t=>t.value===e.target.value);D(o,{fieldType:e.target.value,label:(null==t?void 0:t.label)||e.target.value})},className:"w-full px-2 py-1.5 bg-zinc-50 dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-md text-sm focus:outline-none focus:border-blue-500",children:U.map(e=>(0,l.jsx)("option",{value:e.value,children:e.label},e.value))})]}),(0,l.jsxs)("div",{children:[(0,l.jsxs)("div",{className:"flex items-center justify-between mb-1",children:[(0,l.jsx)("label",{className:"text-xs text-zinc-500 dark:text-zinc-400",children:"ê¸ê¼´ í¬ê¸°"}),(0,l.jsxs)("span",{className:"text-xs text-zinc-700 dark:text-zinc-300",children:[P.fontSize,"pt"]})]}),(0,l.jsx)("input",{type:"range",value:P.fontSize,onChange:e=>D(o,{fontSize:Number(e.target.value)}),className:"w-full accent-blue-500",min:6,max:48,step:1})]}),(0,l.jsx)("p",{className:"text-[11px] text-zinc-400 dark:text-zinc-500 leading-relaxed",children:"PDF ììì íë를 ëëê·¸íì¬ ì´ëíê³ , ì íë íëì íë í¸ë¤ì ëëê·¸íì¬ í¬ê¸°ë¥¼ ì¡°ì íì¸ì."}),(0,l.jsxs)("button",{onClick:S,className:"w-full flex items-center justify-center gap-1.5 px-3 py-2 text-sm text-red-500 dark:text-red-400 border border-red-200 dark:border-red-500/30 hover:bg-red-50 dark:hover:bg-red-500/10 rounded-lg transition-colors",children:[(0,l.jsx)(f.Z,{className:"w-4 h-4"}),"íë ìì "]})]}):(0,l.jsxs)("div",{className:"text-sm text-zinc-400 dark:text-zinc-500 text-center py-8",children:["PDF ìì íë를 í´ë¦íì¬ ì ííê±°ë",(0,l.jsx)("br",{}),"ìë¨ì âíë ì¶ê°â ë²í¼ì¼ë¡",(0,l.jsx)("br",{}),"ì íë를 ì¶ê°íì¸ì."]})}),(0,l.jsxs)("div",{className:"border-t border-zinc-200 dark:border-zinc-800 p-4 max-h-60 overflow-y-auto",children:[(0,l.jsxs)("h4",{className:"text-xs text-zinc-500 dark:text-zinc-400 mb-2",children:["ì ì²´ íë (",i.length,")"]}),(0,l.jsx)("div",{className:"space-y-1",children:i.map((e,t)=>(0,l.jsxs)("button",{onClick:()=>{x(t),r(e.page)},className:(0,j.cn)("w-full flex items-center gap-2 px-2 py-1.5 text-xs rounded-md transition-colors text-left",o===t?"bg-blue-50 dark:bg-blue-600/20 text-blue-600 dark:text-blue-300":"hover:bg-zinc-100 dark:hover:bg-zinc-800 text-zinc-600 dark:text-zinc-300"),children:[(0,l.jsx)(d.Z,{className:"w-3 h-3 text-zinc-300 dark:text-zinc-500 shrink-0"}),(0,l.jsx)("span",{className:"truncate flex-1",children:e.label}),(0,l.jsxs)("span",{className:"text-zinc-400 dark:text-zinc-500 shrink-0",children:["P",e.page+1]})]},t))})]})]})]})}},30226:function(e,t,a){a.d(t,{c:function(){return l}});async function l(e){try{let l=new FormData;l.append("file",e);let n=await fetch("/api/upload/direct",{method:"POST",body:l});if(!n.ok){var t,a;let e=await n.json();return{success:!1,error:e.error||"Upload failed",statusCode:n.status,quotaInfo:413===n.status?{currentUsage:null!==(t=e.currentUsage)&&void 0!==t?t:0,limit:null!==(a=e.limit)&&void 0!==a?a:5242880,message:e.error||"ì ì¥ ì©ëì´ ë¶ì¡±í©ëë¤."}:void 0}}let s=await n.json();return{success:!0,file:{key:s.key,name:e.name,size:e.size,type:e.type}}}catch(e){return console.error("Upload failed:",e),{success:!1,error:e instanceof Error?e.message:"Upload failed"}}}}}]);
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.