1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5101],{19431:function(e,r,t){t.d(r,{F:function(){return u},v:function(){return f}});var n=t(27526),o=t(2265),i=t(54696);function a(e){return e.online&&!e.threw&&e.httpOk?e.hasUser?"authenticated":"logged-out":"unreachable"}async function l(){if(!("undefined"==typeof navigator||navigator.onLine))return"unreachable";let e=new AbortController,r=setTimeout(()=>e.abort(),8e3);try{let r=await fetch("/api/auth/session",{method:"GET",credentials:"include",cache:"no-store",headers:{"Content-Type":"application/json"},signal:e.signal});if(!r.ok)return a({online:!0,threw:!1,httpOk:!1,hasUser:!1});let t=await r.json(),n=!!(t&&"object"==typeof t&&t.user);return a({online:!0,threw:!1,httpOk:!0,hasUser:n})}catch(e){return a({online:!0,threw:!0,httpOk:!1,hasUser:!1})}finally{clearTimeout(r)}}async function s(){let e=await l();return"logged-out"!==e?e:(await new Promise(e=>setTimeout(e,800)),l())}let c="naemo:session-expired",d=!1;function u(){let{status:e,update:r}=(0,n.kP)(),t=(0,o.useRef)(!1);return"authenticated"===e&&(0,i.aM)(),(0,o.useEffect)(()=>{if(!(0,i.YY)())return;let n=!1,o=async()=>{if(!t.current&&!d&&("authenticated"!==e||"visible"===document.visibilityState)){t.current=!0;try{let t=await s();if(n||d)return;if("logged-out"===t){d||(d=!0,window.location.replace("/"));return}"authenticated"===t&&"unauthenticated"===e&&await r()}finally{t.current=!1}}};"unauthenticated"===e&&o();let a=()=>{"visible"===document.visibilityState&&o()},l=()=>{o()};return document.addEventListener("visibilitychange",a),window.addEventListener(c,l),window.addEventListener("online",l),()=>{n=!0,document.removeEventListener("visibilitychange",a),window.removeEventListener(c,l),window.removeEventListener("online",l)}},[e,r]),null}function f(){window.dispatchEvent(new Event(c))}},45007:function(e,r,t){t.d(r,{w:function(){return a}});var n=t(57437),o=t(2265),i=t(93448);function a(e){let{src:r,size:t=20,className:a,trigger:l="hover",target:s="button",colors:c,originalColors:d=!1,playOnMount:u=!1}=e,f=(0,o.useRef)(null),v=(0,i.cn)(!d&&"current-color",a);return(0,o.useEffect)(()=>{f.current&&f.current.className!==v&&(f.current.className=v)},[v]),(0,o.useEffect)(()=>{var e,r;if(!u)return;let t=!1,n=null,o=()=>{if(t)return;let e=f.current;if(!e)return;let r=()=>{t||(n=setTimeout(()=>{if(!t)try{var r,n;(null===(r=e.playerInstance)||void 0===r?void 0:r.playFromStart)?e.playerInstance.playFromStart():(null===(n=e.triggerInstance)||void 0===n?void 0:n.play)&&e.triggerInstance.play()}catch(e){}},120))};e.ready?r():e.readyPromise?e.readyPromise.then(r).catch(()=>{}):e.addEventListener("ready",r,{once:!0})};return(null===(e=window.customElements)||void 0===e?void 0:e.get("lord-icon"))?o():(null===(r=window.customElements)||void 0===r?void 0:r.whenDefined)?window.customElements.whenDefined("lord-icon").then(()=>{t||o()}).catch(()=>{}):o(),()=>{t=!0,n&&clearTimeout(n)}},[u,r]),(0,n.jsx)("lord-icon",{ref:f,src:r,trigger:l,target:s,colors:c,style:{width:t,height:t}})}},86315:function(e,r,t){t.d(r,{cf:function(){return T},zN:function(){return P},g5:function(){return j},U8:function(){return C},No:function(){return N},m3:function(){return S},Kg:function(){return L},sV:function(){return E},Nv:function(){return Z}});var n=t(57437),o=t(2265),i=t(99637),a=t(43044),l=t(88501),s=t(92369),c=t(71769),d=t(54882),u=t(95805),f=t(69317),v=t(62720),m=t(17722),h=t(17625),g=t(25466),p=t(48013),w=t(83008);let y=["recordToolsOrder","classToolsOrder","topLevelOrder"];var b=t(27526),O=t(67920);let T=[{id:"dashboard",icon:i.Z,label:"ëìë³´ë"},{id:"survey",icon:a.Z,label:"ì¤ë¬¸ ì¡°ì¬"},{id:"work-notes",icon:p.k7,label:"ì
무 ë
¸í¸"},{id:"work-schedule",icon:l.Z,label:"ì¼ì ê´ë¦¬"},{id:"student-management",icon:s.Z,label:"íì ê´ë¦¬"},{id:"evaluation-record",icon:c.Z,label:"ìí\xb7ì¸í¹"},{id:"behavior-record",icon:d.Z,label:"íëí¹ì±"},{id:"attendance",icon:u.Z,label:"ì¶ê²° ê´ë¦¬"},{id:"activity",icon:f.Z,label:"ìì¨\xb7ì§ë¡"},{id:"seating",icon:p._,label:"ì리 ë°°ì¹"},{id:"nametag",icon:v.Z,label:"ì´ë¦í"},{id:"cleaning",icon:p.eJ,label:"ì²ì 구ì"},{id:"random-picker",icon:m.Z,label:"ëë¤ ë½ê¸°"},{id:"attendance-print",icon:h.Z,label:"ì¶ê²° ì¶ë ¥"}],S=e=>{let r=T.find(r=>r.id===e);return(null==r?void 0:r.icon)||g.Z},k={dashboard:"/lordicons/dashboard.json","student-management":"/lordicons/student-management.json","work-schedule":"/lordicons/work-schedule.json",attendance:"/lordicons/attendance.json","work-notes":"/lordicons/work-notes.json",survey:"/lordicons/survey.json","evaluation-record":"/lordicons/evaluation-record.json",activity:"/lordicons/activity.json","behavior-record":"/lordicons/behavior-record.json",seating:"/lordicons/seating.json",cleaning:"/lordicons/cleaning.json","random-picker":"/lordicons/random-picker.json","attendance-print":"/lordicons/attendance-print.json",nametag:"/lordicons/nametag.json"},E=e=>k[e];function L(e){if("hub"===e)return"";let r=T.find(r=>r.id===e);return(null==r?void 0:r.label)||e}let j={topLevelOrder:["dashboard","student-management","work-schedule","attendance","work-notes","survey"],recordToolsOrder:["evaluation-record","activity","behavior-record"],classToolsOrder:["seating","cleaning","random-picker","attendance-print","nametag"],mobileHomeSlogan:"ëë§ì ë§ì¶¤ êµë¬´ì첩",mobileHomeTitle:"{name}ì ë´ëª¨"},C="íê°\xb7기ë¡",P="íê¸ ë구",x=(0,o.createContext)(void 0),I="sidebar-config";function N(e){let{children:r}=e,[t,i]=(0,o.useState)(j),[a,l]=(0,o.useState)(!1),{data:s}=(0,b.kP)(),c=(0,O.XC)();(0,o.useEffect)(()=>{(async()=>
1{if(!(null==s?void 0:s.user))return;let e=null,r=await (0,w.X)("getSidebarConfig",{},c);if(r.success&&r.data)e=r.data;else try{let r=localStorage.getItem(I);r&&(e=JSON.parse(r))}catch(e){console.error("Failed to load sidebar config from localStorage:",e)}if(e){let r=new Set(T.map(e=>e.id)),t=e=>Array.isArray(e)?e.filter(e=>"string"==typeof e&&r.has(e)&&"settings"!==e):[],n=!Array.isArray(e.recordToolsOrder);e.topLevelOrder=t(e.topLevelOrder),e.recordToolsOrder=t(e.recordToolsOrder),e.classToolsOrder=t(e.classToolsOrder);let o=JSON.stringify(e),a=JSON.stringify(e=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return e;let r=new Set,t={};for(let n of y){let o=e[n];Array.isArray(o)&&(t[n]=o.filter(e=>!("string"!=typeof e||r.has(e))&&(r.add(e),!0)))}return{...e,...t}}(e))!==o;if(n){let r=new Set(j.recordToolsOrder);e.recordToolsOrder=[...j.recordToolsOrder],e.topLevelOrder=e.topLevelOrder.filter(e=>!r.has(e)),e.classToolsOrder=e.classToolsOrder.filter(e=>!r.has(e))}let l=new Set([...e.topLevelOrder,...e.recordToolsOrder,...e.classToolsOrder]),s=T.map(e=>e.id).filter(e=>!l.has(e));if(s.length>0){let r=new Set(j.recordToolsOrder);e.recordToolsOrder=[...e.recordToolsOrder,...s.filter(e=>r.has(e))],e.topLevelOrder=[...e.topLevelOrder,...s.filter(e=>!r.has(e))]}(s.length>0||n||a)&&await (0,w.X)("saveSidebarConfig",{config:e},c),i(e)}else i(j);l(!0)})()},[c,s]),(0,o.useEffect)(()=>{a&&localStorage.setItem(I,JSON.stringify(t))},[t,a]);let d=async e=>{let r=e||t;try{if((await (0,w.X)("saveSidebarConfig",{config:r},c)).success)return e&&i(e),!0;return!1}catch(e){return console.error("Failed to save sidebar config to DB:",e),!1}},u=(e,r)=>{i(t=>{let n={...t,topLevelOrder:t.topLevelOrder.filter(r=>r!==e),recordToolsOrder:t.recordToolsOrder.filter(r=>r!==e),classToolsOrder:t.classToolsOrder.filter(r=>r!==e)};return n[r]=[...n[r],e],n})};return(0,n.jsx)(x.Provider,{value:{config:t,setConfig:e=>{i(e)},handleSave:d,resetToDefault:()=>{i(j)},moveToTopLevel:e=>u(e,"topLevelOrder"),moveToRecordTools:e=>u(e,"recordToolsOrder"),moveToClassTools:e=>u(e,"classToolsOrder"),reorderTopLevel:(e,r)=>{i(t=>{let n=[...t.topLevelOrder],[o]=n.splice(e,1);return n.splice(r,0,o),{...t,topLevelOrder:n}})},reorderRecordTools:(e,r)=>{i(t=>{let n=[...t.recordToolsOrder],[o]=n.splice(e,1);return n.splice(r,0,o),{...t,recordToolsOrder:n}})},reorderClassTools:(e,r)=>{i(t=>{let n=[...t.classToolsOrder],[o]=n.splice(e,1);return n.splice(r,0,o),{...t,classToolsOrder:n}})}},children:r})}function Z(){let e=(0,o.useContext)(x);if(void 0===e)throw Error("useSidebarConfig must be used within a SidebarConfigProvider");return e}},67920:function(e,r,t){t.d(r,{EI:function(){return s},Qy:function(){return d},XC:function(){return c}});var n=t(57437),o=t(2265),i=t(27526);let a={user:{id:"",name:"Guest",role:"user"}},l=(0,o.createContext)(a);function s(e){var r,t;let{children:s}=e,{data:c}=(0,i.kP)(),d=null==c?void 0:null===(r=c.user)||void 0===r?void 0:r.id,u=null==c?void 0:null===(t=c.user)||void 0===t?void 0:t.name,f=(0,o.useRef)(null),v=(0,o.useMemo)(()=>{var e,r;if(d){let e={user:{id:d,name:u||"User",role:"admin"}};return f.current=e,e}return(null===(r=f.current)||void 0===r?void 0:null===(e=r.user)||void 0===e?void 0:e.id)?f.current:a},[d,u]);return(0,n.jsx)(l.Provider,{value:v,children:s})}function c(){return(0,o.useContext)(l)}let d=a},83008:function(e,r,t){t.d(r,{X:function(){return i}});var n=t(42349),o=t(19431);async function i(e,r,t,i){var a;let l,s=0,c=null!==(a=null==i?void 0:i.maxRetries)&&void 0!==a?a:1;for(;s<=c;){if((l=await (0,n.X)(e,r,t,i))&&!l.success&&"Session Expired"===l.message&&s<c){console.warn("[ClientRunner] Action '".concat(e,"' returned Session Expired. Retrying in 500ms from client...")),await new Promise(e=>setTimeout(e,500)),s++;continue}break}return l&&!l.success&&"Session Expired"===l.message&&(0,o.v)(),l}},54696:function(e,r,t){t.d(r,{Dv:function(){return f},YY:function(){return s},aM:function(){return l}});var n=t(2265),o=t(27526),i=t(9244);let a=!1;function l(){a=!0}function s(){return a}function c(){return()=>{}}function d(){if("1"!==new URLSearchParams(window.location.search).get("guest"))return!1;try{return!(0,i.I)()}catch(e){return!1}}function u(){return!1}function f(){let{status:e}
1=(0,o.kP)(),r=(0,n.useSyncExternalStore)(c,d,u);return"authenticated"===e&&(a=!0),"unauthenticated"===e&&!a&&r}},9244:function(e,r,t){t.d(r,{I:function(){return l},c:function(){return o}});var n=t(56689);function o(){return n.dV.isNativePlatform()}let i="naemo:nativeShell",a="naemo:twaShell";function l(){if(n.dV.isNativePlatform()){try{localStorage.setItem(i,"1")}catch(e){}return!0}if(function(){if("undefined"==typeof document)return!1;try{if("1"===sessionStorage.getItem(a))return!0}catch(e){}if(!document.referrer.startsWith("android-app://com.naemo.app"))return!1;try{sessionStorage.setItem(a,"1")}catch(e){}return!0}())return!0;try{return"1"===localStorage.getItem(i)}catch(e){return!1}}},42349:function(e,r,t){t.d(r,{X:function(){return n}}),t(83079);var n=(0,t(12119).$)("bcd9158bdfa85d20ae27f088b056f522da591ee8")}}]);
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.