@ihabdevteam/core 0.69.0 → 0.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.cjs.js +150 -145
- package/dist/hooks.cjs.js +1 -1
- package/dist/i18n.cjs.js +2 -2
- package/dist/ihabdevteam-core.cjs.js +149 -144
- package/dist/ihabdevteam-core.d.ts +1 -1
- package/dist/packages/core/src/components/Table.js +29 -12
- package/dist/packages/core/src/i18n/locales/en.json +1 -0
- package/dist/packages/core/src/i18n/locales/ko.json +1 -0
- package/dist/packages/core/src/utils/lucideIconSet.js +2 -0
- package/dist/packages/core/src/version.d.ts +1 -1
- package/dist/packages/core/src/version.js +1 -1
- package/dist/utils.cjs.js +1 -1
- package/package.json +1 -1
package/dist/hooks.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var a=require("react"),Ee=require("react-i18next"),ru=typeof document<"u"?document.currentScript:null;function Mt({storageKey:e="fontScale",baseFont:u=20,minScale:t=.8,maxScale:n=1.4,step:o=.1,lineHeightRatio:l=1.4}={}){const r=p=>Math.max(t,Math.min(n,Number(p))),[s,c]=a.useState(()=>{try{const p=localStorage.getItem(e),h=p?Number(p):1;return Number.isFinite(h)?h:1}catch{return 1}});a.useEffect(()=>{try{localStorage.setItem(e,String(s))}catch{}},[e,s]);const C=p=>{c(typeof p=="function"?h=>r(p(h)):r(p))},d=()=>C(p=>+(p+o).toFixed(6)),f=()=>C(p=>+(p-o).toFixed(6)),i=s<n-Number.EPSILON,g=s>t+Number.EPSILON,E=Math.round(u*s),w=Math.round(E*l);return{scale:s,setScale:C,increase:d,decrease:f,canIncrease:i,canDecrease:g,fontSize:E,lineHeight:w}}const ju=a.createContext(null);function xt(e){return/max-width:\s*7[0-9][0-9]px/.test(e)}function Pt(e){const u=a.useContext(ju),t=l=>typeof window>"u"||!window.matchMedia?!1:window.matchMedia(l).matches,[n,o]=a.useState(t(e));return a.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;const l=window.matchMedia(e),r=c=>o(c.matches),s=l;return s.addEventListener?s.addEventListener("change",r):s.addListener&&s.addListener(r),o(l.matches),()=>{s.removeEventListener?s.removeEventListener("change",r):s.removeListener&&s.removeListener(r)}},[e]),u&&typeof u.mobile=="boolean"&&xt(e)?u.mobile:n}function Iu(e){const u=a.useRef(e);return a.useEffect(()=>{u.current=e}),u}function Lu(e,u){const t=Iu(u);a.useEffect(()=>{const n=()=>t.current();try{window.addEventListener(e,n)}catch{}return()=>{try{window.removeEventListener(e,n)}catch{}}},[e,t])}const su=" \xB7 ",Ru=(()=>{if(typeof document>"u")return"";const e=document.title;return e.includes(su)?e.split(su).pop()??e:e})(),Mu=a.createContext(!1);function Ft(e){const u=a.useContext(Mu);a.useEffect(()=>{if(u||typeof e!="string"||!e)return;const t=document.title;return document.title=Ru?`${e}${su}${Ru}`:e,()=>{document.title=t}},[e,u])}function kt(){const{t:e}=Ee.useTranslation();return a.useCallback(u=>{if(!u)return"";const t=new Date(u).getTime();if(Number.isNaN(t))return"";const n=Math.floor((Date.now()-t)/864e5);return n<=0?e("myHomework.relativeDay.today","\uC624\uB298"):n===1?e("myHomework.relativeDay.yesterday","\uC5B4\uC81C"):e("myHomework.relativeDay.daysAgo",{n})},[e])}function vt(e){const[u,t]=a.useState({current:"",next:"",confirm:""}),[n,o]=a.useState(null),[l,r]=a.useState(!1),s=a.useRef(null);a.useEffect(()=>()=>{s.current!==null&&clearTimeout(s.current)},[]);const c=a.useCallback(()=>{t({current:"",next:"",confirm:""}),o(null)},[]),C=a.useCallback(async()=>{if(!u.current){o({type:"error",text:"\uD604\uC7AC \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694."});return}if(!u.next){o({type:"error",text:"\uC0C8 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694."});return}if(u.next!==u.confirm){o({type:"error",text:"\uC0C8 \uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."});return}r(!0);const d=e?await e(u.current,u.next):null;if(r(!1),d){o({type:"error",text:d});return}o({type:"success",text:"\uBE44\uBC00\uBC88\uD638\uAC00 \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}),t({current:"",next:"",confirm:""}),s.current!==null&&clearTimeout(s.current),s.current=setTimeout(()=>o(null),1500)},[u,e]);return{pw:u,setPw:t,pwMsg:n,setPwMsg:o,pwLoading:l,handleChangePw:C,reset:c}}const q=["\u3131","\u3132","\u3134","\u3137","\u3138","\u3139","\u3141","\u3142","\u3143","\u3145","\u3146","\u3147","\u3148","\u3149","\u314A","\u314B","\u314C","\u314D","\u314E"],se=["\u314F","\u3150","\u3151","\u3152","\u3153","\u3154","\u3155","\u3156","\u3157","\u3158","\u3159","\u315A","\u315B","\u315C","\u315D","\u315E","\u315F","\u3160","\u3161","\u3162","\u3163"],Q=["","\u3131","\u3132","\u3133","\u3134","\u3135","\u3136","\u3137","\u3139","\u313A","\u313B","\u313C","\u313D","\u313E","\u313F","\u3140","\u3141","\u3142","\u3144","\u3145","\u3146","\u3147","\u3148","\u314A","\u314B","\u314C","\u314D","\u314E"];function V(e){if(!e)return null;const u=e.charCodeAt(0)-44032;return u<0||u>=11172?null:{cho:Math.floor(u/588),jung:Math.floor(u%588/28),jong:u%28}}function Vt(){const e=new Map;return u=>{let t=e.get(u);return t||(t=[...u].map(n=>V(n)),e.set(u,t)),t}}function de(e,u,t=0){return String.fromCharCode(44032+(e*21+u)*28+t)}function Gt(e,u){if(!e||!u||e===u||e.length!==u.length)return"random";let t=0,n=null;for(let o=0;o<e.length;o++){const l=V(e[o]),r=V(u[o]);if(!l||!r)return"random";if(l.cho===r.cho&&l.jung===r.jung&&l.jong===r.jong)continue;t++;const s=l.cho!==r.cho,c=l.jung!==r.jung,C=l.jong!==r.jong;(s?1:0)+(c?1:0)+(C?1:0)>1?n="multi":s?n="cho":c?n="jung":n="jong"}return t!==1?"random":n==="cho"?"cho":n==="jung"?"jung":n==="jong"?"jong":"random"}const we={3:["\u3131","\u3145"],5:["\u3134","\u3148"],6:["\u3134","\u314E"],9:["\u3139","\u3131"],10:["\u3139","\u3141"],11:["\u3139","\u3142"],12:["\u3139","\u3145"],13:["\u3139","\u314C"],14:["\u3139","\u314D"],15:["\u3139","\u314E"],18:["\u3142","\u3145"]};Object.fromEntries(Object.entries(we).map(([e,u])=>[u.join(""),Q[Number(e)]]));function Yt(e,u){if(!e||!u)return!1;for(const t of e){const n=V(t);if(n){if(q[n.cho]===u)return!0;if(n.jong>0){if(Q[n.jong]===u)return!0;const o=we[n.jong];if(o&&o.includes(u))return!0}}}return!1}function Ge(e){if(!e)return 0;let u=0;for(const t of e)V(t)&&u++;return u}function $t(e){if(!e)return!1;let u=!1;for(const t of e){const n=V(t);if(n&&(u=!0,n.jong>0))return!1}return u}function Ht(e,u){if(e.jong<=0)return!1;if(u.includes(Q[e.jong]))return!0;const t=we[e.jong];return!!t&&t.some(n=>u.includes(n))}function Ut(e,u,t){if(!e)return!1;const n=[...e],o=l=>{const r=V(n[l]);if(!r||u.cho&&!u.cho.includes(q[r.cho])||u.jung&&!u.jung.includes(se[r.jung]))return!1;if(u.jongNone){if(r.jong>0)return!1}else if(u.jong&&!Ht(r,u.jong))return!1;return!0};if(t==="head")return o(0);if(t==="tail")return o(n.length-1);if(t==="mid"){for(let l=1;l<n.length-1;l++)if(o(l))return!0;return!1}for(let l=0;l<n.length;l++)if(o(l))return!0;return!1}const Kt={cho:q.length,jung:se.length,jong:Q.length};function Wt(e,u,t,n,o=1/0){if(!e||t<1)return[];const l=[...e].map(f=>V(f));if(l.some(f=>!f))return[];const r=l,s=r.length;if(t>s)return[];const c=Kt[u],C=new Set,d=[];(function f(i,g){if(g.length===t){d.push([...g]);return}for(let E=i;E<s;E++)g.push(E),f(E+1,g),g.pop()})(0,[]);for(const f of d)if((function i(g,E){if(C.size>=o)return;if(g===f.length){const h=E.map(S=>de(S.cho,S.jung,S.jong)).join("");h!==e&&n.has(h)&&C.add(h);return}const w=f[g],p=r[w][u];for(let h=0;h<c;h++){if(h===p)continue;const S=E.slice();if(S[w]={...E[w],[u]:h},i(g+1,S),C.size>=o)return}})(0,r),C.size>=o)break;return[...C]}function qt(e,u){if(!e||!u||e.length!==u.length)return-1;let t=0;for(let n=0;n<e.length;n++){const o=V(e[n]),l=V(u[n]);if(!o||!l)return-1;o.cho!==l.cho&&t++,o.jung!==l.jung&&t++,o.jong!==l.jong&&t++}return t}const xu="word_pair_index_v2",Pu="word_pair_index_sig_v2";let be=null;function zt(){try{if(typeof localStorage>"u")return null;const e=localStorage.getItem(xu),u=localStorage.getItem(Pu);return!e||!u?null:{index:JSON.parse(e),sig:u}}catch{return null}}function Ae(){if(be)return be;const e=zt();return e?(be=e.index,e.sig,be):null}function Jt(){be=null;try{typeof localStorage<"u"&&(localStorage.removeItem(xu),localStorage.removeItem(Pu))}catch{}}const Fu="word_image_existence_map_v1";let pe=null;function ku(){if(pe)return pe;try{const e=typeof localStorage<"u"?localStorage.getItem(Fu):null;pe=e?JSON.parse(e):{}}catch{pe={}}return pe}function Zt(e,u){return`${e}_${u??1}`}function Qt(e,u){const t=ku(),n=Zt(e,u);return n in t?t[n]:void 0}function vu(){const e=ku(),u=Object.values(e);return u.length===0?null:{total:u.length,exists:u.filter(Boolean).length}}function Xt(){pe={};try{typeof localStorage<"u"&&localStorage.removeItem(Fu)}catch{}}const Vu=[{id:"wordData",labelKey:"settings.cache.group.wordData.label",subKey:"settings.cache.group.wordData.sub",keys:["word_data_cache","word_data_version"]},{id:"pairIndex",labelKey:"settings.cache.group.pairIndex.label",subKey:"settings.cache.group.pairIndex.sub",keys:["word_pair_index_v2","word_pair_index_sig_v2"]},{id:"imageCache",labelKey:"settings.cache.group.imageCache.label",subKey:"settings.cache.group.imageCache.sub",keys:["word_image_existence_map_v1"]}];function Gu(e){return e.reduce((u,t)=>{try{const n=localStorage.getItem(t);return u+(n?new Blob([n]).size:0)}catch{return u}},0)}function en(e){return e===0?"0 B":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(2)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function un(e){const{t:u}=Ee.useTranslation(),[t,n]=a.useState({}),[o,l]=a.useState(null),[r,s]=a.useState(null),[c,C]=a.useState(null),d=a.useCallback(()=>{const i={};Vu.forEach(g=>{i[g.id]=Gu([...g.keys])}),n(i),typeof navigator<"u"&&navigator.storage?.estimate&&navigator.storage.estimate().then(g=>{C({usage:g.usage??0,quota:g.quota??0})}).catch(()=>{})},[]);a.useEffect(()=>{d()},[d]);const f=a.useCallback(async i=>{l(i);try{i==="wordData"?(localStorage.removeItem("word_data_cache"),localStorage.removeItem("word_data_version")):i==="pairIndex"?Jt():i==="imageCache"&&Xt(),d(),e?.(u("settings.cache.cleared","\uCE90\uC2DC\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4."))}finally{l(null)}},[d,e,u]);return{cacheSizes:t,clearingId:o,confirmCacheId:r,setConfirmCacheId:s,storageEstimate:c,refreshCacheSizes:d,handleClearCache:f}}function tn(e){const[u,t]=a.useState(null),[n,o]=a.useState(null),l=a.useCallback(()=>{const r=Ae();if(r){const c=Object.values(r),C=c.filter(d=>d.cho.length+d.jung.length+d.jong.length>0).length;t({matched:C,total:c.length})}else t(null);const s=vu();o(s?{exists:s.exists,total:s.total}:null)},[]);return a.useEffect(()=>{l();const r=setTimeout(l,1e3);return()=>clearTimeout(r)},[e?.length,l]),{pairStats:u,imgStats:n,setPairStats:t,setImgStats:o,refreshStats:l}}function Yu(e,u=[]){const[t,n]=a.useState(u),[o,l]=a.useState(null),[r,s]=a.useState(!1),[c,C]=a.useState(e),d=a.useRef(r);a.useEffect(()=>{d.current=r});const f=a.useRef(null);a.useEffect(()=>{if(d.current)return;const h=f.current;h!==null&&h.length===u.length&&h.every((S,B)=>S===u[B])||(f.current=u,n(u))},[u]);const i=a.useCallback(h=>{l(h),s(!1),C({...h})},[]),g=a.useCallback(()=>s(!0),[]),E=a.useCallback(()=>s(!1),[]),w=a.useCallback((h,S)=>{n(h),l(S),s(!1)},[]),p=a.useCallback(h=>{n(S=>S.filter(B=>B!==h)),l(null)},[]);return{list:t,setList:n,selected:o,setSelected:l,isEditing:r,setIsEditing:s,editForm:c,setEditForm:C,openDetail:i,startEditing:g,cancelEditing:E,commitEdit:w,remove:p}}const De=()=>{const e=new Date;return{year:String(e.getFullYear()),month:String(e.getMonth()+1).padStart(2,"0"),day:String(e.getDate()).padStart(2,"0")}},nn={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function on(e=[]){const{list:u,setList:t,selected:n,setSelected:o,isEditing:l,setIsEditing:r,editForm:s,setEditForm:c,openDetail:C,commitEdit:d}=Yu(nn,e),{year:f,month:i,day:g}=De(),[E,w]=a.useState({year:f,month:i,day:g,hour:"09",minute:"00",memo:""});return{visitHistory:u,visitForm:E,setVisitForm:w,setVisit:p=>h=>w(S=>({...S,[p]:h})),selectedVisit:n,setSelectedVisit:o,isEditingVisit:l,setIsEditingVisit:r,editVisitForm:s,setEditVisitForm:c,openVisitDetail:C,handleVisitSave:p=>{t(A=>[E,...A]);const{year:h,month:S,day:B}=De();w({year:h,month:S,day:B,hour:"09",minute:"00",memo:""}),p?.()},handleVisitEditSave:()=>{d(p=>p.map(h=>h===n?s:h),s)},addVisit:p=>{t(h=>[p,...h])},removeVisit:p=>{t(h=>h.filter(S=>S!==p))},revertVisitEdit:(p,h)=>{t(S=>S.map(B=>B===h?p:B)),o(S=>S===h?p:S)}}}const $u=e=>`${e.year.padStart(4,"0")}-${e.month.padStart(2,"0")}-${e.day.padStart(2,"0")} ${e.hour.padStart(2,"0")}:${e.minute.padStart(2,"0")}`,Ye=e=>[...e].sort((u,t)=>{const n=$u(u),o=$u(t);return n<o?-1:n>o?1:0}),ln={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function rn(e,u=[]){const t=a.useMemo(()=>Ye(u),[u]),{list:n,setList:o,selected:l,setSelected:r,isEditing:s,setIsEditing:c,editForm:C,setEditForm:d,openDetail:f,commitEdit:i,remove:g}=Yu(ln,t),[E,w]=a.useState([]),{year:p,month:h,day:S}=De(),[B,A]=a.useState({year:p,month:h,day:S,hour:"09",minute:"00",memo:""}),_=T=>P=>A($=>({...$,[T]:P})),b=T=>{o(le=>Ye([...le,B]));const{year:P,month:$,day:X}=De();A({year:P,month:$,day:X,hour:"09",minute:"00",memo:""}),T?.()},I=()=>{i(T=>Ye(T.map(P=>P===l?C:P)),C)},R=a.useCallback(T=>{g(T)},[g]),v=a.useCallback(T=>{e({year:T.year,month:T.month,day:T.day,hour:T.hour,minute:T.minute,memo:T.memo}),g(T)},[e,g]),j=a.useCallback(T=>{o(P=>P.filter($=>$!==T)),w(P=>[T,...P]),r(null)},[o,r]),G=a.useCallback(T=>{o(P=>Ye([...P,T]))},[o]),x=a.useCallback(T=>{o(P=>P.filter($=>$!==T))},[o]),k=a.useCallback((T,P)=>{o($=>$.map(X=>X===P?T:X)),r($=>$===P?T:$)},[o,r]);return{scheduleList:n,noShowList:E,addSchedule:G,removeSchedule:x,revertScheduleEdit:k,scheduleForm:B,setScheduleForm:A,setSchedule:_,selectedSchedule:l,setSelectedSchedule:r,isEditingSchedule:s,setIsEditingSchedule:c,editScheduleForm:C,setEditScheduleForm:d,openScheduleDetail:f,handleScheduleSave:b,handleScheduleEditSave:I,handleScheduleDelete:R,handleScheduleToVisit:v,handleScheduleNoVisit:j}}const Hu=[{value:"10",label:"10\uAC1C\uC529 \uBCF4\uAE30"},{value:"25",label:"25\uAC1C\uC529 \uBCF4\uAE30"},{value:"50",label:"50\uAC1C\uC529 \uBCF4\uAE30"},{value:"100",label:"100\uAC1C\uC529 \uBCF4\uAE30"}];function sn(e){const[u,t]=a.useState(""),[n,o]=a.useState("25"),[l,r]=a.useState("all"),[s,c]=a.useState(1),C=a.useMemo(()=>e.filter(({item:g,status:E})=>!(u&&!g.memo.includes(u)||l!=="all"&&E!==l)),[e,u,l]),d=Math.max(1,Math.ceil(C.length/Number(n))),f=Math.min(s,d),i=a.useMemo(()=>C.slice((f-1)*Number(n),f*Number(n)),[C,f,n]);return{vapSearch:u,setVapSearch:t,vapPageSize:n,setVapPageSize:o,vapStatus:l,setVapStatus:r,vapPage:f,setVapPage:c,vapFiltered:C,vapTotal:d,vapPageItems:i}}function an(e,u){const{t}=Ee.useTranslation(),[n,o]=a.useState("25"),[l,r]=a.useState(1),[s,c]=a.useState(u);s!==u&&(c(u),l!==1&&r(1));const C=a.useMemo(()=>Hu.map(g=>({...g,label:t("visits.showN",{n:g.value})})),[t]),d=a.useCallback(g=>{o(g),r(1)},[]),f=Math.max(1,Math.ceil(e.length/Number(n))),i=Math.min(l,f);return{pageRows:a.useMemo(()=>e.slice((i-1)*Number(n),i*Number(n)),[e,i,n]),pageSizeProps:{options:C,value:n,onChange:d},paginationProps:{page:i,total:f,onChange:r},setPage:r}}function cn(){const[e,u]=a.useState(null),t=a.useCallback(o=>{u(l=>l?.key===o?{key:o,asc:!l.asc}:{key:o,asc:!0})},[]),n=a.useCallback((o,l)=>({label:o,sortDir:e?.key===l?e.asc?"asc":"desc":null,onClick:()=>t(l)}),[e,t]);return{\uC815\uB82C:e,\uCE78:n}}function Cn(){const[e,u]=a.useState(!1),[t,n]=a.useState("\uC88C"),[o,l]=a.useState({\uC88C:null,\uC6B0:null}),[r,s]=a.useState({\uC88C:[],\uC6B0:[]}),[c,C]=a.useState(!1),[d,f]=a.useState("\uC88C"),i=a.useCallback(E=>{const w=E.direction;l(p=>({...p,[w]:E})),s(p=>({...p,[w]:[E,...p[w]]})),u(!1)},[]),g=a.useCallback(E=>{const w=E.direction;l(p=>({...p,[w]:E})),C(!1)},[]);return{showDevice:e,setShowDevice:u,deviceDirection:t,setDeviceDirection:n,devices:o,setDevices:l,deviceHistory:r,setDeviceHistory:s,showDeviceList:c,setShowDeviceList:C,listForSide:d,setListForSide:f,handleDeviceSubmit:i,handleSelectFromList:g}}const dn="__ihab_core_word_pool__";function $e(){return globalThis[dn]??null}function F(e,u=Math.random){const t=e.slice();for(let n=t.length-1;n>0;n--){const o=Math.floor(u()*(n+1));[t[n],t[o]]=[t[o],t[n]]}return t}function ae(e,u,t=Math.random){return!Array.isArray(e)||e.length===0||u<=0?[]:u>=e.length?F(e,t):F(e,t).slice(0,u)}const au={SAME_SOUND_PICK:{difficulty:!0,choseong:!0,group:"discrimination"},SAME_OR_DIFF:{difficulty:!0,choseong:!0,group:"discrimination"},HEAR_AND_PICK_SAME:{difficulty:!0,choseong:!0,group:"discrimination"},HEAR_AND_PICK_INCLUDED:{difficulty:!0,choseong:!0,group:"discrimination"},STARTS_WITH_SAME_SOUND:{difficulty:!1,choseong:!0,group:"discrimination"},LISTEN_AND_REMEMBER_ORDER:{difficulty:!1,choseong:!0,group:"attention"},MERGE_2_SYLLABLES:{difficulty:!1,choseong:!0,group:"synthesis"},MERGE_3_SYLLABLES:{difficulty:!1,choseong:!0,group:"synthesis"},MERGE_2_PHONEMES:{difficulty:!1,choseong:!0,group:"synthesis"},MERGE_3_PHONEMES:{difficulty:!1,choseong:!0,group:"synthesis"},DROP_1_FROM_2SYLL:{difficulty:!1,choseong:!0,group:"deletion"},DROP_1_FROM_3SYLL:{difficulty:!1,choseong:!0,group:"deletion"},DROP_PART_FROM_COMPOUND:{difficulty:!1,choseong:!0,group:"deletion"},DROP_FINAL_CONSONANT_FROM_1SYLL:{difficulty:!1,choseong:!0,group:"deletion"},REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:{difficulty:!1,choseong:!0,group:"deletion"},CHANGE_1_SYLL_IN_2SYLL:{difficulty:!0,choseong:!0,group:"substitution"},CHANGE_1_SYLL_IN_3SYLL:{difficulty:!0,choseong:!0,group:"substitution"},CHANGE_1_PHONEME_IN_1SYLL:{difficulty:!1,choseong:!0,group:"substitution"},CHANGE_1_PHONEME_IN_2SYLL:{difficulty:!0,choseong:!0,group:"substitution"}},fn=q.indexOf("\u3147"),Uu={DROP_FINAL_CONSONANT_FROM_1SYLL:{syllables:1,syllable:e=>e.jong>0},REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:{syllables:1,syllable:e=>e.jong===0&&e.cho!==fn},MERGE_2_SYLLABLES:{syllables:2,syllable:()=>!0},MERGE_3_SYLLABLES:{syllables:3,syllable:()=>!0},MERGE_2_PHONEMES:{syllables:1,syllable:e=>e.jong===0},MERGE_3_PHONEMES:{syllables:1,syllable:e=>e.jong>0}},gn={\u3131:"\u3131",\u3132:"\u3131",\u314B:"\u3131",\u3133:"\u3131",\u313A:"\u3131",\u3134:"\u3134",\u3135:"\u3134",\u3136:"\u3134",\u3137:"\u3137",\u3145:"\u3137",\u3146:"\u3137",\u3148:"\u3137",\u314A:"\u3137",\u314C:"\u3137",\u314E:"\u3137",\u3139:"\u3139",\u313C:"\u3139",\u313D:"\u3139",\u313E:"\u3139",\u3140:"\u3139",\u3141:"\u3141",\u313B:"\u3141",\u3142:"\u3142",\u314D:"\u3142",\u313F:"\u3142",\u3144:"\u3142",\u3147:"\u3147"},hn={\u314F:{nucleus:"\u314F"},\u3151:{glide:"j",nucleus:"\u314F"},\u3153:{nucleus:"\u3153"},\u3155:{glide:"j",nucleus:"\u3153"},\u3157:{nucleus:"\u3157"},\u315B:{glide:"j",nucleus:"\u3157"},\u315C:{nucleus:"\u315C"},\u3160:{glide:"j",nucleus:"\u315C"},\u3161:{nucleus:"\u3161"},\u3163:{nucleus:"\u3163"},\u3150:{nucleus:"\u3154/\u3150"},\u3152:{glide:"j",nucleus:"\u3154/\u3150"},\u3154:{nucleus:"\u3154/\u3150"},\u3156:{glide:"j",nucleus:"\u3154/\u3150"},\u3158:{glide:"w",nucleus:"\u314F"},\u3159:{glide:"w",nucleus:"\u3154/\u3150"},\u315A:{glide:"w",nucleus:"\u3154/\u3150"},\u315D:{glide:"w",nucleus:"\u3153"},\u315E:{glide:"w",nucleus:"\u3154/\u3150"},\u315F:{glide:"w",nucleus:"\u3163"},\u3162:{glide:"\u0270",nucleus:"\u3163"}};function Ku(e){return gn[e]??e}const iu={cho:q,jung:se,jong:Q},K=e=>Array.isArray(e)?e.length>0:!!e;function cu(e,u){if(e.length!==u.length)return!1;for(let t=0;t<e.length;t++){const n=e[t],o=u[t];if(!(!n||!o)&&(n.cho!==o.cho&&q[n.cho]==="\u3147"!=(q[o.cho]==="\u3147")||n.jong!==o.jong&&n.jong===0!=(o.jong===0)))return!0}return!1}function mn(e,u,t){const n=t.pronOf(e),o=t.decompOf,l=t.sameStructureOnly&&o?o(n):null,r=[];for(const s of u)s!==e&&(t.okSet&&!t.okSet.has(s)||t.pronOf(s)!==n&&(l&&o&&cu(l,o(t.pronOf(s)))||r.push(s)));return r}function Wu(e,u,t){const n=u?.[e];if(!n)return[];const o=t.kind?n[t.kind]??[]:[...n.cho??[],...n.jung??[],...n.jong??[]];return mn(e,o,t)}function Sn(e,u,t,n,o,l,r){const s=["cho","jung","jong"].filter(i=>K(e[i])),c={};for(const i of s){const g=e[i];c[i]=new Set(Array.isArray(g)?g:[g])}const C=o==="pron",d=new Map;for(const i of u){const g=t(l(i));if(g.some(h=>!h))continue;let E=g;if(!C&&(E=t(i),E.length!==g.length||E.some(h=>!h)))continue;const w=g.length,p=d.get(w);p?p.push({w:i,dPron:g,dPos:E}):d.set(w,[{w:i,dPron:g,dPos:E}])}const f=new Map;for(const[i,g]of d){const E=new Map,w=(p,h)=>{const S=p.dPos[h];return S!=null&&s.every(B=>c[B].has(iu[B][S[B]]))};for(const p of g){let h;if(r==="head")h=w(p,0)?0:-1;else if(r==="tail")h=w(p,i-1)?i-1:-1;else if(r==="mid"){h=-1;for(let B=1;B<i-1;B++)if(w(p,B)){h=B;break}}else h=p.dPos.findIndex(B=>B!=null&&s.every(A=>c[A].has(iu[A][B[A]])));if(h<0)continue;const S=E.get(h);S?S.push(p):E.set(h,[p])}for(const[p,h]of E){const S=new Set(s.map(_=>p+":"+_)),B=_=>{let b="";for(let I=0;I<i;I++){const R=_[I];for(const v of["cho","jung","jong"])b+=(S.has(I+":"+v)?"*":R[v])+"."}return b},A=new Map;for(const _ of g){const b=B(_.dPron),I=A.get(b);I?I.push(_):A.set(b,[_])}for(const _ of h){const b=A.get(B(_.dPron))??[],I=[];for(const R of b){if(R.w===_.w)continue;let v=!0;for(const j of s){const G=_.dPron[p][j],x=R.dPron[p][j];if(x===G){v=!1;break}if(C&&c[j].has(iu[j][x])){v=!1;break}}v&&(n&&cu(_.dPron,R.dPron)||I.push(R.w))}f.set(_.w,I)}}}return f}const En=e=>e==null?[]:Array.isArray(e)?e:[e];function pn(e){if([...e].length!==1)return"";const u=V(e);if(!u)return"";const t=Ku(Q[u.jong]),n=t===""?0:Q.indexOf(t);return de(u.cho,u.jung,n<0?0:n)}function qu(e,u){return u.get(e)||pn(e)||e}function Cu(e){return e?K(e.cho)?"cho":K(e.jung)?"jung":K(e.jong)?"jong":null:null}function ye(e,u){const t=(n,o)=>!K(n)||En(n).includes(o);return t(u.cho,q[e.cho])&&t(u.jung,se[e.jung])&&t(u.jong,Q[e.jong])}function _e(e,u,t){const n=[...e];if(t!=="pron")return n.map(l=>V(l));const o=[...u.get(e)||e];return o.length!==n.length?n.map(l=>V(l)):o.map(l=>V(l))}function Oe(e,u,t,n,o){const l=u==="cho"?q:u==="jung"?se:Q,r=e[u],s=[],c=new Set([qu(t,o)]),C=F(l.map((d,f)=>f).filter(d=>d!==r&&(u!=="cho"||l[d]!=="\u3147")&&(u!=="jong"||d!==0)));for(const d of C){if(s.length>=n)break;const f=u==="cho"?de(d,e.jung,e.jong):u==="jung"?de(e.cho,d,e.jong):de(e.cho,e.jung,d),i=qu(f,o);c.has(i)||(c.add(i),s.push(f))}return s}function yn(e,u,t,n,o,l=null){const r=[...e];if(r.length!==2)return null;const s=r.map(f=>V(f));if(s.some(f=>!f))return null;const c=_e(e,t,n);if(c.some(f=>!f))return null;const C=Cu(u);let d=C&&u?c.map((f,i)=>ye(f,u)?i:-1).filter(f=>f>=0):[0,1];if(l!=null&&(d=d.filter(f=>f!==l)),!d.length)return null;for(const f of F(d)){const i=r[f];if(!o.has(i))continue;const g=Oe(s[f],C??"cho",i,40,t),E=[];for(const w of g)if(w!==i&&o.has(w)&&!E.includes(w)&&E.push(w),E.length>=2)break;if(!(E.length<2))return{question:e,distractors:[i,...E]}}return null}function Bn(e,u,t,n,o,l=null){const r=[...e];if(r.length!==3)return null;const s=r.map(f=>V(f));if(s.some(f=>!f))return null;const c=_e(e,t,n);if(c.some(f=>!f))return null;const C=Cu(u),d=C&&u?c.map((f,i)=>ye(f,u)?i:-1).filter(f=>f>=0):[0,1,2];if(!d.length)return null;for(const f of F(d))for(const i of F([0,1,2].filter(g=>g!==f&&(l==null||g===l)))){const g=[0,1,2].filter(S=>S!==i),E=g.map(S=>r[S]).join("");if(!o.has(E))continue;const w=g.indexOf(f),p=Oe(s[f],C??"cho",r[f],40,t),h=[];for(const S of p){const B=g.map(_=>r[_]);B[w]=S;const A=B.join("");if(A!==E&&o.has(A)&&!h.includes(A)&&h.push(A),h.length>=2)break}if(!(h.length<2))return{question:e,distractors:[E,...h]}}return null}function wn(e,u,t,n,o,l=null){const r=[...e],s=r.length;if(s<2)return null;const c=[];for(let d=1;d<=s-1;d++)c.push({remain:r.slice(0,d).join(""),dropped:r.slice(d).join(""),droppedEnd:1}),c.push({remain:r.slice(s-d).join(""),dropped:r.slice(0,s-d).join(""),droppedEnd:0});const C=Cu(u);for(const{remain:d,dropped:f,droppedEnd:i}of F(c)){if(l!=null&&i!==l||d===e||!o.has(d)||!o.has(f))continue;const g=[...d],E=g.map(h=>V(h));if(E.some(h=>!h))continue;const w=_e(d,t,n);if(w.some(h=>!h))continue;const p=C&&u?w.map((h,S)=>ye(h,u)?S:-1).filter(h=>h>=0):g.map((h,S)=>S);if(p.length)for(const h of F(p)){const S=Oe(E[h],C??"cho",g[h],40,t),B=[];for(const A of S){const _=[...g];_[h]=A;const b=_.join("");if(b!==d&&o.has(b)&&!B.includes(b)&&B.push(b),B.length>=2)break}if(B.length>=2)return{question:e,distractors:[d,...B]}}}return null}function bn(e,u,t,n,o,l=null){if([...e].length!==1)return null;const r=V(t.get(e)||e);if(!r||r.jong===0)return null;const s=de(r.cho,r.jung,0),c=Oe({cho:r.cho,jung:r.jung,jong:0},"cho",s,2,t);return c.length<2?null:{question:e,distractors:[s,...c]}}const du=q.indexOf("\u3147");function An(e,u,t,n,o,l=null){if([...e].length!==1)return null;const r=V(t.get(e)||e);if(!r||r.jong!==0||r.cho===du)return null;const s=de(du,r.jung,0),c=Oe({cho:du,jung:r.jung,jong:0},"jung",s,2,t);return c.length<2?null:{question:e,distractors:[s,...c]}}function Dn(e){const u=new Map;for(const t of e){const n=[...t],o=n.length;if(!(o<2||o>3))for(let l=0;l<o;l++){let r=o+"|"+l+"|";for(let c=0;c<o;c++)r+=c===l?"*":n[c];const s=u.get(r);s?s.push(t):u.set(r,[t])}}return u}function _n(e,u,t,n,o,l=null,r=null,s=2){const c=[...e],C=c.length;if(C<2||C>3)return null;const d=c.map(S=>V(S));if(d.some(S=>!S))return null;const f=_e(e,t,n);if(f.some(S=>!S))return null;const i=S=>t.get(S)??S,g=i(e),E=!!u&&(K(u.cho)||K(u.jung)||K(u.jong)),w=!!r&&(K(r.cho)||K(r.jung)||K(r.jong)),p=S=>{let B=C+"|"+S+"|";for(let A=0;A<C;A++)B+=A===S?"*":c[A];return B};let h;if(l!=null){if(l>=C||E&&!ye(f[l],u))return null;h=[l]}else E?h=f.map((S,B)=>ye(S,u)?B:-1).filter(S=>S>=0):h=Array.from({length:C},(S,B)=>B);for(const S of F(h)){const B=o.get(p(S))??[],A=[],_=[];for(const j of B){if(j===e)continue;const G=[...j].map(P=>V(P)),x=d[S],k=G[S];if(!x||!k)continue;let T=0;if(x.cho!==k.cho&&T++,x.jung!==k.jung&&T++,x.jong!==k.jong&&T++,!(T<s||i(j)===g))if(w){const P=_e(j,t,n)[S];P&&ye(P,r)?A.push(j):_.push(j)}else A.push(j)}if(!A.length)continue;const b=F(A)[0],I=[],R=new Set([g,i(b)]),v=w?_:A.filter(j=>j!==b);for(const j of F(v)){const G=i(j);if(!R.has(G)&&(R.add(G),I.push(j),I.length>=2))break}if(!w&&I.length<2)for(const j of F(B)){if(j===e||j===b)continue;const G=i(j);if(!R.has(G)&&(R.add(G),I.push(j),I.length>=2))break}if(!(I.length<2))return{question:e,distractors:[b,...I]}}return null}let He=null,zu=null,Ju=null;function On(){const e=$e();if(e&&e.entries.length>0){const u=Ae();if(He&&zu===e&&Ju===u)return He;const t=new Set,n=[];for(const o of e.entries)!o.word||t.has(o.word)||(t.add(o.word),n.push({w:o.word,s:o.syllables,p:u?.[o.word]?[...u[o.word].cho??[],...u[o.word].jung??[],...u[o.word].jong??[]]:[],pron:o.pronunciation||o.word,grade:o.grade}));return He=n,zu=e,Ju=u,He}return[]}const ue=new Proxy([],{get(e,u){const t=On(),n=t[u];return typeof n=="function"?n.bind(t):n}});function Ue(e){return e.length?e[Math.floor(Math.random()*e.length)]:void 0}function te(e,u){if(u>=e.length)return F(e);if(u===0)return[];const t=e.slice();for(let n=0;n<u;n++){const o=n+Math.floor(Math.random()*(t.length-n)),l=t[n];t[n]=t[o],t[o]=l}return t.slice(0,u)}let fu=null,Zu=null;function fe(){const e=$e();if(fu&&Zu===e)return fu;const u=new Map;for(const t of ue)t.w&&u.set(t.w,t.pron);return fu=u,Zu=e,u}function J(e){return fe().get(e)||e}function gu(e,u,t=new Set){const n=[];for(const o of F(e)){if(n.length>=u)break;const l=J(o);t.has(l)||(t.add(l),n.push(o))}return n}let Nn=0;function z(e){return`${e}-rt-${++Nn}`}function Ne(e){const u=vu();if(!u||u.total===0){const n=new Set;for(const o of e)n.add(o);return n}const t=new Set;for(const n of e)Qt(n)===!0&&t.add(n);return t}const Ke=new Map;let Qu=null,Xu=null;function Te(e){return e==null?"":Array.isArray(e)?e.slice().sort().join(","):e}function et(e){const u=Te(e.choseong),t=e.composition,n=t?.syllable==null?"":Array.isArray(t.syllable)?t.syllable.slice().sort().join(","):String(t.syllable),o=t?`${Te(t.cho)}/${Te(t.jung)}/${Te(t.jong)}/${t.jongNone?"N":""}/${n}`:"",l=Te(e.grade);return`${e.difficulty??""}|${u}|${o}|${e.excludeNoImage?"1":"0"}|${e.count??""}|x${e.contrastCount??1}|${e.fullCount?"F":""}|s${e.sameStructureOnly===!1?"0":"1"}|v${e.phonemeView==="pron"?"p":"c"}|g${l}|t${e.targetSyllable??""}|c${e.choicesPerItem??""}`}async function Z(e){const u=$e(),t=Ae();(u!==Qu||t!==Xu)&&(Ke.clear(),Qu=u,Xu=t);const n=et(e);return Ke.has(n)||Ke.set(n,jn(e)),Ke.get(n)}function Tn(e){if(!e)return null;const u=r=>r==null?null:Array.isArray(r)?r.length?r:null:[r],t=u(e.cho),n=u(e.jung),o=!!e.jongNone,l=o?null:u(e.jong);return t||n||l||o?o&&!t&&!n&&!l?r=>$t(r):r=>Ut(r,{cho:t,jung:n,jong:l,jongNone:o}):null}async function jn(e){const{difficulty:u=null,choseong:t=null,composition:n=null,targetSyllable:o=null,excludeNoImage:l=!1}=e,r=e.grade&&e.grade.length>0?new Set(e.grade):null,s=e.sameStructureOnly??!0,c=e.phonemeView==="pron"?"pron":"char",C=Math.max(1,e.contrastCount??1),d=u==="cho"||u==="jung"||u==="jong",f=d&&C>=2,i=u==="count",g=t?new Set(Array.isArray(t)?t:[t]):null,E=n?.syllable!=null?new Set(Array.isArray(n.syllable)?n.syllable:[n.syllable]):null,w=n?[Tn(n),E?y=>E.has(Ge(y)):null].filter(y=>y!=null):[],p=u==="random"||u===null,h=p||i,S=p||f||i;let B=ue.filter(y=>!y.w||r&&(!y.grade||!r.has(y.grade))?!1:S?!0:Array.isArray(y.p)&&y.p.length>0);g&&(B=B.filter(y=>{for(const D of g)if(Yt(y.w,D))return!0;return!1})),w.length>0&&(B=B.filter(y=>{const D=c==="pron"?J(y.w):y.w;return w.every(H=>H(D))})),o&&(B=B.filter(y=>y.w[0]===o));let A;if(l){const y=new Set;for(const D of B)if(y.add(D.w),Array.isArray(D.p))for(const H of D.p)y.add(H);if(h)for(const D of ue)D.w&&y.add(D.w);A=Ne(y)}else{const y=new Set;for(const D of B)if(y.add(D.w),Array.isArray(D.p))for(const H of D.p)y.add(H);if(h)for(const D of ue)D.w&&y.add(D.w);A=y}let _=null;if(f){const y=new Set;for(const D of ue)D.w&&y.add(D.w);_=l?Ne(y):y}const b=B.filter(y=>A.has(y.w)),I=600,R=Array.from(A),v=R.length>I?te(R,I):R,j=i&&n!=null&&(K(n.cho)||K(n.jung)||K(n.jong)),G=2500,x=new Map;if(i&&!j&&C>=2){for(const y of R){const D=Ge(y),H=x.get(D);H?H.push(y):x.set(D,[y])}for(const[y,D]of x)D.length>G&&x.set(y,te(D,G))}const k=Vt(),T=j?Sn(n,R,k,s,c,J):null,P=500,$=1500,X=e.fullCount?b:u==="random"?b.length>P?te(b,P):b:b.length>$?te(b,$):b,le=Ae(),re=[];for(const y of X){let D;const H=J(y.w);if(f)D=Wt(y.w,u,C,_,24).filter(Y=>J(Y)!==H);else if(i)j?D=(T.get(y.w)??[]).filter(Y=>J(Y)!==H):C<=1?D=Wu(y.w,le,{okSet:A,pronOf:J,decompOf:k,sameStructureOnly:!1}):D=(x.get(Ge(y.w))??[]).filter(Y=>{if(Y===y.w||J(Y)===H)return!1;const ee=qt(y.w,Y);return C>=5?ee>=5:ee===C});else if(p)D=v.filter(Y=>Y!==y.w&&Y.length===y.w.length&&J(Y)!==H);else{const Y=u;D=Wu(y.w,le,{kind:Y,okSet:A,pronOf:J,decompOf:k,sameStructureOnly:!1}),D.length===0&&(D=(v.length>30?te(v,30):v).filter(ee=>ee!==y.w&&Gt(y.w,ee)===u&&J(ee)!==H))}if(s&&D.length>0&&(d||i&&!j)){const Y=k(J(y.w));D=D.filter(ee=>!cu(Y,k(J(ee))))}D.length!==0&&re.push({word:y,usable:D})}return re}async function ut(e,u){const{choicesPerItem:t=3,count:n=10}=u,o=t-1,l=(await Z(u)).filter(s=>s.usable.length>=o),r=[];for(const s of F(l)){if(r.length>=n)break;const c=gu(s.usable,o);if(c.length<o)continue;const C=F([s.word.w,...c]);r.push({id:z(e+"-item"),index:r.length+1,word:s.word.w,syllables:s.word.s,choices:C,answerIndex:C.indexOf(s.word.w)})}return r}async function In(e){const{choicesPerItem:u=3,count:t=10}=e,n=u-1,o=await Z({...e,difficulty:null});if(o.length<u)return[];const l=[],r=F([...o]);for(const s of r){if(l.length>=t)break;const c=s.word.w,C=[...s.word.pron||c],d=Ue(C);if(!d)continue;const f=o.filter(E=>E.word.w!==c&&E.word.s===s.word.s&&!(E.word.pron||E.word.w).includes(d)&&E.word.pron!==s.word.pron);if(f.length<n)continue;const i=gu(f.map(E=>E.word.w),n);if(i.length<n)continue;const g=F([c,...i]);l.push({id:z("HPI-item"),index:l.length+1,targetSyllable:d,word:c,choices:g,answerIndex:g.indexOf(c)})}return l}async function Ln(e){const{count:u=10}=e,t=(await Z(e)).filter(n=>n.usable.length>=1);return Array.from({length:u},(n,o)=>{const l=Ue(t);if(!l)return null;const r=o%2===0;let s;if(r)s=[l.word.w,l.word.w];else{const c=Ue(l.usable);s=Math.random()<.5?[l.word.w,c]:[c,l.word.w]}return{id:z("SOD-item"),index:o+1,word:l.word.w,pair:s,same:r}}).filter(n=>!!n)}async function Rn(e){const{choicesPerItem:u=3,count:t=10}=e,n=u-1,o=await Z({...e,difficulty:null});if(o.length<u+1)return[];const l=o.map(i=>i.word.w),r=new Map(o.map(i=>[i.word.w,i.word.pron])),s=i=>(r.get(i)||i)[0]??"",c={};for(const i of o){const g=s(i.word.w);g&&(c[g]||(c[g]=[]),c[g].push(i.word.w))}const C=Object.entries(c).filter(([,i])=>i.length>=2).map(([i])=>i);if(C.length===0)return[];const d=[],f=F([...C]);for(let i=0;d.length<t&&i<t*4;i++){const g=f[i%f.length],E=c[g];if(E.length<2)continue;const w=F([...E]),p=w[0],h=w[1];if(!p||!h||p===h||(r.get(p)||p)===(r.get(h)||h))continue;const S=r.get(h)||h,B=l.filter(b=>s(b)!==g&&b!==p&&b!==h&&b.length===h.length&&(r.get(b)||b)!==S);if(B.length<n)continue;const A=gu(B,n);if(A.length<n)continue;const _=F([h,...A]);d.push({id:z("SWS-item"),index:d.length+1,sourceWord:p,targetSyllable:g,word:h,choices:_,answerIndex:_.indexOf(h)})}return d}function tt(e,u,t){return te(e,u).map((n,o)=>{const l=Ue(n.usable)??"",r=[...n.word.w],s=[...l],c=r.findIndex((d,f)=>d!==s[f]),C=F(n.usable.filter(d=>d&&d!==l)).slice(0,2);return{id:z(t),index:o+1,word:n.word.w,original:n.word.w,changed:l,changedFrom:c>=0?r[c]:"",changedTo:c>=0?s[c]:"",distractors:C}})}async function nt(e,u,t){const{count:n=10}=u,o=fe(),l=ue.filter(g=>g.w&&g.s===e),r=u.excludeNoImage?Ne(l.map(g=>g.w)):null,s=r?l.filter(g=>r.has(g.w)):l,c=new Set(s.map(g=>g.w)),C=Dn(c),d=u.phonemeView??"char",f=u.composition??null,i=[];for(const g of F(s)){if(i.length>=n)break;const E=_n(g.w,f,o,d,C,null,null);if(!E)continue;const w=E.distractors[0],p=[...g.w],h=[...w],S=p.findIndex((B,A)=>B!==h[A]);i.push({id:z(t),index:i.length+1,word:g.w,original:g.w,changed:w,changedFrom:S>=0?p[S]:"",changedTo:S>=0?h[S]:"",distractors:E.distractors.slice(1)})}return i}async function Mn(e){return nt(2,e,"CS2-item")}async function xn(e){return nt(3,e,"CS3-item")}async function Pn(e){const u=(await Z({...e,difficulty:"count",contrastCount:1})).filter(t=>t.word.s===1&&t.usable.length>=1);return tt(u,e.count??10,"CP1-item")}async function Fn(e){const u=e.difficulty&&e.difficulty!=="random"?e.difficulty:"count",t=(await Z({...e,difficulty:u,contrastCount:1})).filter(n=>n.word.s===2&&n.usable.length>=1);return tt(t,e.count??10,"CP2-item")}async function kn(e){const{count:u=10}=e,t=(await Z({...e})).filter(n=>n.word.s===2);return te(t,u).map((n,o)=>({id:z("M2S-item"),index:o+1,word:n.word.w,answer:n.word.w,parts:[...n.word.w]}))}async function vn(e){const{count:u=10}=e,t=(await Z({...e})).filter(n=>n.word.s===3);return te(t,u).map((n,o)=>({id:z("M3S-item"),index:o+1,word:n.word.w,answer:n.word.w,parts:[...n.word.w]}))}async function Vn(e){const{count:u=10}=e,t=(await Z({...e})).filter(s=>s.word.s===2),n=fe(),o=new Set(ue.map(s=>s.w)),l=e.phonemeView??"char",r=[];for(const s of F(t)){if(r.length>=u)break;const c=yn(s.word.w,e.composition??null,n,l,o);if(!c)continue;const[C,...d]=c.distractors,f=[...s.word.w],i=f[0]===C?f[1]:f[0];r.push({id:z("D2-item"),index:r.length+1,original:s.word.w,word:s.word.w,dropped:i,missingResult:C,distractors:d})}return r}async function Gn(e){const{count:u=10}=e,t=(await Z({...e})).filter(s=>s.word.s===3),n=fe(),o=new Set(ue.map(s=>s.w)),l=e.phonemeView??"char",r=[];for(const s of F(t)){if(r.length>=u)break;const c=Bn(s.word.w,e.composition??null,n,l,o);if(!c)continue;const[C,...d]=c.distractors,f=[...s.word.w];let i="";for(let g=0;g<f.length;g++)if(f.filter((E,w)=>w!==g).join("")===C){i=f[g];break}r.push({id:z("D3-item"),index:r.length+1,original:s.word.w,word:s.word.w,dropped:i,missingResult:C,distractors:d})}return r}async function Yn(e){const{count:u=10}=e,t=(await Z({...e})).filter(s=>s.word.s>=2),n=fe(),o=new Set(ue.map(s=>s.w)),l=e.phonemeView??"char",r=[];for(const s of F(t)){if(r.length>=u)break;const c=wn(s.word.w,e.composition??null,n,l,o);if(!c)continue;const[C,...d]=c.distractors,f=s.word.w,i=f.startsWith(C)?f.slice(C.length):f.endsWith(C)?f.slice(0,f.length-C.length):"";r.push({id:z("DPC-item"),index:r.length+1,original:f,word:f,dropped:i,missingResult:C,distractors:d})}return r}async function $n(e){const{count:u=10}=e,t=(await Z({...e})).map(n=>n.word.w);return t.length<3?[]:Array.from({length:u},(n,o)=>{const l=te(t,3);return{id:z("LRO-item"),index:o+1,sequence:l,choices:F(l)}})}function We(e,u,t){const n=ue.filter(r=>r.w&&r.s===e),o=u?Ne(n.map(r=>r.w)):null,l=[];for(const r of n)if(!(o&&!o.has(r.w))){if(t){const s=V(r.w);if(!s||!t(s))continue}l.push(r)}return l}function Hn(e){const u=We(1,e.excludeNoImage??!1,t=>t.jong===0);return te(u,e.count??10).map((t,n)=>{const o=V(t.w);return{id:z("M2P-item"),index:n+1,parts:[q[o.cho],se[o.jung]],answer:t.w,word:t.w}})}function Un(e){const u=We(1,e.excludeNoImage??!1,t=>t.jong>0&&!we[t.jong]);return te(u,e.count??10).map((t,n)=>{const o=V(t.w);return{id:z("M3P-item"),index:n+1,parts:[q[o.cho],se[o.jung],Q[o.jong]],answer:t.w,word:t.w}})}function Kn(e){const u=Uu.DROP_FINAL_CONSONANT_FROM_1SYLL,t=We(u.syllables,e.excludeNoImage??!1,u.syllable),n=fe(),o=[];for(const l of F(t)){if(o.length>=(e.count??10))break;const r=bn(l.w,null,n);if(!r)continue;const[s,...c]=r.distractors;o.push({id:z("DFC-item"),index:o.length+1,original:l.w,word:l.w,result:s,distractors:c})}return o}function Wn(e){const u=Uu.REMOVE_CONSONANT_AND_IDENTIFY_PHONEME,t=We(u.syllables,e.excludeNoImage??!1,u.syllable),n=fe(),o=[];for(const l of F(t)){if(o.length>=(e.count??10))break;const r=An(l.w,null,n);if(!r)continue;const s=V(n.get(l.w)||l.w);if(!s)continue;const[c,...C]=r.distractors;o.push({id:z("RCP-item"),index:o.length+1,base:l.w,word:l.w,missingConsonant:q[s.cho],remaining:c,distractors:C})}return o}const qe=new Map;let ot=null,lt=null;async function rt(e,u={}){const t=$e(),n=Ae();(t!==ot||n!==lt)&&(qe.clear(),ot=t,lt=n);const o=`${e}:${et(u)}`;if(qe.has(o))return qe.get(o);const l=await zn(e,u);return qe.set(o,l),l}const qn={SAME_SOUND_PICK:e=>ut("SSP",e),HEAR_AND_PICK_SAME:e=>ut("HPS",e),HEAR_AND_PICK_INCLUDED:e=>In(e),SAME_OR_DIFF:e=>Ln(e),STARTS_WITH_SAME_SOUND:e=>Rn(e),LISTEN_AND_REMEMBER_ORDER:e=>$n(e),MERGE_2_SYLLABLES:e=>kn(e),MERGE_3_SYLLABLES:e=>vn(e),MERGE_2_PHONEMES:e=>Hn(e),MERGE_3_PHONEMES:e=>Un(e),DROP_1_FROM_2SYLL:e=>Vn(e),DROP_1_FROM_3SYLL:e=>Gn(e),DROP_PART_FROM_COMPOUND:e=>Yn(e),DROP_FINAL_CONSONANT_FROM_1SYLL:e=>Kn(e),REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:e=>Wn(e),CHANGE_1_SYLL_IN_2SYLL:e=>Mn(e),CHANGE_1_SYLL_IN_3SYLL:e=>xn(e),CHANGE_1_PHONEME_IN_1SYLL:e=>Pn(e),CHANGE_1_PHONEME_IN_2SYLL:e=>Fn(e)};async function zn(e,u={}){const t=qn[e];return t?await t(u):[]}async function Jn(e){const u=[null,"count"],t=Object.keys(au);let n=0;for(const o of u)for(const l of t){const r=au[l];rt(l,{difficulty:r.difficulty?o:null,choseong:null,count:10,excludeNoImage:e}).catch(()=>{}),++n%6===0&&await new Promise(s=>setTimeout(s,0))}}async function Zn(e){return(await Z({...e,fullCount:!0})).length}async function Qn(e={}){const u=[];for(const s of ue)s.w&&u.push(s.w);const t=e.excludeNoImage?Ne(u):u,n=new Set,o=new Set,l=new Set,r=new Set;for(const s of t){r.add(Ge(s));for(const c of s){const C=V(c);if(C&&(q[C.cho]!=="\u3147"&&n.add(q[C.cho]),o.add(se[C.jung]),C.jong>0)){l.add(Q[C.jong]);const d=we[C.jong];d&&d.forEach(f=>l.add(f))}}}return{cho:n,jung:o,jong:l,syllable:r}}const ge="\uC804\uCCB4";function st(){const{t:e}=Ee.useTranslation();return a.useMemo(()=>({difficulty:e("wordSearch.filter.difficulty","\uB4F1\uAE09"),syllables:e("wordSearch.filter.syllables","\uC74C\uC808 \uC218"),syllable5plus:e("wordSearch.filter.syllable5plus","5\uC74C\uC808 \uC774\uC0C1"),partOfSpeech:e("wordSearch.filter.partOfSpeech","\uD488\uC0AC"),wordType:e("wordSearch.filter.wordType","\uC720\uD615"),posMap:{[e("wordSearch.filter.pos.noun","\uCCB4\uC5B8(\uBA85\uC0AC, \uC218\uC0AC)")]:["\uBA85","\uC218"],[e("wordSearch.filter.pos.verb","\uC6A9\uC5B8(\uB3D9\uC0AC, \uD615\uC6A9\uC0AC)")]:["\uB3D9","\uD615"],[e("wordSearch.filter.pos.modifier","\uC218\uC2DD\uC5B8(\uBD80\uC0AC, \uAD00\uD615\uC0AC)")]:["\uBD80","\uAD00"]},typeMap:{[e("wordSearch.filter.type.native","\uACE0\uC720\uC5B4")]:"\uACE0\uC720",[e("wordSearch.filter.type.sino","\uD55C\uC790\uC5B4")]:"\uD55C\uC790",[e("wordSearch.filter.type.foreign","\uC678\uB798\uC5B4")]:"\uC678\uB798",[e("wordSearch.filter.type.mixed","\uD63C\uC885\uC5B4")]:"\uD63C\uC885"}}),[e])}function at(e,u,t){return{label:u.difficulty,items:[1,2,3,4].map(n=>e("wordSearch.filter.grade",{n})),multiple:!0,allOption:!0,allLabel:t?.allLabel,labelAction:t?.labelAction,labelInfo:t?.labelInfo}}function it(e){return{label:e.partOfSpeech,items:Object.keys(e.posMap),multiple:!0,allOption:!0}}function ct(e){return{label:e.wordType,items:Object.keys(e.typeMap),multiple:!0,allOption:!0}}function Xn(e,u){return{label:u.syllables,items:[e("wordSearch.filter.syllable",{n:1}),e("wordSearch.filter.syllable",{n:2}),e("wordSearch.filter.syllable",{n:3}),e("wordSearch.filter.syllable",{n:4}),u.syllable5plus],multiple:!0,allOption:!0}}function eo(e,u){const t=[e("wordPairs.filter.onlyHasImage","\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC")];return u?.includeStructure&&t.push(e("wordPairs.filter.onlySameStructure","\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC")),{label:e("wordPairs.filter.selectLabel","\uC120\uD0DD"),items:t,multiple:!0,labelAction:u?.labelAction,labelInfo:u?.labelInfo}}function uo(e,u){const{label:t,headValue:n,midValue:o,tailValue:l,includeMid:r=!0,headDisabled:s,midDisabled:c,tailDisabled:C,allOptionDisabled:d,groupLabel:f,labelAction:i}=u;return{label:t,...f?{groupLabel:f}:{},...i?{labelAction:i}:{},allOption:!0,allLabel:e("wordSearch.filter.positionAny",{defaultValue:"\uBB34\uAD00"}),...d?{allOptionDisabled:d}:{},items:[{value:n,displayLabel:e("wordSearch.filter.positionHead",{defaultValue:"\uC5B4\uB450"}),disabled:s},...r?[{value:o,displayLabel:e("wordSearch.filter.positionMid",{defaultValue:"\uC5B4\uC911"}),disabled:c}]:[],{value:l,displayLabel:e("wordSearch.filter.positionTail",{defaultValue:"\uC5B4\uB9D0"}),disabled:C}]}}function to(e,u,t){if(u===ge){const{[t]:l,...r}=e;return r}const n=e[t]??[],o=n.includes(u)?n.filter(l=>l!==u):[...n,u];if(o.length===0){const{[t]:l,...r}=e;return r}return{...e,[t]:o}}Object.fromEntries(Object.entries(hn).map(([e,{nucleus:u}])=>[e,u]));const no={\uACE0\uC720\uC5B4:"\uACE0\uC720",\uD55C\uC790\uC5B4:"\uD55C\uC790",\uC678\uB798\uC5B4:"\uC678\uB798",\uD63C\uC885\uC5B4:"\uD63C\uC885"},oo={"\uCCB4\uC5B8(\uBA85\uC0AC,\uC218\uC0AC)":["\uBA85","\uC218"],"\uC6A9\uC5B8(\uB3D9\uC0AC,\uD615\uC6A9\uC0AC)":["\uB3D9","\uD615"],"\uC218\uC2DD\uC5B8(\uBD80\uC0AC,\uAD00\uD615\uC0AC)":["\uBD80","\uAD00"]},lo={difficulty:"\uB09C\uC774\uB3C4 \uB4F1\uAE09",syllables:"\uC74C\uC808 \uC218",syllable5plus:"5\uC74C\uC808 \uC774\uC0C1",partOfSpeech:"\uD488\uC0AC",wordType:"\uC720\uD615",posMap:oo,typeMap:no};function ro(e,u,t=lo){const n=u[t.difficulty];if(n?.length&&!n.some(s=>e.grade===s.replace(/\D/g,"")))return!1;const o=u[t.syllables];if(o?.length){const s=e.syllables??0;if(!o.some(c=>c===t.syllable5plus?s>=5:s===parseInt(c)))return!1}const l=u[t.partOfSpeech];if(l?.length&&!l.flatMap(s=>t.posMap[s]??[s]).some(s=>(e.pos??"").includes(s)))return!1;const r=u[t.wordType];return!(r?.length&&!r.some(s=>e.wordType===t.typeMap[s]))}const ie=(e,u)=>u.map(t=>({jamos:[t],tooltip:e})),W=(e,u)=>({jamos:[...e],tooltip:u}),hu={cho:[ie("\uC591\uC21C\uC74C",["\u3142","\u3143","\u314D","\u3141"]),ie("\uCE58\uC870\uC74C",["\u3137","\u3138","\u314C","\u3134","\u3139"]),ie("\uCE58\uC870\uC74C",["\u3145","\u3146"]),ie("\uACBD\uAD6C\uAC1C\uC74C",["\u3148","\u3149","\u314A"]),ie("\uC5F0\uAD6C\uAC1C\uC74C",["\u3131","\u3132","\u314B"]),ie("\uC131\uBB38\uC74C",["\u314E"])],jung:[[W("\u3163","\uC804\uC124 \uACE0\uBAA8\uC74C"),W("\u315F","\uC804\uC124 \uACE0\uBAA8\uC74C \xB7 w\uD65C\uC74C"),W("\u3162","\uC804\uC124 \uACE0\uBAA8\uC74C \xB7 \u0270\uD65C\uC74C")],[W("\u3161","\uD6C4\uC124 \uACE0\uBAA8\uC74C \uD3C9\uC21C")],[W("\u315C","\uD6C4\uC124 \uACE0\uBAA8\uC74C \uC6D0\uC21C"),W("\u3160","\uD6C4\uC124 \uACE0\uBAA8\uC74C \uC6D0\uC21C \xB7 j\uD65C\uC74C")],[W("\u3154\u3150","\uC804\uC124 \uC911\uBAA8\uC74C"),W("\u3156\u3152","\uC804\uC124 \uC911\uBAA8\uC74C \xB7 j\uD65C\uC74C"),W("\u3159\u315A\u315E","\uC804\uC124 \uC911\uBAA8\uC74C \xB7 w\uD65C\uC74C")],[W("\u3153","\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C"),W("\u3155","\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C \xB7 j\uD65C\uC74C"),W("\u315D","\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C \xB7 w\uD65C\uC74C")],[W("\u3157","\uD6C4\uC124 \uC911\uBAA8\uC74C \uC6D0\uC21C"),W("\u315B","\uD6C4\uC124 \uC911\uBAA8\uC74C \uC6D0\uC21C \xB7 j\uD65C\uC74C")],[W("\u314F","\uC800\uBAA8\uC74C"),W("\u3151","\uC800\uBAA8\uC74C \xB7 j\uD65C\uC74C"),W("\u3158","\uC800\uBAA8\uC74C \xB7 w\uD65C\uC74C")]],jong:[ie("\uC591\uC21C\uC74C",["\u3142","\u3141"]),ie("\uCE58\uC870\uC74C",["\u3137","\u3134","\u3139"]),ie("\uC5F0\uAD6C\uAC1C\uC74C",["\u3131","\u3147"])]},so=[...q],ao=[...se],io=Q.filter(e=>e!==""),ce=e=>e===ne?[]:Array.from(e),ne="__NO_CODA__",Ct=[1,2,3,4],oe=5,co=12,dt="SYL_",mu=e=>`${dt}${e}`,Co=e=>Number(e.slice(dt.length));function Su(e){return e>=oe?Array.from({length:co-oe+1},(u,t)=>oe+t):[e]}const ft={cho:so,jung:ao,jong:io},Eu=e=>e.map(u=>u.map(({jamos:t,tooltip:n})=>({v:t.join(""),tooltip:n}))),pu={cho:Eu(hu.cho),jung:Eu(hu.jung),jong:Eu(hu.jong)},gt={};pu.jung.flat().forEach(({v:e})=>{for(const u of ce(e))gt[u]=e});const fo=new Set(pu.cho.flat().map(e=>e.v));function ht(e,u){return e==="cho"?fo.has(u)?u:null:e==="jung"?gt[u]??u:Ku(u)}function mt(e,u,t){if(e==="jung"){const n=ce(u);return t&&n.includes(t)?t:n[0]??u}return u}function St(e,u,t){const n=(o,l)=>l?o==="jong"&&l===ne?ne:u==="pron"?ht(o,l):mt(o,l,o==="jung"?t:null):null;return{...e,cho:n("cho",e.cho),jung:n("jung",e.jung),jong:n("jong",e.jong)}}const yu={cho:null,jung:null,jong:null,syllable:null},go="wt_filter",Et=e=>`wt_filter_${e}`;function pt(e){try{const u=localStorage.getItem(Et(e))??localStorage.getItem(go);if(u)return JSON.parse(u)}catch{}return null}function ho(e){const u=e;return u?.composition?{cho:u.composition.cho??null,jung:u.composition.jung??null,jong:u.composition.jong??null,syllable:u.composition.syllable??null}:u?.choseong?{...yu,cho:u.choseong}:yu}function mo(e,u,t){const{t:n,i18n:o}=Ee.useTranslation(),[l]=a.useState(()=>t?.resetOnMount?null:pt(e)),r=l?.contrastCount,s=typeof r=="number"&&Number.isFinite(r)?r:1,[c,C]=a.useState(Math.min(5,Math.max(1,s))),[d,f]=a.useState(l?.phonemeView==="pron"?"pron":l?.phonemeView==="direct"?"direct":"char"),[i,g]=a.useState(()=>ho(l)),E=a.useCallback(()=>u.requireSyllable?{cho:"\u3131",jung:"\u314F",jong:ne,syllable:u.fixedSyllable??null}:{cho:null,jung:null,jong:u.fixedNoCoda?ne:null,syllable:u.fixedSyllable??null},[u.requireSyllable,u.fixedSyllable,u.fixedNoCoda]);a.useEffect(()=>{!u.requireSyllable&&u.fixedSyllable==null&&!u.fixedNoCoda||g(m=>m.cho||m.jung||m.syllable!=null||m.jong?m:E())},[]);const w=a.useMemo(()=>K(i.cho)||K(i.jung)||K(i.jong)?"count":"random",[i.cho,i.jung,i.jong]),p=a.useRef(d==="char"?i.jung:null);a.useEffect(()=>{d==="char"&&(p.current=i.jung)},[d,i.jung]);const[h,S]=a.useState(t?.resetOnMount?!!t?.defaultImageOnly:l?.excludeNoImage??!0),[B,A]=a.useState(t?.resetOnMount?!1:l?.sameStructureOnly??!0),[_,b]=a.useState(Array.isArray(l?.gradeFilter)?l.gradeFilter:[]),[I,R]=a.useState(Array.isArray(l?.posFilter)?l.posFilter:[]),[v,j]=a.useState(Array.isArray(l?.wordTypeFilter)?l.wordTypeFilter:[]),G=a.useRef(t?.resetKey);a.useEffect(()=>{G.current!==t?.resetKey&&(G.current=t?.resetKey,g(E()),S(!1),A(!1),b([]),R([]),j([]),C(1))},[t?.resetKey]);const x=st(),[k,T]=a.useState({cho:new Set,jung:new Set,jong:new Set,syllable:new Set}),[P,$]=a.useState(!1),[X,le]=a.useState(null),re=1,y=Math.max(1,[i.cho,i.jung,i.jong].filter(Boolean).length);a.useEffect(()=>{c<y&&C(y)},[y,c]);const[D,H]=a.useState(e);a.useEffect(()=>{if(D!==e){if(!t?.resetOnMount){const m=pt(e),N=typeof m?.contrastCount=="number"&&Number.isFinite(m.contrastCount)?m.contrastCount:1;C(Math.min(5,Math.max(1,N))),g(m?.composition??E()),S(m?.excludeNoImage??!0),A(m?.sameStructureOnly??!0),f(m?.phonemeView==="pron"?"pron":"char"),b(Array.isArray(m?.gradeFilter)?m.gradeFilter:[]),R(Array.isArray(m?.posFilter)?m.posFilter:[]),j(Array.isArray(m?.wordTypeFilter)?m.wordTypeFilter:[])}H(e)}},[e,D,t?.resetOnMount]),a.useEffect(()=>{if(!t?.resetOnMount&&D===e)try{localStorage.setItem(Et(e),JSON.stringify({contrastCount:c,composition:i,excludeNoImage:h,sameStructureOnly:B,phonemeView:d,gradeFilter:_,posFilter:I,wordTypeFilter:v}))}catch{}},[t?.resetOnMount,e,D,c,i,h,B,d,_,I,v]);const[Y,ee]=a.useState(0);Lu("wordpool:update",()=>ee(m=>m+1));const Du=a.useRef(o.language);a.useEffect(()=>{Du.current!==o.language&&(Du.current=o.language,ee(m=>m+1))},[o.language]),a.useEffect(()=>{if(!u.choseong)return;let m=!1;return Qn({difficulty:w,excludeNoImage:h}).then(N=>{m||(T(N),N.cho.size+N.jung.size+N.jong.size>0&&$(!0))}).catch(()=>{m||T({cho:new Set,jung:new Set,jong:new Set,syllable:new Set})}),()=>{m=!0}},[u.choseong,w,h,Y]),a.useEffect(()=>{let m=!1;const N=i,O=N.cho?ce(N.cho):null,M=N.jung?ce(N.jung):null,U=N.jong===ne,he=U?null:N.jong?ce(N.jong):null,me=N.syllable!=null?Su(N.syllable):null,ve=!!(O||M||he||U||me);return Zn({difficulty:u.difficulty?w:null,contrastCount:u.difficulty?c:1,composition:u.choseong&&ve?{cho:O,jung:M,jong:he,jongNone:U,syllable:me}:null,excludeNoImage:h,sameStructureOnly:B,phonemeView:d==="pron"?"pron":"char",grade:_.length>0?_:null}).then(Ve=>{m||le(Ve)}).catch(()=>{m||le(null)}),()=>{m=!0}},[u.choseong,u.difficulty,w,c,i,d,h,B,Y,_]),a.useEffect(()=>{P&&g(m=>{const N={...m};let O=!1;return["cho","jung","jong"].forEach(M=>{const U=m[M];!U||U===ne||ce(U).some(he=>k[M].has(he))||(N[M]=null,O=!0)}),m.syllable!=null&&u.fixedSyllable==null&&(m.syllable>=oe?[...k.syllable].some(M=>M>=oe)||(N.syllable=null,O=!0):(!k.syllable.has(m.syllable)||m.syllable<re)&&(N.syllable=null,O=!0)),O?N:m})},[k,P,re,u.fixedSyllable]);const _u=a.useMemo(()=>{const m=N=>{const O=new Set;for(const M of ft[N])k[N].has(M)&&O.add(M);return O};return{cho:m("cho"),jung:m("jung"),jong:m("jong")}},[k]),tu=a.useMemo(()=>({exact:new Set(Ct.filter(m=>k.syllable.has(m))),min:[...k.syllable].some(m=>m>=oe)}),[k]),L=a.useMemo(()=>({diffPhonemeCount:n("training.contrast.diffPhonemeCount",{defaultValue:"\uB2E4\uB978 \uC74C\uC18C\uC758 \uCD1D \uAC2F\uC218"}),composition:n("wordPairs.composition","\uC815\uB2F5 \uB2E8\uC5B4 \uAD6C\uC131"),syllableCount:n("wordPairs.syllableCount","\uC74C\uC808 \uC218"),onset:n("wordPairs.onset","\uCD08\uC131"),vowel:n("wordPairs.vowel","\uBAA8\uC74C"),coda:n("wordPairs.coda","\uC885\uC131"),phonemeGroup:n("training.filter.phonemeGroup",{defaultValue:"\uD6C8\uB828 \uC74C\uC808"}),trainOnset:n("training.filter.trainOnset",{defaultValue:"\uCD08\uC131"}),trainVowel:n("training.filter.trainVowel",{defaultValue:"\uBAA8\uC74C"}),trainCoda:n("training.filter.trainCoda",{defaultValue:"\uC885\uC131"}),random:n("training.filter.random","\uBB34\uC791\uC704"),exclude:n("wordSearch.filter.exclude","\uC81C\uC678"),selectLabel:n("training.filter.selectSection",{defaultValue:"\uC120\uD0DD"}),none:n("common.none","\uC5C6\uC74C"),noImage:n("wordSearch.filter.excludeNoImage","\uC774\uBBF8\uC9C0 \uC5C6\uC74C"),excludeImage:n("training.filter.excludeImage",{defaultValue:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC"}),sameStructure:n("training.filter.sameStructure",{defaultValue:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC"}),noLimit:n("training.filter.noLimit",{defaultValue:"\uBB34\uAD00"}),codaExclude:n("training.filter.codaExclude",{defaultValue:"\uC81C\uC678"}),gradeLabel:n("training.filter.gradeLabel",{defaultValue:"\uB09C\uC774\uB3C4 \uB4F1\uAE09"})}),[n]),Ou=a.useMemo(()=>({[L.trainOnset]:"cho",[L.trainVowel]:"jung",[L.trainCoda]:"jong"}),[L]),ke=a.useCallback((m,N)=>({title:N,items:m}),[]),nu=a.useMemo(()=>[n("training.filter.excludeImageInfo",{defaultValue:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC: \uB2E8\uC5B4 \uC911\uC5D0 \uC774\uBBF8\uC9C0\uAC00 \uC788\uB294 \uB2E8\uC5B4\uB9CC \uACB0\uACFC\uC5D0 \uBCF4\uC5EC\uC90D\uB2C8\uB2E4."}),n("training.filter.sameStructureInfo",{defaultValue:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC: \uC815\uB2F5\uACFC \uC624\uB2F5\uC758 \uC74C\uC808 \uAD6C\uC870(\uAE00\uC790 \uC218\xB7\uBC1B\uCE68 \uC720\uBB34 \uB4F1)\uAC00 \uAC19\uC740 \uACB0\uACFC\uB9CC \uB0A8\uACA8\uC694."})],[n]),Dt=a.useMemo(()=>{const m=[];if(u.choseong){const N={value:ne,displayLabel:L.codaExclude},O=u.fixedNoCoda===!0,M=(U,he)=>{const me=O&&U==="jong",ve={label:he,groupLabel:L.phonemeGroup,allOption:!u.requireSyllable,allLabel:L.noLimit,allOptionDisabled:me};if(d==="pron"){const Se=pu[U].map(Lt=>Lt.map(({v:ou,tooltip:Nu})=>{const lu=ce(ou),Tu=me||!lu.some(Rt=>k[U].has(Rt));return lu.length>1?{value:ou,labels:lu,tooltip:Nu,disabled:Tu}:{value:ou,tooltip:Nu,disabled:Tu}}));return U==="jong"&&!u.requireCoda&&Se.unshift([N]),{...ve,groups:Se}}const Ve=ft[U].map(Se=>!me&&_u[U].has(Se)?Se:{value:Se,disabled:!0});return{...ve,items:U==="jong"&&!u.requireCoda?[N,...Ve]:Ve}};m.push(M("cho",L.trainOnset)),m.push(M("jung",L.trainVowel)),m.push(M("jong",L.trainCoda))}if(m.push({...at(n,x,{labelInfo:ke([n("wordPairs.filter.difficultyInfo",{defaultValue:"\uAD6D\uB9BD\uAD6D\uC5B4\uC6D0\uC758 \uAE30\uCD08 \uC5B4\uD718 \uB4F1\uAE09\uC774 \uACB0\uACFC\uC5D0 \uBC18\uC601\uB429\uB2C8\uB2E4."})])}),label:L.gradeLabel}),u.partOfSpeech&&m.push(it(x)),u.wordType&&m.push(ct(x)),u.choseong||u.fixedSyllable!=null){const N=u.fixedSyllable;m.push({label:L.syllableCount,items:[...Ct.map(O=>({value:mu(O),displayLabel:n("wordPairs.syllableN",{n:O,defaultValue:"{{n}}\uC74C\uC808"}),disabled:N!=null?O!==N:!tu.exact.has(O)||O<re})),{value:mu(oe),displayLabel:n("wordPairs.syllableNPlus",{n:oe,defaultValue:"{{n}}\uC74C\uC808 \uC774\uC0C1"}),disabled:N!=null?oe!==N:!tu.min}],allOption:!0,allOptionDisabled:N!=null})}return u.choseong?m.push({label:L.exclude,displayLabel:L.selectLabel,multiple:!0,items:[L.excludeImage,L.sameStructure],labelInfo:ke(nu)}):m.push({label:L.exclude,displayLabel:L.selectLabel,multiple:!0,items:[L.excludeImage],labelInfo:ke([nu[0]])}),m},[u.choseong,u.partOfSpeech,u.wordType,u.requireSyllable,u.fixedSyllable,u.fixedNoCoda,u.requireCoda,re,_u,k,d,tu,L,n,ke,nu,x]),_t={...u.difficulty?{[L.diffPhonemeCount]:String(c)}:{},...(u.choseong||u.fixedSyllable!=null)&&i.syllable!=null?{[L.syllableCount]:mu(i.syllable)}:{},...u.choseong&&i.cho?{[L.trainOnset]:i.cho}:{},...u.choseong&&i.jung?{[L.trainVowel]:i.jung}:{},...u.choseong&&i.jong?{[L.trainCoda]:i.jong}:{},[L.exclude]:[...h?[L.excludeImage]:[],...B?[L.sameStructure]:[]],[L.gradeLabel]:_.map(m=>n("wordSearch.filter.grade",{n:Number(m),defaultValue:"{{n}}\uB4F1\uAE09"})),...u.partOfSpeech?{[x.partOfSpeech]:I}:{},...u.wordType?{[x.wordType]:v}:{}},Ot=a.useCallback((m,N)=>{if(N===L.diffPhonemeCount){const O=Number(m);O>=1&&C(O)}else if(N===L.exclude)m===L.excludeImage?S(O=>!O):m===L.sameStructure&&A(O=>!O);else if(N===L.syllableCount)g(O=>{if(!m||m===ge)return{...O,syllable:null};const M=Co(m);return{...O,syllable:O.syllable===M?null:M}});else if(N===L.gradeLabel){if(!m||m===ge){b([]);return}const O=m.replace(/\D/g,"");b(M=>M.includes(O)?M.filter(U=>U!==O):[...M,O])}else if(N===x.partOfSpeech){if(!m||m===ge){R([]);return}R(O=>O.includes(m)?O.filter(M=>M!==m):[...O,m])}else if(N===x.wordType){if(!m||m===ge){j([]);return}j(O=>O.includes(m)?O.filter(M=>M!==m):[...O,m])}else{const O=Ou[N];if(!O)return;g(M=>u.requireSyllable?m&&m!==ge?{...M,[O]:m}:M:!m||m===ge||M[O]===m?{...M,[O]:null}:{...M,[O]:m})}},[L,Ou,x,u.requireSyllable]),Nt=a.useCallback(m=>!u.partOfSpeech&&!u.wordType?!0:ro(m,{...u.partOfSpeech?{[x.partOfSpeech]:I}:{},...u.wordType?{[x.wordType]:v}:{}},x),[u.partOfSpeech,u.wordType,I,v,x]),Tt=a.useCallback(m=>{m!==d&&(m!=="direct"&&d!=="direct"&&g(N=>St(N,m,p.current)),f(m))},[d]),jt=a.useCallback(()=>({composition:i,contrastCount:c,excludeNoImage:h,sameStructureOnly:B,phonemeView:d,gradeFilter:_}),[i,c,h,B,d,_]),It=a.useCallback(m=>{g(m.composition),C(m.contrastCount),S(m.excludeNoImage),A(m.sameStructureOnly??!0),f(m.phonemeView),b(Array.isArray(m.gradeFilter)?m.gradeFilter:[])},[]);return{difficulty:w,contrastCount:c,composition:i,choseong:i.cho,excludeNoImage:h,sameStructureOnly:B,gradeFilter:_,posFilter:I,wordTypeFilter:v,matchesWordAttributes:Nt,poolVersion:Y,filterSections:Dt,filterSelected:_t,handleFilterSelect:Ot,phonemeView:d,setPhonemeView:Tt,phonemeGroupLabel:L.phonemeGroup,wordCount:X,getFilterSnapshot:jt,restoreFilterSnapshot:It}}function So(e){const u=s=>s?ce(s):null,t=u(e.cho),n=u(e.jung),o=e.jong===ne,l=o?null:u(e.jong),r=e.syllable!=null?Su(e.syllable):null;return!t&&!n&&!l&&!o&&!r?null:{cho:t,jung:n,jong:l,jongNone:o,syllable:r}}function Eo(e,u,t,n,o,l,r=!0,s="char",c=[]){const[C,d]=a.useState({}),[f,i]=a.useState(!1),{cho:g=null,jung:E=null,jong:w=null,syllable:p=null}=n??{},h=c.length>0?c.slice().sort().join(","):"";return a.useEffect(()=>{l>0&&Jn(o).catch(()=>{})},[l,o]),a.useEffect(()=>{let S=!1;return i(!0),(async()=>{const B=So({cho:g,jung:E,jong:w,syllable:p}),A=`${g??""}_${E??""}_${w??""}_${p??""}_${h}`,_={};await Promise.all(e.map(async b=>{const I=au[b.key];try{const R=await rt(b.key,{difficulty:I.difficulty?u:null,contrastCount:I.difficulty?t:1,composition:I.choseong?B:null,count:5,excludeNoImage:o,sameStructureOnly:r,phonemeView:s,grade:c.length>0?c:null});R&&R.length>0?_[b.key]={id:`wt-${b.key}-${u}-${A}-${Date.now()}`,name:b.label,training_type:b.key,category_main_code:"WORD",iconColor:b.color,subTitle:b.subTitle,items:R,itemCount:R.length}:_[b.key]={id:`wt-${b.key}-empty`,name:b.label,training_type:b.key,category_main_code:"WORD",iconColor:b.color,subTitle:b.subTitle,items:[],itemCount:0,__empty:!0}}catch{_[b.key]=null}})),S||(d(_),i(!1))})(),()=>{S=!0}},[u,t,g,E,w,p,o,r,s,l,h]),{perTypeData:C,generating:f}}function po(){return ze(new Date)}function ze(e){if(e==null||e==="")return"";const u=e instanceof Date?e:new Date(e);return isNaN(u.getTime())?"":new Intl.DateTimeFormat("fr-CA",{timeZone:"Asia/Seoul"}).format(u)}const je=[],Ie=[],Le=[],Re=[],Je={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},Ze={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},yo={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let Bu=null,yt=null,Ce=null;function Bo({counts:e,forceRefresh:u}={}){const t=Object.assign({},yo,e||{}),n=po(),o=ze(new Date(`${n}T00:00:00+09:00`).getTime()-864e5),l=JSON.stringify(t);if(!u&&yt===n&&Bu===l&&Ce)return Object.assign(Je,Ce.today),Object.assign(Ze,Ce.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:Je,yesterday:Ze};const r={LISTEN_IN_NOISE:ae(je,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:ae(Ie,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:ae(Le,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:ae(Re,Math.max(0,Number(t.ORDERING_SENTENCE)||0))};let s=null;return Ce&&Bu===l&&Ce.yesterday&&Ce.yesterday.date===o&&(s=Ce.yesterday.selection),s||(s={LISTEN_IN_NOISE:ae(je,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:ae(Ie,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:ae(Le,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:ae(Re,Math.max(0,Number(t.ORDERING_SENTENCE)||0))}),Object.assign(Je,r),Object.assign(Ze,s),yt=n,Bu=l,Ce={today:r,yesterday:{date:o,countsKey:l,selection:s}},{today:Je,yesterday:Ze}}let Bt=!1,Me=null;async function wo(){try{const e={url:typeof document>"u"?require("url").pathToFileURL(__filename).href:ru&&ru.tagName.toUpperCase()==="SCRIPT"&&ru.src||new URL("hooks.cjs.js",document.baseURI).href}&&void 0||"/",u=await fetch(`${e}data/allTrainingData.json`);return u.ok?await u.json():null}catch{return null}}async function bo(){if(!Bt)return Me||(Me=(async()=>{const e=await wo();if(!e){Me=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{for(const u of Object.keys(e||{})){const t=e[u]||[];for(const n of t){const o=n,l=String(o.training_type||u),r=String(o.category_main_code||o.category_main||o.category_0||""),s=String(o.category_sub_code||o.category_sub||o.category_1||""),c=Object.assign({},o,{training_type:l,category_0:r,category_1:s});l==="LISTEN_IN_NOISE"?je.push(c):l==="SHORT_STORY"?Ie.push(c):l==="LONG_STORY"?Le.push(c):l==="ORDERING_SENTENCE"&&Re.push(c)}}}catch{Me=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}try{Bo()}catch{}Bt=!0})(),Me)}async function Ao(e=3e3){const u=bo();return Promise.race([u,new Promise(t=>setTimeout(t,e))])}function Do(e){let u=2166136261;for(let t=0;t<e.length;t++)u^=e.charCodeAt(t),u=Math.imul(u,16777619);return u>>>0}function _o(e){let u=e>>>0;return()=>{u|=0,u=u+1831565813|0;let t=Math.imul(u^u>>>15,1|u);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}const Qe=ae;function wu(e,u){const t=u?_o(Do(u)):Math.random;return{LISTEN_IN_NOISE:Qe(je,Math.max(0,e.LISTEN_IN_NOISE||0),t),SHORT_STORY:Qe(Ie,Math.max(0,e.SHORT_STORY||0),t),LONG_STORY:Qe(Le,Math.max(0,e.LONG_STORY||0),t),ORDERING_SENTENCE:Qe(Re,Math.max(0,e.ORDERING_SENTENCE||0),t)}}function wt(e){return e?!!(e.LISTEN_IN_NOISE?.length||e.SHORT_STORY?.length||e.LONG_STORY?.length||e.ORDERING_SENTENCE?.length):!1}const Oo={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};function bt(e=!1,u=Oo,t){const n=ze(Date.now()),o=ze(Date.now()-864e5),l=`${t??""}|${n}`,r=`${t??""}|${o}`;return je.length>0||Ie.length>0||Le.length>0||Re.length>0?{today:wu(u,l),yesterday:wu(u,r)}:{today:wu(u,l),yesterday:null}}function No(e){const u=a.useRef({LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),t=a.useRef(null),[n,o]=a.useState(!1),[l,r]=a.useState(!1),[s,c]=a.useState(0),[C,d]=a.useState(!1);a.useEffect(()=>{let i=!1,g,E=0;const w=40,p=()=>{g!==void 0&&(clearInterval(g),g=void 0)};let h=!1;try{const A=new URLSearchParams(window.location.search),_=A.get("forceRefresh")||A.get("force");h=_==="1"||_==="true"}catch{}const S=A=>{u.current=A.today,t.current=A.yesterday,o(!0),d(!0),c(_=>_+1),i=!0,p()},B=async()=>{if(i)return;if(!h){const _=bt(!1,void 0,e);if(wt(_.today)){S(_);return}}try{await Ao(3e3)}catch{}if(i)return;const A=bt(h,void 0,e);if(wt(A.today)){S(A);return}++E>=w&&(o(!0),d(!1),i=!0,p())};return B(),g=setInterval(B,250),()=>{i=!0,p()}},[e]);const f=a.useCallback(i=>{const g=l?t.current:u.current,E=l?u.current:t.current;return g?.[i]?.length?g[i]:E?.[i]?.length?E[i]:void 0},[l,s]);return{loaded:n,hasData:C,showYesterday:l,setShowYesterday:r,getTrainingPerType:f}}const Be=[];let Xe=!1;function At(e){if(e.key!=="Escape"||e.defaultPrevented)return;const u=Be[Be.length-1];u&&(e.stopPropagation(),u())}function To(e){return Be.push(e),!Xe&&typeof document<"u"&&(document.addEventListener("keydown",At),Xe=!0),()=>{const u=Be.lastIndexOf(e);u>=0&&Be.splice(u,1),Be.length===0&&Xe&&typeof document<"u"&&(document.removeEventListener("keydown",At),Xe=!1)}}function jo(e,u=!0){const t=Iu(e);a.useEffect(()=>{if(u)return To(()=>{t.current?.()})},[u,t])}const bu=(e,u)=>`${e}:${u??1}`,Au=new Map;function Io(e,u){const[t,n]=a.useState(0),o=e.map(l=>bu(l.word,l.homonum)).join("|");return a.useEffect(()=>{const l=(o?o.split("|"):[]).filter(c=>!Au.has(c));if(l.length===0)return;let r=!1;const s=Array.from(new Set(l.map(c=>c.slice(0,c.lastIndexOf(":")))));return u(s).then(c=>{if(!(r||c.length===0)){for(const C of c)C.Meaning&&Au.set(bu(C.Word,C.Homonum??void 0),C.Meaning);n(C=>C+1)}}),()=>{r=!0}},[o,u]),a.useMemo(()=>{const l=o?o.split("|"):[],r=new Map;for(const s of l){const c=Au.get(s);c!=null&&r.set(s,c)}return r},[o,t])}function Lo(){const[e,u]=a.useState(null),t=a.useCallback(l=>u(l.getBoundingClientRect()),[]),n=a.useCallback(()=>u(null),[]),o=a.useCallback(l=>{const r=l.getBoundingClientRect();u(s=>s?null:r)},[]);return{anchorRect:e,isOpen:e!=null,openAt:t,close:n,toggleAt:o}}function Ro(e){const[u,t]=a.useState(null),[n,o]=a.useState(null),l=a.useRef(null);a.useEffect(()=>()=>{l.current&&clearTimeout(l.current)},[]);const r=a.useCallback((c,C)=>{l.current&&clearTimeout(l.current),l.current=setTimeout(()=>{t(c),o(C)},e)},[e]),s=a.useCallback(()=>{l.current&&clearTimeout(l.current),t(null),o(null)},[]);return{payload:u,anchorRect:n,openAfterDelay:r,close:s}}function Mo(e,u,t){const n=Number.isFinite(u)&&u>=1?Math.floor(u):1,o=Math.max(1,Math.ceil(e.length/n)),l=Number.isFinite(t)?Math.min(Math.max(1,Math.floor(t)),o):1;return{pageItems:a.useMemo(()=>e.slice((l-1)*n,l*n),[e,l,n]),totalPages:o,curPage:l}}function xo(e="warning"){const[u,t]=a.useState(""),[n,o]=a.useState(e),[l,r]=a.useState(0),s=a.useCallback((f,i)=>{o(i),t(f),r(g=>g+1)},[]),c=a.useCallback(f=>s(f,"warning"),[s]),C=a.useCallback(f=>s(f,"normal"),[s]),d=a.useCallback(()=>t(""),[]);return{toastMessage:u,toastType:n,toastKey:l,showToast:s,showWarning:c,showNormal:C,clearToast:d}}const Po=[{key:"LISTEN_IN_NOISE",label:"\uC18C\uC74C \uD558 \uBB38\uC7A5 \uB4E3\uAE30",icon:"party-popper",desc:"\uB2E4\uC591\uD55C \uC18C\uC74C \uD658\uACBD\uC5D0\uC11C \uBB38\uC7A5 \uCCAD\uB825\uC744 \uD6C8\uB828\uD569\uB2C8\uB2E4."},{key:"SHORT_STORY",label:"\uC9E7\uC740 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square",desc:"\uC9E7\uC740 \uC774\uC57C\uAE30\uB97C \uB4E3\uACE0 \uAE30\uC5B5\uD558\uC5EC \uBB38\uC81C\uB97C \uD480\uC5B4\uBD05\uB2C8\uB2E4."},{key:"LONG_STORY",label:"\uAE34 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square-text",desc:"\uAE34 \uC774\uC57C\uAE30\uB97C \uB4E3\uACE0 \uAE30\uC5B5\uD558\uC5EC \uB2E4\uC218\uC758 \uBB38\uC81C\uB97C \uD480\uC5B4\uBD05\uB2C8\uB2E4."},{key:"ORDERING_SENTENCE",label:"\uBB38\uC7A5 \uC21C\uC11C\uD654 \uD558\uAE30",icon:"align-start-vertical",desc:"\uC5EC\uB7EC\uAC1C\uC758 \uC9E7\uC740 \uBB38\uC7A5\uC744 \uB4E3\uACE0 \uAE30\uC5B5\uD558\uC5EC \uADF8 \uC21C\uC11C\uC5D0 \uB9DE\uAC8C \uBC30\uC5F4\uD569\uB2C8\uB2E4."}],Fo={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};function ko(e){return Po.map(u=>{const t=Fo[u.key];return t?{...u,label:e(`trainingType.${t}.title`),desc:e(`trainingType.${t}.desc`)}:u})}const xe={blue:"#60A5FA",green:"#4ADE80",amber:"#FBBF24",purple:"#A78BFA",pink:"#F472B6"},Pe=xe.blue,eu=xe.green,Fe=xe.amber,uu=xe.purple,vo=xe.pink,Vo=[{key:"discrimination",label:"\uBCC0\uBCC4\uD6C8\uB828",disc:"\uB450 \uC18C\uB9AC\uAC00 \uAC19\uC740\uC9C0 \uB2E4\uB978\uC9C0, \uB610\uB294 \uD2B9\uC815 \uC18C\uB9AC\uB97C \uAD6C\uBCC4\uD558\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"ear",types:[{key:"SAME_SOUND_PICK",label:"\uAC19\uC740 \uC18C\uB9AC \uACE0\uB974\uAE30",icon:"volume-2",color:Pe,subTitle:"\uB4E4\uC740 \uC18C\uB9AC\uC640 \uAC19\uC740 \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"SAME_OR_DIFF",label:"\uAC19\uC740\uC9C0 \uB2E4\uB978\uC9C0 \uB9DE\uD788\uAE30",icon:"diff",color:Pe,subTitle:"\uB450 \uC18C\uB9AC\uAC00 \uAC19\uC740\uC9C0, \uB2E4\uB978\uC9C0 \uAD6C\uBD84\uD558\uC138\uC694."},{key:"HEAR_AND_PICK_SAME",label:"\uC77C\uCE58\uD558\uB294 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"headphones",color:Pe,subTitle:"\uB4E4\uC740 \uC18C\uB9AC\uC758 \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"HEAR_AND_PICK_INCLUDED",label:"\uD55C \uC74C\uC808 \uD3EC\uD568 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"scan-search",color:Pe,subTitle:"\uB4E4\uC740 \uC74C\uC808\uC774 \uD3EC\uD568\uB41C \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"STARTS_WITH_SAME_SOUND",label:"\uCCAB \uC74C\uC808\uC774 \uAC19\uC740 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"play-circle",color:Pe,subTitle:"\uB4E4\uC740 \uB2E8\uC5B4\uC640 \uAC19\uC740 \uC18C\uB9AC\uB85C \uC2DC\uC791\uD558\uB294 \uB2E8\uC5B4\uB97C \uACE0\uB974\uC138\uC694."}]},{key:"synthesis",label:"\uD569\uC131\uD6C8\uB828",disc:"\uB450 \uAC1C \uC774\uC0C1\uC758 \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uD569\uCCD0 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"git-merge",types:[{key:"MERGE_2_SYLLABLES",label:"\uC74C\uC808 2\uAC1C \uD569\uCE58\uAE30",icon:"link-2",color:eu,subTitle:"\uB450 \uC74C\uC808\uC744 \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_3_SYLLABLES",label:"\uC74C\uC808 3\uAC1C \uD569\uCE58\uAE30",icon:"git-merge",color:eu,subTitle:"\uC138 \uC74C\uC808\uC744 \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_2_PHONEMES",label:"\uC74C\uC18C 2\uAC1C \uD569\uCE58\uAE30",icon:"combine",color:eu,subTitle:"\uB450 \uC74C\uC18C\uB97C \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_3_PHONEMES",label:"\uC74C\uC18C 3\uAC1C \uD569\uCE58\uAE30",icon:"braces",color:eu,subTitle:"\uC138 \uC74C\uC18C\uB97C \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"}]},{key:"deletion",label:"\uD0C8\uB77D\uD6C8\uB828",disc:"\uB2E8\uC5B4\uC5D0\uC11C \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uC81C\uAC70\uD588\uC744 \uB54C \uB0A8\uB294 \uC18C\uB9AC\uB97C \uC778\uC2DD\uD558\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"scissors",types:[{key:"DROP_1_FROM_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C 1\uC74C\uC808 \uD0C8\uB77D",icon:"scissors",color:Fe,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC5D0\uC11C \uD55C \uC74C\uC808\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_1_FROM_3SYLL",label:"3\uC74C\uC808\uC5D0\uC11C 1\uC74C\uC808 \uD0C8\uB77D",icon:"minus-circle",color:Fe,subTitle:"3\uC74C\uC808 \uB2E8\uC5B4\uC5D0\uC11C \uD55C \uC74C\uC808\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_PART_FROM_COMPOUND",label:"\uD569\uC131\uC5B4\uC5D0\uC11C \uBD80\uBD84\uD0C8\uB77D",icon:"unlink",color:Fe,subTitle:"\uD569\uC131\uC5B4\uC758 \uC77C\uBD80\uB97C \uBE7C\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_FINAL_CONSONANT_FROM_1SYLL",label:"1\uC74C\uC808\uC5D0\uC11C \uBC1B\uCE68 \uD0C8\uB77D",icon:"eraser",color:Fe,subTitle:"\uBC1B\uCE68\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"REMOVE_CONSONANT_AND_IDENTIFY_PHONEME",label:"1\uC74C\uC808\uC5D0\uC11C \uC790\uC74C \uD0C8\uB77D",icon:"audio-lines",color:Fe,subTitle:"\uC790\uC74C\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB0A8\uC744\uAE4C\uC694?"}]},{key:"substitution",label:"\uB300\uCE58\uD6C8\uB828",disc:"\uB2E8\uC5B4\uC758 \uC77C\uBD80 \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uBC14\uAFB8\uC5B4 \uC0C8\uB85C\uC6B4 \uC18C\uB9AC\uB97C \uB9CC\uB4DC\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"replace",types:[{key:"CHANGE_1_SYLL_IN_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uBC14\uAFB8\uAE30",icon:"replace",color:uu,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC808\uC744 \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_SYLL_IN_3SYLL",label:"3\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uBC14\uAFB8\uAE30",icon:"shuffle",color:uu,subTitle:"3\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC808\uC744 \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_PHONEME_IN_1SYLL",label:"1\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC18C \uBC14\uAFB8\uAE30",icon:"arrow-right-left",color:uu,subTitle:"1\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC18C\uB97C \uBC14\uAFD4 \uC0C8 \uC18C\uB9AC\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_PHONEME_IN_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC18C \uBC14\uAFB8\uAE30",icon:"flip-horizontal",color:uu,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC18C\uB97C \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."}]},{key:"attention",label:"\uCCAD\uAC01\uC801\uC8FC\uC758\uB825\uD6C8\uB828",disc:"\uC5EC\uB7EC \uC18C\uB9AC\uB97C \uB4E3\uACE0 \uC21C\uC11C\uB97C \uAE30\uC5B5\uD558\uB294 \uC8FC\uC758\uB825\uACFC \uB2E8\uAE30 \uAE30\uC5B5 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"list-ordered",types:[{key:"LISTEN_AND_REMEMBER_ORDER",label:"\uB4E3\uACE0 \uC21C\uC11C\uB300\uB85C \uAE30\uC5B5\uD558\uAE30",icon:"list-ordered",color:vo,subTitle:"\uC138 \uB2E8\uC5B4\uB97C \uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCE74\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694."}]}];function Go(){const{t:e}=Ee.useTranslation();return a.useMemo(()=>{const u=Object.fromEntries(ko(e).map(n=>[n.key,n.label])),t={...u};return Vo.flatMap(n=>n.types).forEach(n=>{t[n.key]=e(`trainingType.${n.key}.label`,{defaultValue:n.label})}),{sentence:u,all:t}},[e])}const Yo="0.69.0";function $o({computeStyle:e,onScroll:u="close",onResize:t="close",ignoreOutsideClickSelector:n}){const[o,l]=a.useState(!1),[r,s]=a.useState({}),c=a.useRef(null),C=a.useRef(null),d=a.useCallback(()=>{c.current&&s(e(c.current.getBoundingClientRect()))},[e]);a.useEffect(()=>{if(!o)return;d();const g=h=>{const S=h.target;n&&S.closest?.(n)||c.current?.contains(S)||C.current?.contains(S)||l(!1)};document.addEventListener("mousedown",g);const E=h=>{C.current?.contains(h.target)||(u==="reposition"?d():u==="close"&&l(!1))};u!=="ignore"&&window.addEventListener("scroll",E,!0);const w=()=>{t==="reposition"?d():t==="close"&&l(!1)};t!=="ignore"&&window.addEventListener("resize",w);const p=h=>{h.key==="Escape"&&l(!1)};return document.addEventListener("keydown",p),()=>{document.removeEventListener("mousedown",g),u!=="ignore"&&window.removeEventListener("scroll",E,!0),t!=="ignore"&&window.removeEventListener("resize",w),document.removeEventListener("keydown",p)}},[o,d,u,t,n]);const f=a.useCallback(()=>l(g=>!g),[]),i=a.useCallback(()=>l(!1),[]);return{open:o,setOpen:l,toggle:f,close:i,style:r,triggerRef:c,menuRef:C}}function Ho(e,{mode:u="playback",autoStart:t=!1,onPlaySpeaker:n,onComplete:o,playMs:l=1100,feedbackMs:r=1500}={}){const[s,c]=a.useState([]),[C,d]=a.useState(0),[f,i]=a.useState("idle"),[g,E]=a.useState(null),[w,p]=a.useState([]),[h,S]=a.useState(null),[B,A]=a.useState(0),_=a.useRef(0),b=a.useCallback(y=>{_.current=typeof y=="function"?y(_.current):y,A(_.current)},[]),I=a.useRef(n),R=a.useRef(o);a.useEffect(()=>{I.current=n,R.current=o},[n,o]);const v=a.useRef([]),j=()=>{v.current.forEach(clearTimeout),v.current=[]},G=(y,D)=>{v.current.push(setTimeout(D,y))};a.useEffect(()=>()=>j(),[]);const x=s[C]?.id??null,k=a.useCallback(()=>{j(),i("playing"),p([]),S(null),b(0);let y=0;e.forEach((D,H)=>{G(y,()=>{d(H),E(D.id),I.current?.(D)}),G(y+1e3,()=>{E(null),p(Y=>[...Y,D.id])}),y+=1300}),G(y,()=>{i("done"),R.current?.({score:0,total:e.length})})},[e,b]),T=a.useCallback((y,D)=>{if(D>=y.length){i("done"),R.current?.({score:_.current,total:y.length});return}d(D),S(null),i("playing"),E(y[D].id),I.current?.(y[D]),G(l,()=>{E(null),i("waiting")})},[l]),P=a.useCallback(()=>{j();const y=F(e);c(y),b(0),p([]),T(y,0)},[e,T,b]),$=a.useCallback(()=>{u==="playback"?(c(e),k()):P()},[u,e,k,P]),X=a.useCallback(()=>{j(),i("idle"),E(null),p([]),S(null),d(0),b(0),c([])},[b]);a.useEffect(()=>{t?$():X()},[u,e.length,t]);const le=a.useCallback(y=>{f!=="waiting"||u==="playback"||(S(y),y===s[C]?.id&&b(D=>D+1),u==="exam"?(i("playing"),G(400,()=>T(s,C+1))):(i("feedback"),G(r,()=>T(s,C+1))))},[f,u,s,C,T,r,b]),re=u==="playback"?e.length:s.length;return{bind:{activeSpeakerId:g,playedIds:w,selectedId:h,answerId:x,showFeedback:f==="feedback",clickable:f==="waiting",onSelectSpeaker:le},index:C,total:re,score:B,phase:f,done:f==="done",start:$,reset:X}}exports.CACHE_GROUPS=Vu,exports.CORE_VERSION=Yo,exports.DocumentTitleSuppressContext=Mu,exports.EMPTY_COMPOSITION=yu,exports.MediaQueryOverrideContext=ju,exports.NO_CODA=ne,exports.SYLLABLE_MIN=oe,exports.VAP_PAGE_SIZE_OPTIONS=Hu,exports.buildGradeSection=at,exports.buildPartOfSpeechSection=it,exports.buildPositionSection=uo,exports.buildSelectSection=eo,exports.buildSyllableSection=Xn,exports.buildWordTypeSection=ct,exports.charToPronValue=ht,exports.convertComposition=St,exports.fmtBytes=en,exports.lsBytes=Gu,exports.meaningKey=bu,exports.pronToCharValue=mt,exports.syllableToFilter=Su,exports.today=De,exports.toggleAttributeFilter=to,exports.useAnchoredMenu=$o,exports.useCacheManagement=un,exports.useDailyTrainingSelection=No,exports.useDelayedHoverAnchor=Ro,exports.useDeviceManagement=Cn,exports.useDocumentTitle=Ft,exports.useEscToClose=jo,exports.useFontScale=Mt,exports.useHoverAnchor=Lo,exports.useMediaQuery=Pt,exports.usePagedList=Mo,exports.usePasswordChange=vt,exports.useRelativeDay=kt,exports.useSoundCompassExam=Ho,exports.useTablePaging=an,exports.useTableSort=cn,exports.useToastState=xo,exports.useTrainingTypeLabels=Go,exports.useVisitAllPanel=sn,exports.useVisitHistory=on,exports.useVisitSchedule=rn,exports.useWindowEvent=Lu,exports.useWordAttributeFilterKeys=st,exports.useWordDataStats=tn,exports.useWordMeanings=Io,exports.useWordTrainingDataGeneration=Eo,exports.useWordTrainingFilter=mo,exports.valueToJamos=ce;
|
|
1
|
+
"use strict";var a=require("react"),Ee=require("react-i18next"),ru=typeof document<"u"?document.currentScript:null;function Mt({storageKey:e="fontScale",baseFont:u=20,minScale:t=.8,maxScale:n=1.4,step:o=.1,lineHeightRatio:l=1.4}={}){const r=p=>Math.max(t,Math.min(n,Number(p))),[s,c]=a.useState(()=>{try{const p=localStorage.getItem(e),h=p?Number(p):1;return Number.isFinite(h)?h:1}catch{return 1}});a.useEffect(()=>{try{localStorage.setItem(e,String(s))}catch{}},[e,s]);const C=p=>{c(typeof p=="function"?h=>r(p(h)):r(p))},d=()=>C(p=>+(p+o).toFixed(6)),f=()=>C(p=>+(p-o).toFixed(6)),i=s<n-Number.EPSILON,g=s>t+Number.EPSILON,E=Math.round(u*s),w=Math.round(E*l);return{scale:s,setScale:C,increase:d,decrease:f,canIncrease:i,canDecrease:g,fontSize:E,lineHeight:w}}const ju=a.createContext(null);function xt(e){return/max-width:\s*7[0-9][0-9]px/.test(e)}function Pt(e){const u=a.useContext(ju),t=l=>typeof window>"u"||!window.matchMedia?!1:window.matchMedia(l).matches,[n,o]=a.useState(t(e));return a.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;const l=window.matchMedia(e),r=c=>o(c.matches),s=l;return s.addEventListener?s.addEventListener("change",r):s.addListener&&s.addListener(r),o(l.matches),()=>{s.removeEventListener?s.removeEventListener("change",r):s.removeListener&&s.removeListener(r)}},[e]),u&&typeof u.mobile=="boolean"&&xt(e)?u.mobile:n}function Iu(e){const u=a.useRef(e);return a.useEffect(()=>{u.current=e}),u}function Lu(e,u){const t=Iu(u);a.useEffect(()=>{const n=()=>t.current();try{window.addEventListener(e,n)}catch{}return()=>{try{window.removeEventListener(e,n)}catch{}}},[e,t])}const su=" \xB7 ",Ru=(()=>{if(typeof document>"u")return"";const e=document.title;return e.includes(su)?e.split(su).pop()??e:e})(),Mu=a.createContext(!1);function Ft(e){const u=a.useContext(Mu);a.useEffect(()=>{if(u||typeof e!="string"||!e)return;const t=document.title;return document.title=Ru?`${e}${su}${Ru}`:e,()=>{document.title=t}},[e,u])}function kt(){const{t:e}=Ee.useTranslation();return a.useCallback(u=>{if(!u)return"";const t=new Date(u).getTime();if(Number.isNaN(t))return"";const n=Math.floor((Date.now()-t)/864e5);return n<=0?e("myHomework.relativeDay.today","\uC624\uB298"):n===1?e("myHomework.relativeDay.yesterday","\uC5B4\uC81C"):e("myHomework.relativeDay.daysAgo",{n})},[e])}function vt(e){const[u,t]=a.useState({current:"",next:"",confirm:""}),[n,o]=a.useState(null),[l,r]=a.useState(!1),s=a.useRef(null);a.useEffect(()=>()=>{s.current!==null&&clearTimeout(s.current)},[]);const c=a.useCallback(()=>{t({current:"",next:"",confirm:""}),o(null)},[]),C=a.useCallback(async()=>{if(!u.current){o({type:"error",text:"\uD604\uC7AC \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694."});return}if(!u.next){o({type:"error",text:"\uC0C8 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694."});return}if(u.next!==u.confirm){o({type:"error",text:"\uC0C8 \uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."});return}r(!0);const d=e?await e(u.current,u.next):null;if(r(!1),d){o({type:"error",text:d});return}o({type:"success",text:"\uBE44\uBC00\uBC88\uD638\uAC00 \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4."}),t({current:"",next:"",confirm:""}),s.current!==null&&clearTimeout(s.current),s.current=setTimeout(()=>o(null),1500)},[u,e]);return{pw:u,setPw:t,pwMsg:n,setPwMsg:o,pwLoading:l,handleChangePw:C,reset:c}}const q=["\u3131","\u3132","\u3134","\u3137","\u3138","\u3139","\u3141","\u3142","\u3143","\u3145","\u3146","\u3147","\u3148","\u3149","\u314A","\u314B","\u314C","\u314D","\u314E"],se=["\u314F","\u3150","\u3151","\u3152","\u3153","\u3154","\u3155","\u3156","\u3157","\u3158","\u3159","\u315A","\u315B","\u315C","\u315D","\u315E","\u315F","\u3160","\u3161","\u3162","\u3163"],Q=["","\u3131","\u3132","\u3133","\u3134","\u3135","\u3136","\u3137","\u3139","\u313A","\u313B","\u313C","\u313D","\u313E","\u313F","\u3140","\u3141","\u3142","\u3144","\u3145","\u3146","\u3147","\u3148","\u314A","\u314B","\u314C","\u314D","\u314E"];function V(e){if(!e)return null;const u=e.charCodeAt(0)-44032;return u<0||u>=11172?null:{cho:Math.floor(u/588),jung:Math.floor(u%588/28),jong:u%28}}function Vt(){const e=new Map;return u=>{let t=e.get(u);return t||(t=[...u].map(n=>V(n)),e.set(u,t)),t}}function de(e,u,t=0){return String.fromCharCode(44032+(e*21+u)*28+t)}function Gt(e,u){if(!e||!u||e===u||e.length!==u.length)return"random";let t=0,n=null;for(let o=0;o<e.length;o++){const l=V(e[o]),r=V(u[o]);if(!l||!r)return"random";if(l.cho===r.cho&&l.jung===r.jung&&l.jong===r.jong)continue;t++;const s=l.cho!==r.cho,c=l.jung!==r.jung,C=l.jong!==r.jong;(s?1:0)+(c?1:0)+(C?1:0)>1?n="multi":s?n="cho":c?n="jung":n="jong"}return t!==1?"random":n==="cho"?"cho":n==="jung"?"jung":n==="jong"?"jong":"random"}const we={3:["\u3131","\u3145"],5:["\u3134","\u3148"],6:["\u3134","\u314E"],9:["\u3139","\u3131"],10:["\u3139","\u3141"],11:["\u3139","\u3142"],12:["\u3139","\u3145"],13:["\u3139","\u314C"],14:["\u3139","\u314D"],15:["\u3139","\u314E"],18:["\u3142","\u3145"]};Object.fromEntries(Object.entries(we).map(([e,u])=>[u.join(""),Q[Number(e)]]));function Yt(e,u){if(!e||!u)return!1;for(const t of e){const n=V(t);if(n){if(q[n.cho]===u)return!0;if(n.jong>0){if(Q[n.jong]===u)return!0;const o=we[n.jong];if(o&&o.includes(u))return!0}}}return!1}function Ge(e){if(!e)return 0;let u=0;for(const t of e)V(t)&&u++;return u}function $t(e){if(!e)return!1;let u=!1;for(const t of e){const n=V(t);if(n&&(u=!0,n.jong>0))return!1}return u}function Ht(e,u){if(e.jong<=0)return!1;if(u.includes(Q[e.jong]))return!0;const t=we[e.jong];return!!t&&t.some(n=>u.includes(n))}function Ut(e,u,t){if(!e)return!1;const n=[...e],o=l=>{const r=V(n[l]);if(!r||u.cho&&!u.cho.includes(q[r.cho])||u.jung&&!u.jung.includes(se[r.jung]))return!1;if(u.jongNone){if(r.jong>0)return!1}else if(u.jong&&!Ht(r,u.jong))return!1;return!0};if(t==="head")return o(0);if(t==="tail")return o(n.length-1);if(t==="mid"){for(let l=1;l<n.length-1;l++)if(o(l))return!0;return!1}for(let l=0;l<n.length;l++)if(o(l))return!0;return!1}const Kt={cho:q.length,jung:se.length,jong:Q.length};function Wt(e,u,t,n,o=1/0){if(!e||t<1)return[];const l=[...e].map(f=>V(f));if(l.some(f=>!f))return[];const r=l,s=r.length;if(t>s)return[];const c=Kt[u],C=new Set,d=[];(function f(i,g){if(g.length===t){d.push([...g]);return}for(let E=i;E<s;E++)g.push(E),f(E+1,g),g.pop()})(0,[]);for(const f of d)if((function i(g,E){if(C.size>=o)return;if(g===f.length){const h=E.map(S=>de(S.cho,S.jung,S.jong)).join("");h!==e&&n.has(h)&&C.add(h);return}const w=f[g],p=r[w][u];for(let h=0;h<c;h++){if(h===p)continue;const S=E.slice();if(S[w]={...E[w],[u]:h},i(g+1,S),C.size>=o)return}})(0,r),C.size>=o)break;return[...C]}function qt(e,u){if(!e||!u||e.length!==u.length)return-1;let t=0;for(let n=0;n<e.length;n++){const o=V(e[n]),l=V(u[n]);if(!o||!l)return-1;o.cho!==l.cho&&t++,o.jung!==l.jung&&t++,o.jong!==l.jong&&t++}return t}const xu="word_pair_index_v2",Pu="word_pair_index_sig_v2";let be=null;function zt(){try{if(typeof localStorage>"u")return null;const e=localStorage.getItem(xu),u=localStorage.getItem(Pu);return!e||!u?null:{index:JSON.parse(e),sig:u}}catch{return null}}function Ae(){if(be)return be;const e=zt();return e?(be=e.index,e.sig,be):null}function Jt(){be=null;try{typeof localStorage<"u"&&(localStorage.removeItem(xu),localStorage.removeItem(Pu))}catch{}}const Fu="word_image_existence_map_v1";let pe=null;function ku(){if(pe)return pe;try{const e=typeof localStorage<"u"?localStorage.getItem(Fu):null;pe=e?JSON.parse(e):{}}catch{pe={}}return pe}function Zt(e,u){return`${e}_${u??1}`}function Qt(e,u){const t=ku(),n=Zt(e,u);return n in t?t[n]:void 0}function vu(){const e=ku(),u=Object.values(e);return u.length===0?null:{total:u.length,exists:u.filter(Boolean).length}}function Xt(){pe={};try{typeof localStorage<"u"&&localStorage.removeItem(Fu)}catch{}}const Vu=[{id:"wordData",labelKey:"settings.cache.group.wordData.label",subKey:"settings.cache.group.wordData.sub",keys:["word_data_cache","word_data_version"]},{id:"pairIndex",labelKey:"settings.cache.group.pairIndex.label",subKey:"settings.cache.group.pairIndex.sub",keys:["word_pair_index_v2","word_pair_index_sig_v2"]},{id:"imageCache",labelKey:"settings.cache.group.imageCache.label",subKey:"settings.cache.group.imageCache.sub",keys:["word_image_existence_map_v1"]}];function Gu(e){return e.reduce((u,t)=>{try{const n=localStorage.getItem(t);return u+(n?new Blob([n]).size:0)}catch{return u}},0)}function en(e){return e===0?"0 B":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(2)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function un(e){const{t:u}=Ee.useTranslation(),[t,n]=a.useState({}),[o,l]=a.useState(null),[r,s]=a.useState(null),[c,C]=a.useState(null),d=a.useCallback(()=>{const i={};Vu.forEach(g=>{i[g.id]=Gu([...g.keys])}),n(i),typeof navigator<"u"&&navigator.storage?.estimate&&navigator.storage.estimate().then(g=>{C({usage:g.usage??0,quota:g.quota??0})}).catch(()=>{})},[]);a.useEffect(()=>{d()},[d]);const f=a.useCallback(async i=>{l(i);try{i==="wordData"?(localStorage.removeItem("word_data_cache"),localStorage.removeItem("word_data_version")):i==="pairIndex"?Jt():i==="imageCache"&&Xt(),d(),e?.(u("settings.cache.cleared","\uCE90\uC2DC\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4."))}finally{l(null)}},[d,e,u]);return{cacheSizes:t,clearingId:o,confirmCacheId:r,setConfirmCacheId:s,storageEstimate:c,refreshCacheSizes:d,handleClearCache:f}}function tn(e){const[u,t]=a.useState(null),[n,o]=a.useState(null),l=a.useCallback(()=>{const r=Ae();if(r){const c=Object.values(r),C=c.filter(d=>d.cho.length+d.jung.length+d.jong.length>0).length;t({matched:C,total:c.length})}else t(null);const s=vu();o(s?{exists:s.exists,total:s.total}:null)},[]);return a.useEffect(()=>{l();const r=setTimeout(l,1e3);return()=>clearTimeout(r)},[e?.length,l]),{pairStats:u,imgStats:n,setPairStats:t,setImgStats:o,refreshStats:l}}function Yu(e,u=[]){const[t,n]=a.useState(u),[o,l]=a.useState(null),[r,s]=a.useState(!1),[c,C]=a.useState(e),d=a.useRef(r);a.useEffect(()=>{d.current=r});const f=a.useRef(null);a.useEffect(()=>{if(d.current)return;const h=f.current;h!==null&&h.length===u.length&&h.every((S,B)=>S===u[B])||(f.current=u,n(u))},[u]);const i=a.useCallback(h=>{l(h),s(!1),C({...h})},[]),g=a.useCallback(()=>s(!0),[]),E=a.useCallback(()=>s(!1),[]),w=a.useCallback((h,S)=>{n(h),l(S),s(!1)},[]),p=a.useCallback(h=>{n(S=>S.filter(B=>B!==h)),l(null)},[]);return{list:t,setList:n,selected:o,setSelected:l,isEditing:r,setIsEditing:s,editForm:c,setEditForm:C,openDetail:i,startEditing:g,cancelEditing:E,commitEdit:w,remove:p}}const De=()=>{const e=new Date;return{year:String(e.getFullYear()),month:String(e.getMonth()+1).padStart(2,"0"),day:String(e.getDate()).padStart(2,"0")}},nn={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function on(e=[]){const{list:u,setList:t,selected:n,setSelected:o,isEditing:l,setIsEditing:r,editForm:s,setEditForm:c,openDetail:C,commitEdit:d}=Yu(nn,e),{year:f,month:i,day:g}=De(),[E,w]=a.useState({year:f,month:i,day:g,hour:"09",minute:"00",memo:""});return{visitHistory:u,visitForm:E,setVisitForm:w,setVisit:p=>h=>w(S=>({...S,[p]:h})),selectedVisit:n,setSelectedVisit:o,isEditingVisit:l,setIsEditingVisit:r,editVisitForm:s,setEditVisitForm:c,openVisitDetail:C,handleVisitSave:p=>{t(A=>[E,...A]);const{year:h,month:S,day:B}=De();w({year:h,month:S,day:B,hour:"09",minute:"00",memo:""}),p?.()},handleVisitEditSave:()=>{d(p=>p.map(h=>h===n?s:h),s)},addVisit:p=>{t(h=>[p,...h])},removeVisit:p=>{t(h=>h.filter(S=>S!==p))},revertVisitEdit:(p,h)=>{t(S=>S.map(B=>B===h?p:B)),o(S=>S===h?p:S)}}}const $u=e=>`${e.year.padStart(4,"0")}-${e.month.padStart(2,"0")}-${e.day.padStart(2,"0")} ${e.hour.padStart(2,"0")}:${e.minute.padStart(2,"0")}`,Ye=e=>[...e].sort((u,t)=>{const n=$u(u),o=$u(t);return n<o?-1:n>o?1:0}),ln={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function rn(e,u=[]){const t=a.useMemo(()=>Ye(u),[u]),{list:n,setList:o,selected:l,setSelected:r,isEditing:s,setIsEditing:c,editForm:C,setEditForm:d,openDetail:f,commitEdit:i,remove:g}=Yu(ln,t),[E,w]=a.useState([]),{year:p,month:h,day:S}=De(),[B,A]=a.useState({year:p,month:h,day:S,hour:"09",minute:"00",memo:""}),_=T=>P=>A($=>({...$,[T]:P})),b=T=>{o(le=>Ye([...le,B]));const{year:P,month:$,day:X}=De();A({year:P,month:$,day:X,hour:"09",minute:"00",memo:""}),T?.()},I=()=>{i(T=>Ye(T.map(P=>P===l?C:P)),C)},R=a.useCallback(T=>{g(T)},[g]),v=a.useCallback(T=>{e({year:T.year,month:T.month,day:T.day,hour:T.hour,minute:T.minute,memo:T.memo}),g(T)},[e,g]),j=a.useCallback(T=>{o(P=>P.filter($=>$!==T)),w(P=>[T,...P]),r(null)},[o,r]),G=a.useCallback(T=>{o(P=>Ye([...P,T]))},[o]),x=a.useCallback(T=>{o(P=>P.filter($=>$!==T))},[o]),k=a.useCallback((T,P)=>{o($=>$.map(X=>X===P?T:X)),r($=>$===P?T:$)},[o,r]);return{scheduleList:n,noShowList:E,addSchedule:G,removeSchedule:x,revertScheduleEdit:k,scheduleForm:B,setScheduleForm:A,setSchedule:_,selectedSchedule:l,setSelectedSchedule:r,isEditingSchedule:s,setIsEditingSchedule:c,editScheduleForm:C,setEditScheduleForm:d,openScheduleDetail:f,handleScheduleSave:b,handleScheduleEditSave:I,handleScheduleDelete:R,handleScheduleToVisit:v,handleScheduleNoVisit:j}}const Hu=[{value:"10",label:"10\uAC1C\uC529 \uBCF4\uAE30"},{value:"25",label:"25\uAC1C\uC529 \uBCF4\uAE30"},{value:"50",label:"50\uAC1C\uC529 \uBCF4\uAE30"},{value:"100",label:"100\uAC1C\uC529 \uBCF4\uAE30"}];function sn(e){const[u,t]=a.useState(""),[n,o]=a.useState("25"),[l,r]=a.useState("all"),[s,c]=a.useState(1),C=a.useMemo(()=>e.filter(({item:g,status:E})=>!(u&&!g.memo.includes(u)||l!=="all"&&E!==l)),[e,u,l]),d=Math.max(1,Math.ceil(C.length/Number(n))),f=Math.min(s,d),i=a.useMemo(()=>C.slice((f-1)*Number(n),f*Number(n)),[C,f,n]);return{vapSearch:u,setVapSearch:t,vapPageSize:n,setVapPageSize:o,vapStatus:l,setVapStatus:r,vapPage:f,setVapPage:c,vapFiltered:C,vapTotal:d,vapPageItems:i}}function an(e,u){const{t}=Ee.useTranslation(),[n,o]=a.useState("25"),[l,r]=a.useState(1),[s,c]=a.useState(u);s!==u&&(c(u),l!==1&&r(1));const C=a.useMemo(()=>Hu.map(g=>({...g,label:t("visits.showN",{n:g.value})})),[t]),d=a.useCallback(g=>{o(g),r(1)},[]),f=Math.max(1,Math.ceil(e.length/Number(n))),i=Math.min(l,f);return{pageRows:a.useMemo(()=>e.slice((i-1)*Number(n),i*Number(n)),[e,i,n]),pageSizeProps:{options:C,value:n,onChange:d},paginationProps:{page:i,total:f,onChange:r},setPage:r}}function cn(){const[e,u]=a.useState(null),t=a.useCallback(o=>{u(l=>l?.key===o?{key:o,asc:!l.asc}:{key:o,asc:!0})},[]),n=a.useCallback((o,l)=>({label:o,sortDir:e?.key===l?e.asc?"asc":"desc":null,onClick:()=>t(l)}),[e,t]);return{\uC815\uB82C:e,\uCE78:n}}function Cn(){const[e,u]=a.useState(!1),[t,n]=a.useState("\uC88C"),[o,l]=a.useState({\uC88C:null,\uC6B0:null}),[r,s]=a.useState({\uC88C:[],\uC6B0:[]}),[c,C]=a.useState(!1),[d,f]=a.useState("\uC88C"),i=a.useCallback(E=>{const w=E.direction;l(p=>({...p,[w]:E})),s(p=>({...p,[w]:[E,...p[w]]})),u(!1)},[]),g=a.useCallback(E=>{const w=E.direction;l(p=>({...p,[w]:E})),C(!1)},[]);return{showDevice:e,setShowDevice:u,deviceDirection:t,setDeviceDirection:n,devices:o,setDevices:l,deviceHistory:r,setDeviceHistory:s,showDeviceList:c,setShowDeviceList:C,listForSide:d,setListForSide:f,handleDeviceSubmit:i,handleSelectFromList:g}}const dn="__ihab_core_word_pool__";function $e(){return globalThis[dn]??null}function F(e,u=Math.random){const t=e.slice();for(let n=t.length-1;n>0;n--){const o=Math.floor(u()*(n+1));[t[n],t[o]]=[t[o],t[n]]}return t}function ae(e,u,t=Math.random){return!Array.isArray(e)||e.length===0||u<=0?[]:u>=e.length?F(e,t):F(e,t).slice(0,u)}const au={SAME_SOUND_PICK:{difficulty:!0,choseong:!0,group:"discrimination"},SAME_OR_DIFF:{difficulty:!0,choseong:!0,group:"discrimination"},HEAR_AND_PICK_SAME:{difficulty:!0,choseong:!0,group:"discrimination"},HEAR_AND_PICK_INCLUDED:{difficulty:!0,choseong:!0,group:"discrimination"},STARTS_WITH_SAME_SOUND:{difficulty:!1,choseong:!0,group:"discrimination"},LISTEN_AND_REMEMBER_ORDER:{difficulty:!1,choseong:!0,group:"attention"},MERGE_2_SYLLABLES:{difficulty:!1,choseong:!0,group:"synthesis"},MERGE_3_SYLLABLES:{difficulty:!1,choseong:!0,group:"synthesis"},MERGE_2_PHONEMES:{difficulty:!1,choseong:!0,group:"synthesis"},MERGE_3_PHONEMES:{difficulty:!1,choseong:!0,group:"synthesis"},DROP_1_FROM_2SYLL:{difficulty:!1,choseong:!0,group:"deletion"},DROP_1_FROM_3SYLL:{difficulty:!1,choseong:!0,group:"deletion"},DROP_PART_FROM_COMPOUND:{difficulty:!1,choseong:!0,group:"deletion"},DROP_FINAL_CONSONANT_FROM_1SYLL:{difficulty:!1,choseong:!0,group:"deletion"},REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:{difficulty:!1,choseong:!0,group:"deletion"},CHANGE_1_SYLL_IN_2SYLL:{difficulty:!0,choseong:!0,group:"substitution"},CHANGE_1_SYLL_IN_3SYLL:{difficulty:!0,choseong:!0,group:"substitution"},CHANGE_1_PHONEME_IN_1SYLL:{difficulty:!1,choseong:!0,group:"substitution"},CHANGE_1_PHONEME_IN_2SYLL:{difficulty:!0,choseong:!0,group:"substitution"}},fn=q.indexOf("\u3147"),Uu={DROP_FINAL_CONSONANT_FROM_1SYLL:{syllables:1,syllable:e=>e.jong>0},REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:{syllables:1,syllable:e=>e.jong===0&&e.cho!==fn},MERGE_2_SYLLABLES:{syllables:2,syllable:()=>!0},MERGE_3_SYLLABLES:{syllables:3,syllable:()=>!0},MERGE_2_PHONEMES:{syllables:1,syllable:e=>e.jong===0},MERGE_3_PHONEMES:{syllables:1,syllable:e=>e.jong>0}},gn={\u3131:"\u3131",\u3132:"\u3131",\u314B:"\u3131",\u3133:"\u3131",\u313A:"\u3131",\u3134:"\u3134",\u3135:"\u3134",\u3136:"\u3134",\u3137:"\u3137",\u3145:"\u3137",\u3146:"\u3137",\u3148:"\u3137",\u314A:"\u3137",\u314C:"\u3137",\u314E:"\u3137",\u3139:"\u3139",\u313C:"\u3139",\u313D:"\u3139",\u313E:"\u3139",\u3140:"\u3139",\u3141:"\u3141",\u313B:"\u3141",\u3142:"\u3142",\u314D:"\u3142",\u313F:"\u3142",\u3144:"\u3142",\u3147:"\u3147"},hn={\u314F:{nucleus:"\u314F"},\u3151:{glide:"j",nucleus:"\u314F"},\u3153:{nucleus:"\u3153"},\u3155:{glide:"j",nucleus:"\u3153"},\u3157:{nucleus:"\u3157"},\u315B:{glide:"j",nucleus:"\u3157"},\u315C:{nucleus:"\u315C"},\u3160:{glide:"j",nucleus:"\u315C"},\u3161:{nucleus:"\u3161"},\u3163:{nucleus:"\u3163"},\u3150:{nucleus:"\u3154/\u3150"},\u3152:{glide:"j",nucleus:"\u3154/\u3150"},\u3154:{nucleus:"\u3154/\u3150"},\u3156:{glide:"j",nucleus:"\u3154/\u3150"},\u3158:{glide:"w",nucleus:"\u314F"},\u3159:{glide:"w",nucleus:"\u3154/\u3150"},\u315A:{glide:"w",nucleus:"\u3154/\u3150"},\u315D:{glide:"w",nucleus:"\u3153"},\u315E:{glide:"w",nucleus:"\u3154/\u3150"},\u315F:{glide:"w",nucleus:"\u3163"},\u3162:{glide:"\u0270",nucleus:"\u3163"}};function Ku(e){return gn[e]??e}const iu={cho:q,jung:se,jong:Q},K=e=>Array.isArray(e)?e.length>0:!!e;function cu(e,u){if(e.length!==u.length)return!1;for(let t=0;t<e.length;t++){const n=e[t],o=u[t];if(!(!n||!o)&&(n.cho!==o.cho&&q[n.cho]==="\u3147"!=(q[o.cho]==="\u3147")||n.jong!==o.jong&&n.jong===0!=(o.jong===0)))return!0}return!1}function mn(e,u,t){const n=t.pronOf(e),o=t.decompOf,l=t.sameStructureOnly&&o?o(n):null,r=[];for(const s of u)s!==e&&(t.okSet&&!t.okSet.has(s)||t.pronOf(s)!==n&&(l&&o&&cu(l,o(t.pronOf(s)))||r.push(s)));return r}function Wu(e,u,t){const n=u?.[e];if(!n)return[];const o=t.kind?n[t.kind]??[]:[...n.cho??[],...n.jung??[],...n.jong??[]];return mn(e,o,t)}function Sn(e,u,t,n,o,l,r){const s=["cho","jung","jong"].filter(i=>K(e[i])),c={};for(const i of s){const g=e[i];c[i]=new Set(Array.isArray(g)?g:[g])}const C=o==="pron",d=new Map;for(const i of u){const g=t(l(i));if(g.some(h=>!h))continue;let E=g;if(!C&&(E=t(i),E.length!==g.length||E.some(h=>!h)))continue;const w=g.length,p=d.get(w);p?p.push({w:i,dPron:g,dPos:E}):d.set(w,[{w:i,dPron:g,dPos:E}])}const f=new Map;for(const[i,g]of d){const E=new Map,w=(p,h)=>{const S=p.dPos[h];return S!=null&&s.every(B=>c[B].has(iu[B][S[B]]))};for(const p of g){let h;if(r==="head")h=w(p,0)?0:-1;else if(r==="tail")h=w(p,i-1)?i-1:-1;else if(r==="mid"){h=-1;for(let B=1;B<i-1;B++)if(w(p,B)){h=B;break}}else h=p.dPos.findIndex(B=>B!=null&&s.every(A=>c[A].has(iu[A][B[A]])));if(h<0)continue;const S=E.get(h);S?S.push(p):E.set(h,[p])}for(const[p,h]of E){const S=new Set(s.map(_=>p+":"+_)),B=_=>{let b="";for(let I=0;I<i;I++){const R=_[I];for(const v of["cho","jung","jong"])b+=(S.has(I+":"+v)?"*":R[v])+"."}return b},A=new Map;for(const _ of g){const b=B(_.dPron),I=A.get(b);I?I.push(_):A.set(b,[_])}for(const _ of h){const b=A.get(B(_.dPron))??[],I=[];for(const R of b){if(R.w===_.w)continue;let v=!0;for(const j of s){const G=_.dPron[p][j],x=R.dPron[p][j];if(x===G){v=!1;break}if(C&&c[j].has(iu[j][x])){v=!1;break}}v&&(n&&cu(_.dPron,R.dPron)||I.push(R.w))}f.set(_.w,I)}}}return f}const En=e=>e==null?[]:Array.isArray(e)?e:[e];function pn(e){if([...e].length!==1)return"";const u=V(e);if(!u)return"";const t=Ku(Q[u.jong]),n=t===""?0:Q.indexOf(t);return de(u.cho,u.jung,n<0?0:n)}function qu(e,u){return u.get(e)||pn(e)||e}function Cu(e){return e?K(e.cho)?"cho":K(e.jung)?"jung":K(e.jong)?"jong":null:null}function ye(e,u){const t=(n,o)=>!K(n)||En(n).includes(o);return t(u.cho,q[e.cho])&&t(u.jung,se[e.jung])&&t(u.jong,Q[e.jong])}function _e(e,u,t){const n=[...e];if(t!=="pron")return n.map(l=>V(l));const o=[...u.get(e)||e];return o.length!==n.length?n.map(l=>V(l)):o.map(l=>V(l))}function Oe(e,u,t,n,o){const l=u==="cho"?q:u==="jung"?se:Q,r=e[u],s=[],c=new Set([qu(t,o)]),C=F(l.map((d,f)=>f).filter(d=>d!==r&&(u!=="cho"||l[d]!=="\u3147")&&(u!=="jong"||d!==0)));for(const d of C){if(s.length>=n)break;const f=u==="cho"?de(d,e.jung,e.jong):u==="jung"?de(e.cho,d,e.jong):de(e.cho,e.jung,d),i=qu(f,o);c.has(i)||(c.add(i),s.push(f))}return s}function yn(e,u,t,n,o,l=null){const r=[...e];if(r.length!==2)return null;const s=r.map(f=>V(f));if(s.some(f=>!f))return null;const c=_e(e,t,n);if(c.some(f=>!f))return null;const C=Cu(u);let d=C&&u?c.map((f,i)=>ye(f,u)?i:-1).filter(f=>f>=0):[0,1];if(l!=null&&(d=d.filter(f=>f!==l)),!d.length)return null;for(const f of F(d)){const i=r[f];if(!o.has(i))continue;const g=Oe(s[f],C??"cho",i,40,t),E=[];for(const w of g)if(w!==i&&o.has(w)&&!E.includes(w)&&E.push(w),E.length>=2)break;if(!(E.length<2))return{question:e,distractors:[i,...E]}}return null}function Bn(e,u,t,n,o,l=null){const r=[...e];if(r.length!==3)return null;const s=r.map(f=>V(f));if(s.some(f=>!f))return null;const c=_e(e,t,n);if(c.some(f=>!f))return null;const C=Cu(u),d=C&&u?c.map((f,i)=>ye(f,u)?i:-1).filter(f=>f>=0):[0,1,2];if(!d.length)return null;for(const f of F(d))for(const i of F([0,1,2].filter(g=>g!==f&&(l==null||g===l)))){const g=[0,1,2].filter(S=>S!==i),E=g.map(S=>r[S]).join("");if(!o.has(E))continue;const w=g.indexOf(f),p=Oe(s[f],C??"cho",r[f],40,t),h=[];for(const S of p){const B=g.map(_=>r[_]);B[w]=S;const A=B.join("");if(A!==E&&o.has(A)&&!h.includes(A)&&h.push(A),h.length>=2)break}if(!(h.length<2))return{question:e,distractors:[E,...h]}}return null}function wn(e,u,t,n,o,l=null){const r=[...e],s=r.length;if(s<2)return null;const c=[];for(let d=1;d<=s-1;d++)c.push({remain:r.slice(0,d).join(""),dropped:r.slice(d).join(""),droppedEnd:1}),c.push({remain:r.slice(s-d).join(""),dropped:r.slice(0,s-d).join(""),droppedEnd:0});const C=Cu(u);for(const{remain:d,dropped:f,droppedEnd:i}of F(c)){if(l!=null&&i!==l||d===e||!o.has(d)||!o.has(f))continue;const g=[...d],E=g.map(h=>V(h));if(E.some(h=>!h))continue;const w=_e(d,t,n);if(w.some(h=>!h))continue;const p=C&&u?w.map((h,S)=>ye(h,u)?S:-1).filter(h=>h>=0):g.map((h,S)=>S);if(p.length)for(const h of F(p)){const S=Oe(E[h],C??"cho",g[h],40,t),B=[];for(const A of S){const _=[...g];_[h]=A;const b=_.join("");if(b!==d&&o.has(b)&&!B.includes(b)&&B.push(b),B.length>=2)break}if(B.length>=2)return{question:e,distractors:[d,...B]}}}return null}function bn(e,u,t,n,o,l=null){if([...e].length!==1)return null;const r=V(t.get(e)||e);if(!r||r.jong===0)return null;const s=de(r.cho,r.jung,0),c=Oe({cho:r.cho,jung:r.jung,jong:0},"cho",s,2,t);return c.length<2?null:{question:e,distractors:[s,...c]}}const du=q.indexOf("\u3147");function An(e,u,t,n,o,l=null){if([...e].length!==1)return null;const r=V(t.get(e)||e);if(!r||r.jong!==0||r.cho===du)return null;const s=de(du,r.jung,0),c=Oe({cho:du,jung:r.jung,jong:0},"jung",s,2,t);return c.length<2?null:{question:e,distractors:[s,...c]}}function Dn(e){const u=new Map;for(const t of e){const n=[...t],o=n.length;if(!(o<2||o>3))for(let l=0;l<o;l++){let r=o+"|"+l+"|";for(let c=0;c<o;c++)r+=c===l?"*":n[c];const s=u.get(r);s?s.push(t):u.set(r,[t])}}return u}function _n(e,u,t,n,o,l=null,r=null,s=2){const c=[...e],C=c.length;if(C<2||C>3)return null;const d=c.map(S=>V(S));if(d.some(S=>!S))return null;const f=_e(e,t,n);if(f.some(S=>!S))return null;const i=S=>t.get(S)??S,g=i(e),E=!!u&&(K(u.cho)||K(u.jung)||K(u.jong)),w=!!r&&(K(r.cho)||K(r.jung)||K(r.jong)),p=S=>{let B=C+"|"+S+"|";for(let A=0;A<C;A++)B+=A===S?"*":c[A];return B};let h;if(l!=null){if(l>=C||E&&!ye(f[l],u))return null;h=[l]}else E?h=f.map((S,B)=>ye(S,u)?B:-1).filter(S=>S>=0):h=Array.from({length:C},(S,B)=>B);for(const S of F(h)){const B=o.get(p(S))??[],A=[],_=[];for(const j of B){if(j===e)continue;const G=[...j].map(P=>V(P)),x=d[S],k=G[S];if(!x||!k)continue;let T=0;if(x.cho!==k.cho&&T++,x.jung!==k.jung&&T++,x.jong!==k.jong&&T++,!(T<s||i(j)===g))if(w){const P=_e(j,t,n)[S];P&&ye(P,r)?A.push(j):_.push(j)}else A.push(j)}if(!A.length)continue;const b=F(A)[0],I=[],R=new Set([g,i(b)]),v=w?_:A.filter(j=>j!==b);for(const j of F(v)){const G=i(j);if(!R.has(G)&&(R.add(G),I.push(j),I.length>=2))break}if(!w&&I.length<2)for(const j of F(B)){if(j===e||j===b)continue;const G=i(j);if(!R.has(G)&&(R.add(G),I.push(j),I.length>=2))break}if(!(I.length<2))return{question:e,distractors:[b,...I]}}return null}let He=null,zu=null,Ju=null;function On(){const e=$e();if(e&&e.entries.length>0){const u=Ae();if(He&&zu===e&&Ju===u)return He;const t=new Set,n=[];for(const o of e.entries)!o.word||t.has(o.word)||(t.add(o.word),n.push({w:o.word,s:o.syllables,p:u?.[o.word]?[...u[o.word].cho??[],...u[o.word].jung??[],...u[o.word].jong??[]]:[],pron:o.pronunciation||o.word,grade:o.grade}));return He=n,zu=e,Ju=u,He}return[]}const ue=new Proxy([],{get(e,u){const t=On(),n=t[u];return typeof n=="function"?n.bind(t):n}});function Ue(e){return e.length?e[Math.floor(Math.random()*e.length)]:void 0}function te(e,u){if(u>=e.length)return F(e);if(u===0)return[];const t=e.slice();for(let n=0;n<u;n++){const o=n+Math.floor(Math.random()*(t.length-n)),l=t[n];t[n]=t[o],t[o]=l}return t.slice(0,u)}let fu=null,Zu=null;function fe(){const e=$e();if(fu&&Zu===e)return fu;const u=new Map;for(const t of ue)t.w&&u.set(t.w,t.pron);return fu=u,Zu=e,u}function J(e){return fe().get(e)||e}function gu(e,u,t=new Set){const n=[];for(const o of F(e)){if(n.length>=u)break;const l=J(o);t.has(l)||(t.add(l),n.push(o))}return n}let Nn=0;function z(e){return`${e}-rt-${++Nn}`}function Ne(e){const u=vu();if(!u||u.total===0){const n=new Set;for(const o of e)n.add(o);return n}const t=new Set;for(const n of e)Qt(n)===!0&&t.add(n);return t}const Ke=new Map;let Qu=null,Xu=null;function Te(e){return e==null?"":Array.isArray(e)?e.slice().sort().join(","):e}function et(e){const u=Te(e.choseong),t=e.composition,n=t?.syllable==null?"":Array.isArray(t.syllable)?t.syllable.slice().sort().join(","):String(t.syllable),o=t?`${Te(t.cho)}/${Te(t.jung)}/${Te(t.jong)}/${t.jongNone?"N":""}/${n}`:"",l=Te(e.grade);return`${e.difficulty??""}|${u}|${o}|${e.excludeNoImage?"1":"0"}|${e.count??""}|x${e.contrastCount??1}|${e.fullCount?"F":""}|s${e.sameStructureOnly===!1?"0":"1"}|v${e.phonemeView==="pron"?"p":"c"}|g${l}|t${e.targetSyllable??""}|c${e.choicesPerItem??""}`}async function Z(e){const u=$e(),t=Ae();(u!==Qu||t!==Xu)&&(Ke.clear(),Qu=u,Xu=t);const n=et(e);return Ke.has(n)||Ke.set(n,jn(e)),Ke.get(n)}function Tn(e){if(!e)return null;const u=r=>r==null?null:Array.isArray(r)?r.length?r:null:[r],t=u(e.cho),n=u(e.jung),o=!!e.jongNone,l=o?null:u(e.jong);return t||n||l||o?o&&!t&&!n&&!l?r=>$t(r):r=>Ut(r,{cho:t,jung:n,jong:l,jongNone:o}):null}async function jn(e){const{difficulty:u=null,choseong:t=null,composition:n=null,targetSyllable:o=null,excludeNoImage:l=!1}=e,r=e.grade&&e.grade.length>0?new Set(e.grade):null,s=e.sameStructureOnly??!0,c=e.phonemeView==="pron"?"pron":"char",C=Math.max(1,e.contrastCount??1),d=u==="cho"||u==="jung"||u==="jong",f=d&&C>=2,i=u==="count",g=t?new Set(Array.isArray(t)?t:[t]):null,E=n?.syllable!=null?new Set(Array.isArray(n.syllable)?n.syllable:[n.syllable]):null,w=n?[Tn(n),E?y=>E.has(Ge(y)):null].filter(y=>y!=null):[],p=u==="random"||u===null,h=p||i,S=p||f||i;let B=ue.filter(y=>!y.w||r&&(!y.grade||!r.has(y.grade))?!1:S?!0:Array.isArray(y.p)&&y.p.length>0);g&&(B=B.filter(y=>{for(const D of g)if(Yt(y.w,D))return!0;return!1})),w.length>0&&(B=B.filter(y=>{const D=c==="pron"?J(y.w):y.w;return w.every(H=>H(D))})),o&&(B=B.filter(y=>y.w[0]===o));let A;if(l){const y=new Set;for(const D of B)if(y.add(D.w),Array.isArray(D.p))for(const H of D.p)y.add(H);if(h)for(const D of ue)D.w&&y.add(D.w);A=Ne(y)}else{const y=new Set;for(const D of B)if(y.add(D.w),Array.isArray(D.p))for(const H of D.p)y.add(H);if(h)for(const D of ue)D.w&&y.add(D.w);A=y}let _=null;if(f){const y=new Set;for(const D of ue)D.w&&y.add(D.w);_=l?Ne(y):y}const b=B.filter(y=>A.has(y.w)),I=600,R=Array.from(A),v=R.length>I?te(R,I):R,j=i&&n!=null&&(K(n.cho)||K(n.jung)||K(n.jong)),G=2500,x=new Map;if(i&&!j&&C>=2){for(const y of R){const D=Ge(y),H=x.get(D);H?H.push(y):x.set(D,[y])}for(const[y,D]of x)D.length>G&&x.set(y,te(D,G))}const k=Vt(),T=j?Sn(n,R,k,s,c,J):null,P=500,$=1500,X=e.fullCount?b:u==="random"?b.length>P?te(b,P):b:b.length>$?te(b,$):b,le=Ae(),re=[];for(const y of X){let D;const H=J(y.w);if(f)D=Wt(y.w,u,C,_,24).filter(Y=>J(Y)!==H);else if(i)j?D=(T.get(y.w)??[]).filter(Y=>J(Y)!==H):C<=1?D=Wu(y.w,le,{okSet:A,pronOf:J,decompOf:k,sameStructureOnly:!1}):D=(x.get(Ge(y.w))??[]).filter(Y=>{if(Y===y.w||J(Y)===H)return!1;const ee=qt(y.w,Y);return C>=5?ee>=5:ee===C});else if(p)D=v.filter(Y=>Y!==y.w&&Y.length===y.w.length&&J(Y)!==H);else{const Y=u;D=Wu(y.w,le,{kind:Y,okSet:A,pronOf:J,decompOf:k,sameStructureOnly:!1}),D.length===0&&(D=(v.length>30?te(v,30):v).filter(ee=>ee!==y.w&&Gt(y.w,ee)===u&&J(ee)!==H))}if(s&&D.length>0&&(d||i&&!j)){const Y=k(J(y.w));D=D.filter(ee=>!cu(Y,k(J(ee))))}D.length!==0&&re.push({word:y,usable:D})}return re}async function ut(e,u){const{choicesPerItem:t=3,count:n=10}=u,o=t-1,l=(await Z(u)).filter(s=>s.usable.length>=o),r=[];for(const s of F(l)){if(r.length>=n)break;const c=gu(s.usable,o);if(c.length<o)continue;const C=F([s.word.w,...c]);r.push({id:z(e+"-item"),index:r.length+1,word:s.word.w,syllables:s.word.s,choices:C,answerIndex:C.indexOf(s.word.w)})}return r}async function In(e){const{choicesPerItem:u=3,count:t=10}=e,n=u-1,o=await Z({...e,difficulty:null});if(o.length<u)return[];const l=[],r=F([...o]);for(const s of r){if(l.length>=t)break;const c=s.word.w,C=[...s.word.pron||c],d=Ue(C);if(!d)continue;const f=o.filter(E=>E.word.w!==c&&E.word.s===s.word.s&&!(E.word.pron||E.word.w).includes(d)&&E.word.pron!==s.word.pron);if(f.length<n)continue;const i=gu(f.map(E=>E.word.w),n);if(i.length<n)continue;const g=F([c,...i]);l.push({id:z("HPI-item"),index:l.length+1,targetSyllable:d,word:c,choices:g,answerIndex:g.indexOf(c)})}return l}async function Ln(e){const{count:u=10}=e,t=(await Z(e)).filter(n=>n.usable.length>=1);return Array.from({length:u},(n,o)=>{const l=Ue(t);if(!l)return null;const r=o%2===0;let s;if(r)s=[l.word.w,l.word.w];else{const c=Ue(l.usable);s=Math.random()<.5?[l.word.w,c]:[c,l.word.w]}return{id:z("SOD-item"),index:o+1,word:l.word.w,pair:s,same:r}}).filter(n=>!!n)}async function Rn(e){const{choicesPerItem:u=3,count:t=10}=e,n=u-1,o=await Z({...e,difficulty:null});if(o.length<u+1)return[];const l=o.map(i=>i.word.w),r=new Map(o.map(i=>[i.word.w,i.word.pron])),s=i=>(r.get(i)||i)[0]??"",c={};for(const i of o){const g=s(i.word.w);g&&(c[g]||(c[g]=[]),c[g].push(i.word.w))}const C=Object.entries(c).filter(([,i])=>i.length>=2).map(([i])=>i);if(C.length===0)return[];const d=[],f=F([...C]);for(let i=0;d.length<t&&i<t*4;i++){const g=f[i%f.length],E=c[g];if(E.length<2)continue;const w=F([...E]),p=w[0],h=w[1];if(!p||!h||p===h||(r.get(p)||p)===(r.get(h)||h))continue;const S=r.get(h)||h,B=l.filter(b=>s(b)!==g&&b!==p&&b!==h&&b.length===h.length&&(r.get(b)||b)!==S);if(B.length<n)continue;const A=gu(B,n);if(A.length<n)continue;const _=F([h,...A]);d.push({id:z("SWS-item"),index:d.length+1,sourceWord:p,targetSyllable:g,word:h,choices:_,answerIndex:_.indexOf(h)})}return d}function tt(e,u,t){return te(e,u).map((n,o)=>{const l=Ue(n.usable)??"",r=[...n.word.w],s=[...l],c=r.findIndex((d,f)=>d!==s[f]),C=F(n.usable.filter(d=>d&&d!==l)).slice(0,2);return{id:z(t),index:o+1,word:n.word.w,original:n.word.w,changed:l,changedFrom:c>=0?r[c]:"",changedTo:c>=0?s[c]:"",distractors:C}})}async function nt(e,u,t){const{count:n=10}=u,o=fe(),l=ue.filter(g=>g.w&&g.s===e),r=u.excludeNoImage?Ne(l.map(g=>g.w)):null,s=r?l.filter(g=>r.has(g.w)):l,c=new Set(s.map(g=>g.w)),C=Dn(c),d=u.phonemeView??"char",f=u.composition??null,i=[];for(const g of F(s)){if(i.length>=n)break;const E=_n(g.w,f,o,d,C,null,null);if(!E)continue;const w=E.distractors[0],p=[...g.w],h=[...w],S=p.findIndex((B,A)=>B!==h[A]);i.push({id:z(t),index:i.length+1,word:g.w,original:g.w,changed:w,changedFrom:S>=0?p[S]:"",changedTo:S>=0?h[S]:"",distractors:E.distractors.slice(1)})}return i}async function Mn(e){return nt(2,e,"CS2-item")}async function xn(e){return nt(3,e,"CS3-item")}async function Pn(e){const u=(await Z({...e,difficulty:"count",contrastCount:1})).filter(t=>t.word.s===1&&t.usable.length>=1);return tt(u,e.count??10,"CP1-item")}async function Fn(e){const u=e.difficulty&&e.difficulty!=="random"?e.difficulty:"count",t=(await Z({...e,difficulty:u,contrastCount:1})).filter(n=>n.word.s===2&&n.usable.length>=1);return tt(t,e.count??10,"CP2-item")}async function kn(e){const{count:u=10}=e,t=(await Z({...e})).filter(n=>n.word.s===2);return te(t,u).map((n,o)=>({id:z("M2S-item"),index:o+1,word:n.word.w,answer:n.word.w,parts:[...n.word.w]}))}async function vn(e){const{count:u=10}=e,t=(await Z({...e})).filter(n=>n.word.s===3);return te(t,u).map((n,o)=>({id:z("M3S-item"),index:o+1,word:n.word.w,answer:n.word.w,parts:[...n.word.w]}))}async function Vn(e){const{count:u=10}=e,t=(await Z({...e})).filter(s=>s.word.s===2),n=fe(),o=new Set(ue.map(s=>s.w)),l=e.phonemeView??"char",r=[];for(const s of F(t)){if(r.length>=u)break;const c=yn(s.word.w,e.composition??null,n,l,o);if(!c)continue;const[C,...d]=c.distractors,f=[...s.word.w],i=f[0]===C?f[1]:f[0];r.push({id:z("D2-item"),index:r.length+1,original:s.word.w,word:s.word.w,dropped:i,missingResult:C,distractors:d})}return r}async function Gn(e){const{count:u=10}=e,t=(await Z({...e})).filter(s=>s.word.s===3),n=fe(),o=new Set(ue.map(s=>s.w)),l=e.phonemeView??"char",r=[];for(const s of F(t)){if(r.length>=u)break;const c=Bn(s.word.w,e.composition??null,n,l,o);if(!c)continue;const[C,...d]=c.distractors,f=[...s.word.w];let i="";for(let g=0;g<f.length;g++)if(f.filter((E,w)=>w!==g).join("")===C){i=f[g];break}r.push({id:z("D3-item"),index:r.length+1,original:s.word.w,word:s.word.w,dropped:i,missingResult:C,distractors:d})}return r}async function Yn(e){const{count:u=10}=e,t=(await Z({...e})).filter(s=>s.word.s>=2),n=fe(),o=new Set(ue.map(s=>s.w)),l=e.phonemeView??"char",r=[];for(const s of F(t)){if(r.length>=u)break;const c=wn(s.word.w,e.composition??null,n,l,o);if(!c)continue;const[C,...d]=c.distractors,f=s.word.w,i=f.startsWith(C)?f.slice(C.length):f.endsWith(C)?f.slice(0,f.length-C.length):"";r.push({id:z("DPC-item"),index:r.length+1,original:f,word:f,dropped:i,missingResult:C,distractors:d})}return r}async function $n(e){const{count:u=10}=e,t=(await Z({...e})).map(n=>n.word.w);return t.length<3?[]:Array.from({length:u},(n,o)=>{const l=te(t,3);return{id:z("LRO-item"),index:o+1,sequence:l,choices:F(l)}})}function We(e,u,t){const n=ue.filter(r=>r.w&&r.s===e),o=u?Ne(n.map(r=>r.w)):null,l=[];for(const r of n)if(!(o&&!o.has(r.w))){if(t){const s=V(r.w);if(!s||!t(s))continue}l.push(r)}return l}function Hn(e){const u=We(1,e.excludeNoImage??!1,t=>t.jong===0);return te(u,e.count??10).map((t,n)=>{const o=V(t.w);return{id:z("M2P-item"),index:n+1,parts:[q[o.cho],se[o.jung]],answer:t.w,word:t.w}})}function Un(e){const u=We(1,e.excludeNoImage??!1,t=>t.jong>0&&!we[t.jong]);return te(u,e.count??10).map((t,n)=>{const o=V(t.w);return{id:z("M3P-item"),index:n+1,parts:[q[o.cho],se[o.jung],Q[o.jong]],answer:t.w,word:t.w}})}function Kn(e){const u=Uu.DROP_FINAL_CONSONANT_FROM_1SYLL,t=We(u.syllables,e.excludeNoImage??!1,u.syllable),n=fe(),o=[];for(const l of F(t)){if(o.length>=(e.count??10))break;const r=bn(l.w,null,n);if(!r)continue;const[s,...c]=r.distractors;o.push({id:z("DFC-item"),index:o.length+1,original:l.w,word:l.w,result:s,distractors:c})}return o}function Wn(e){const u=Uu.REMOVE_CONSONANT_AND_IDENTIFY_PHONEME,t=We(u.syllables,e.excludeNoImage??!1,u.syllable),n=fe(),o=[];for(const l of F(t)){if(o.length>=(e.count??10))break;const r=An(l.w,null,n);if(!r)continue;const s=V(n.get(l.w)||l.w);if(!s)continue;const[c,...C]=r.distractors;o.push({id:z("RCP-item"),index:o.length+1,base:l.w,word:l.w,missingConsonant:q[s.cho],remaining:c,distractors:C})}return o}const qe=new Map;let ot=null,lt=null;async function rt(e,u={}){const t=$e(),n=Ae();(t!==ot||n!==lt)&&(qe.clear(),ot=t,lt=n);const o=`${e}:${et(u)}`;if(qe.has(o))return qe.get(o);const l=await zn(e,u);return qe.set(o,l),l}const qn={SAME_SOUND_PICK:e=>ut("SSP",e),HEAR_AND_PICK_SAME:e=>ut("HPS",e),HEAR_AND_PICK_INCLUDED:e=>In(e),SAME_OR_DIFF:e=>Ln(e),STARTS_WITH_SAME_SOUND:e=>Rn(e),LISTEN_AND_REMEMBER_ORDER:e=>$n(e),MERGE_2_SYLLABLES:e=>kn(e),MERGE_3_SYLLABLES:e=>vn(e),MERGE_2_PHONEMES:e=>Hn(e),MERGE_3_PHONEMES:e=>Un(e),DROP_1_FROM_2SYLL:e=>Vn(e),DROP_1_FROM_3SYLL:e=>Gn(e),DROP_PART_FROM_COMPOUND:e=>Yn(e),DROP_FINAL_CONSONANT_FROM_1SYLL:e=>Kn(e),REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:e=>Wn(e),CHANGE_1_SYLL_IN_2SYLL:e=>Mn(e),CHANGE_1_SYLL_IN_3SYLL:e=>xn(e),CHANGE_1_PHONEME_IN_1SYLL:e=>Pn(e),CHANGE_1_PHONEME_IN_2SYLL:e=>Fn(e)};async function zn(e,u={}){const t=qn[e];return t?await t(u):[]}async function Jn(e){const u=[null,"count"],t=Object.keys(au);let n=0;for(const o of u)for(const l of t){const r=au[l];rt(l,{difficulty:r.difficulty?o:null,choseong:null,count:10,excludeNoImage:e}).catch(()=>{}),++n%6===0&&await new Promise(s=>setTimeout(s,0))}}async function Zn(e){return(await Z({...e,fullCount:!0})).length}async function Qn(e={}){const u=[];for(const s of ue)s.w&&u.push(s.w);const t=e.excludeNoImage?Ne(u):u,n=new Set,o=new Set,l=new Set,r=new Set;for(const s of t){r.add(Ge(s));for(const c of s){const C=V(c);if(C&&(q[C.cho]!=="\u3147"&&n.add(q[C.cho]),o.add(se[C.jung]),C.jong>0)){l.add(Q[C.jong]);const d=we[C.jong];d&&d.forEach(f=>l.add(f))}}}return{cho:n,jung:o,jong:l,syllable:r}}const ge="\uC804\uCCB4";function st(){const{t:e}=Ee.useTranslation();return a.useMemo(()=>({difficulty:e("wordSearch.filter.difficulty","\uB4F1\uAE09"),syllables:e("wordSearch.filter.syllables","\uC74C\uC808 \uC218"),syllable5plus:e("wordSearch.filter.syllable5plus","5\uC74C\uC808 \uC774\uC0C1"),partOfSpeech:e("wordSearch.filter.partOfSpeech","\uD488\uC0AC"),wordType:e("wordSearch.filter.wordType","\uC720\uD615"),posMap:{[e("wordSearch.filter.pos.noun","\uCCB4\uC5B8(\uBA85\uC0AC, \uC218\uC0AC)")]:["\uBA85","\uC218"],[e("wordSearch.filter.pos.verb","\uC6A9\uC5B8(\uB3D9\uC0AC, \uD615\uC6A9\uC0AC)")]:["\uB3D9","\uD615"],[e("wordSearch.filter.pos.modifier","\uC218\uC2DD\uC5B8(\uBD80\uC0AC, \uAD00\uD615\uC0AC)")]:["\uBD80","\uAD00"]},typeMap:{[e("wordSearch.filter.type.native","\uACE0\uC720\uC5B4")]:"\uACE0\uC720",[e("wordSearch.filter.type.sino","\uD55C\uC790\uC5B4")]:"\uD55C\uC790",[e("wordSearch.filter.type.foreign","\uC678\uB798\uC5B4")]:"\uC678\uB798",[e("wordSearch.filter.type.mixed","\uD63C\uC885\uC5B4")]:"\uD63C\uC885"}}),[e])}function at(e,u,t){return{label:u.difficulty,items:[1,2,3,4].map(n=>e("wordSearch.filter.grade",{n})),multiple:!0,allOption:!0,allLabel:t?.allLabel,labelAction:t?.labelAction,labelInfo:t?.labelInfo}}function it(e){return{label:e.partOfSpeech,items:Object.keys(e.posMap),multiple:!0,allOption:!0}}function ct(e){return{label:e.wordType,items:Object.keys(e.typeMap),multiple:!0,allOption:!0}}function Xn(e,u){return{label:u.syllables,items:[e("wordSearch.filter.syllable",{n:1}),e("wordSearch.filter.syllable",{n:2}),e("wordSearch.filter.syllable",{n:3}),e("wordSearch.filter.syllable",{n:4}),u.syllable5plus],multiple:!0,allOption:!0}}function eo(e,u){const t=[e("wordPairs.filter.onlyHasImage","\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC")];return u?.includeStructure&&t.push(e("wordPairs.filter.onlySameStructure","\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC")),{label:e("wordPairs.filter.selectLabel","\uC120\uD0DD"),items:t,multiple:!0,labelAction:u?.labelAction,labelInfo:u?.labelInfo}}function uo(e,u){const{label:t,headValue:n,midValue:o,tailValue:l,includeMid:r=!0,headDisabled:s,midDisabled:c,tailDisabled:C,allOptionDisabled:d,groupLabel:f,labelAction:i}=u;return{label:t,...f?{groupLabel:f}:{},...i?{labelAction:i}:{},allOption:!0,allLabel:e("wordSearch.filter.positionAny",{defaultValue:"\uBB34\uAD00"}),...d?{allOptionDisabled:d}:{},items:[{value:n,displayLabel:e("wordSearch.filter.positionHead",{defaultValue:"\uC5B4\uB450"}),disabled:s},...r?[{value:o,displayLabel:e("wordSearch.filter.positionMid",{defaultValue:"\uC5B4\uC911"}),disabled:c}]:[],{value:l,displayLabel:e("wordSearch.filter.positionTail",{defaultValue:"\uC5B4\uB9D0"}),disabled:C}]}}function to(e,u,t){if(u===ge){const{[t]:l,...r}=e;return r}const n=e[t]??[],o=n.includes(u)?n.filter(l=>l!==u):[...n,u];if(o.length===0){const{[t]:l,...r}=e;return r}return{...e,[t]:o}}Object.fromEntries(Object.entries(hn).map(([e,{nucleus:u}])=>[e,u]));const no={\uACE0\uC720\uC5B4:"\uACE0\uC720",\uD55C\uC790\uC5B4:"\uD55C\uC790",\uC678\uB798\uC5B4:"\uC678\uB798",\uD63C\uC885\uC5B4:"\uD63C\uC885"},oo={"\uCCB4\uC5B8(\uBA85\uC0AC,\uC218\uC0AC)":["\uBA85","\uC218"],"\uC6A9\uC5B8(\uB3D9\uC0AC,\uD615\uC6A9\uC0AC)":["\uB3D9","\uD615"],"\uC218\uC2DD\uC5B8(\uBD80\uC0AC,\uAD00\uD615\uC0AC)":["\uBD80","\uAD00"]},lo={difficulty:"\uB09C\uC774\uB3C4 \uB4F1\uAE09",syllables:"\uC74C\uC808 \uC218",syllable5plus:"5\uC74C\uC808 \uC774\uC0C1",partOfSpeech:"\uD488\uC0AC",wordType:"\uC720\uD615",posMap:oo,typeMap:no};function ro(e,u,t=lo){const n=u[t.difficulty];if(n?.length&&!n.some(s=>e.grade===s.replace(/\D/g,"")))return!1;const o=u[t.syllables];if(o?.length){const s=e.syllables??0;if(!o.some(c=>c===t.syllable5plus?s>=5:s===parseInt(c)))return!1}const l=u[t.partOfSpeech];if(l?.length&&!l.flatMap(s=>t.posMap[s]??[s]).some(s=>(e.pos??"").includes(s)))return!1;const r=u[t.wordType];return!(r?.length&&!r.some(s=>e.wordType===t.typeMap[s]))}const ie=(e,u)=>u.map(t=>({jamos:[t],tooltip:e})),W=(e,u)=>({jamos:[...e],tooltip:u}),hu={cho:[ie("\uC591\uC21C\uC74C",["\u3142","\u3143","\u314D","\u3141"]),ie("\uCE58\uC870\uC74C",["\u3137","\u3138","\u314C","\u3134","\u3139"]),ie("\uCE58\uC870\uC74C",["\u3145","\u3146"]),ie("\uACBD\uAD6C\uAC1C\uC74C",["\u3148","\u3149","\u314A"]),ie("\uC5F0\uAD6C\uAC1C\uC74C",["\u3131","\u3132","\u314B"]),ie("\uC131\uBB38\uC74C",["\u314E"])],jung:[[W("\u3163","\uC804\uC124 \uACE0\uBAA8\uC74C"),W("\u315F","\uC804\uC124 \uACE0\uBAA8\uC74C \xB7 w\uD65C\uC74C"),W("\u3162","\uC804\uC124 \uACE0\uBAA8\uC74C \xB7 \u0270\uD65C\uC74C")],[W("\u3161","\uD6C4\uC124 \uACE0\uBAA8\uC74C \uD3C9\uC21C")],[W("\u315C","\uD6C4\uC124 \uACE0\uBAA8\uC74C \uC6D0\uC21C"),W("\u3160","\uD6C4\uC124 \uACE0\uBAA8\uC74C \uC6D0\uC21C \xB7 j\uD65C\uC74C")],[W("\u3154\u3150","\uC804\uC124 \uC911\uBAA8\uC74C"),W("\u3156\u3152","\uC804\uC124 \uC911\uBAA8\uC74C \xB7 j\uD65C\uC74C"),W("\u3159\u315A\u315E","\uC804\uC124 \uC911\uBAA8\uC74C \xB7 w\uD65C\uC74C")],[W("\u3153","\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C"),W("\u3155","\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C \xB7 j\uD65C\uC74C"),W("\u315D","\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C \xB7 w\uD65C\uC74C")],[W("\u3157","\uD6C4\uC124 \uC911\uBAA8\uC74C \uC6D0\uC21C"),W("\u315B","\uD6C4\uC124 \uC911\uBAA8\uC74C \uC6D0\uC21C \xB7 j\uD65C\uC74C")],[W("\u314F","\uC800\uBAA8\uC74C"),W("\u3151","\uC800\uBAA8\uC74C \xB7 j\uD65C\uC74C"),W("\u3158","\uC800\uBAA8\uC74C \xB7 w\uD65C\uC74C")]],jong:[ie("\uC591\uC21C\uC74C",["\u3142","\u3141"]),ie("\uCE58\uC870\uC74C",["\u3137","\u3134","\u3139"]),ie("\uC5F0\uAD6C\uAC1C\uC74C",["\u3131","\u3147"])]},so=[...q],ao=[...se],io=Q.filter(e=>e!==""),ce=e=>e===ne?[]:Array.from(e),ne="__NO_CODA__",Ct=[1,2,3,4],oe=5,co=12,dt="SYL_",mu=e=>`${dt}${e}`,Co=e=>Number(e.slice(dt.length));function Su(e){return e>=oe?Array.from({length:co-oe+1},(u,t)=>oe+t):[e]}const ft={cho:so,jung:ao,jong:io},Eu=e=>e.map(u=>u.map(({jamos:t,tooltip:n})=>({v:t.join(""),tooltip:n}))),pu={cho:Eu(hu.cho),jung:Eu(hu.jung),jong:Eu(hu.jong)},gt={};pu.jung.flat().forEach(({v:e})=>{for(const u of ce(e))gt[u]=e});const fo=new Set(pu.cho.flat().map(e=>e.v));function ht(e,u){return e==="cho"?fo.has(u)?u:null:e==="jung"?gt[u]??u:Ku(u)}function mt(e,u,t){if(e==="jung"){const n=ce(u);return t&&n.includes(t)?t:n[0]??u}return u}function St(e,u,t){const n=(o,l)=>l?o==="jong"&&l===ne?ne:u==="pron"?ht(o,l):mt(o,l,o==="jung"?t:null):null;return{...e,cho:n("cho",e.cho),jung:n("jung",e.jung),jong:n("jong",e.jong)}}const yu={cho:null,jung:null,jong:null,syllable:null},go="wt_filter",Et=e=>`wt_filter_${e}`;function pt(e){try{const u=localStorage.getItem(Et(e))??localStorage.getItem(go);if(u)return JSON.parse(u)}catch{}return null}function ho(e){const u=e;return u?.composition?{cho:u.composition.cho??null,jung:u.composition.jung??null,jong:u.composition.jong??null,syllable:u.composition.syllable??null}:u?.choseong?{...yu,cho:u.choseong}:yu}function mo(e,u,t){const{t:n,i18n:o}=Ee.useTranslation(),[l]=a.useState(()=>t?.resetOnMount?null:pt(e)),r=l?.contrastCount,s=typeof r=="number"&&Number.isFinite(r)?r:1,[c,C]=a.useState(Math.min(5,Math.max(1,s))),[d,f]=a.useState(l?.phonemeView==="pron"?"pron":l?.phonemeView==="direct"?"direct":"char"),[i,g]=a.useState(()=>ho(l)),E=a.useCallback(()=>u.requireSyllable?{cho:"\u3131",jung:"\u314F",jong:ne,syllable:u.fixedSyllable??null}:{cho:null,jung:null,jong:u.fixedNoCoda?ne:null,syllable:u.fixedSyllable??null},[u.requireSyllable,u.fixedSyllable,u.fixedNoCoda]);a.useEffect(()=>{!u.requireSyllable&&u.fixedSyllable==null&&!u.fixedNoCoda||g(m=>m.cho||m.jung||m.syllable!=null||m.jong?m:E())},[]);const w=a.useMemo(()=>K(i.cho)||K(i.jung)||K(i.jong)?"count":"random",[i.cho,i.jung,i.jong]),p=a.useRef(d==="char"?i.jung:null);a.useEffect(()=>{d==="char"&&(p.current=i.jung)},[d,i.jung]);const[h,S]=a.useState(t?.resetOnMount?!!t?.defaultImageOnly:l?.excludeNoImage??!0),[B,A]=a.useState(t?.resetOnMount?!1:l?.sameStructureOnly??!0),[_,b]=a.useState(Array.isArray(l?.gradeFilter)?l.gradeFilter:[]),[I,R]=a.useState(Array.isArray(l?.posFilter)?l.posFilter:[]),[v,j]=a.useState(Array.isArray(l?.wordTypeFilter)?l.wordTypeFilter:[]),G=a.useRef(t?.resetKey);a.useEffect(()=>{G.current!==t?.resetKey&&(G.current=t?.resetKey,g(E()),S(!1),A(!1),b([]),R([]),j([]),C(1))},[t?.resetKey]);const x=st(),[k,T]=a.useState({cho:new Set,jung:new Set,jong:new Set,syllable:new Set}),[P,$]=a.useState(!1),[X,le]=a.useState(null),re=1,y=Math.max(1,[i.cho,i.jung,i.jong].filter(Boolean).length);a.useEffect(()=>{c<y&&C(y)},[y,c]);const[D,H]=a.useState(e);a.useEffect(()=>{if(D!==e){if(!t?.resetOnMount){const m=pt(e),N=typeof m?.contrastCount=="number"&&Number.isFinite(m.contrastCount)?m.contrastCount:1;C(Math.min(5,Math.max(1,N))),g(m?.composition??E()),S(m?.excludeNoImage??!0),A(m?.sameStructureOnly??!0),f(m?.phonemeView==="pron"?"pron":"char"),b(Array.isArray(m?.gradeFilter)?m.gradeFilter:[]),R(Array.isArray(m?.posFilter)?m.posFilter:[]),j(Array.isArray(m?.wordTypeFilter)?m.wordTypeFilter:[])}H(e)}},[e,D,t?.resetOnMount]),a.useEffect(()=>{if(!t?.resetOnMount&&D===e)try{localStorage.setItem(Et(e),JSON.stringify({contrastCount:c,composition:i,excludeNoImage:h,sameStructureOnly:B,phonemeView:d,gradeFilter:_,posFilter:I,wordTypeFilter:v}))}catch{}},[t?.resetOnMount,e,D,c,i,h,B,d,_,I,v]);const[Y,ee]=a.useState(0);Lu("wordpool:update",()=>ee(m=>m+1));const Du=a.useRef(o.language);a.useEffect(()=>{Du.current!==o.language&&(Du.current=o.language,ee(m=>m+1))},[o.language]),a.useEffect(()=>{if(!u.choseong)return;let m=!1;return Qn({difficulty:w,excludeNoImage:h}).then(N=>{m||(T(N),N.cho.size+N.jung.size+N.jong.size>0&&$(!0))}).catch(()=>{m||T({cho:new Set,jung:new Set,jong:new Set,syllable:new Set})}),()=>{m=!0}},[u.choseong,w,h,Y]),a.useEffect(()=>{let m=!1;const N=i,O=N.cho?ce(N.cho):null,M=N.jung?ce(N.jung):null,U=N.jong===ne,he=U?null:N.jong?ce(N.jong):null,me=N.syllable!=null?Su(N.syllable):null,ve=!!(O||M||he||U||me);return Zn({difficulty:u.difficulty?w:null,contrastCount:u.difficulty?c:1,composition:u.choseong&&ve?{cho:O,jung:M,jong:he,jongNone:U,syllable:me}:null,excludeNoImage:h,sameStructureOnly:B,phonemeView:d==="pron"?"pron":"char",grade:_.length>0?_:null}).then(Ve=>{m||le(Ve)}).catch(()=>{m||le(null)}),()=>{m=!0}},[u.choseong,u.difficulty,w,c,i,d,h,B,Y,_]),a.useEffect(()=>{P&&g(m=>{const N={...m};let O=!1;return["cho","jung","jong"].forEach(M=>{const U=m[M];!U||U===ne||ce(U).some(he=>k[M].has(he))||(N[M]=null,O=!0)}),m.syllable!=null&&u.fixedSyllable==null&&(m.syllable>=oe?[...k.syllable].some(M=>M>=oe)||(N.syllable=null,O=!0):(!k.syllable.has(m.syllable)||m.syllable<re)&&(N.syllable=null,O=!0)),O?N:m})},[k,P,re,u.fixedSyllable]);const _u=a.useMemo(()=>{const m=N=>{const O=new Set;for(const M of ft[N])k[N].has(M)&&O.add(M);return O};return{cho:m("cho"),jung:m("jung"),jong:m("jong")}},[k]),tu=a.useMemo(()=>({exact:new Set(Ct.filter(m=>k.syllable.has(m))),min:[...k.syllable].some(m=>m>=oe)}),[k]),L=a.useMemo(()=>({diffPhonemeCount:n("training.contrast.diffPhonemeCount",{defaultValue:"\uB2E4\uB978 \uC74C\uC18C\uC758 \uCD1D \uAC2F\uC218"}),composition:n("wordPairs.composition","\uC815\uB2F5 \uB2E8\uC5B4 \uAD6C\uC131"),syllableCount:n("wordPairs.syllableCount","\uC74C\uC808 \uC218"),onset:n("wordPairs.onset","\uCD08\uC131"),vowel:n("wordPairs.vowel","\uBAA8\uC74C"),coda:n("wordPairs.coda","\uC885\uC131"),phonemeGroup:n("training.filter.phonemeGroup",{defaultValue:"\uD6C8\uB828 \uC74C\uC808"}),trainOnset:n("training.filter.trainOnset",{defaultValue:"\uCD08\uC131"}),trainVowel:n("training.filter.trainVowel",{defaultValue:"\uBAA8\uC74C"}),trainCoda:n("training.filter.trainCoda",{defaultValue:"\uC885\uC131"}),random:n("training.filter.random","\uBB34\uC791\uC704"),exclude:n("wordSearch.filter.exclude","\uC81C\uC678"),selectLabel:n("training.filter.selectSection",{defaultValue:"\uC120\uD0DD"}),none:n("common.none","\uC5C6\uC74C"),noImage:n("wordSearch.filter.excludeNoImage","\uC774\uBBF8\uC9C0 \uC5C6\uC74C"),excludeImage:n("training.filter.excludeImage",{defaultValue:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC"}),sameStructure:n("training.filter.sameStructure",{defaultValue:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC"}),noLimit:n("training.filter.noLimit",{defaultValue:"\uBB34\uAD00"}),codaExclude:n("training.filter.codaExclude",{defaultValue:"\uC81C\uC678"}),gradeLabel:n("training.filter.gradeLabel",{defaultValue:"\uB09C\uC774\uB3C4 \uB4F1\uAE09"})}),[n]),Ou=a.useMemo(()=>({[L.trainOnset]:"cho",[L.trainVowel]:"jung",[L.trainCoda]:"jong"}),[L]),ke=a.useCallback((m,N)=>({title:N,items:m}),[]),nu=a.useMemo(()=>[n("training.filter.excludeImageInfo",{defaultValue:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC: \uB2E8\uC5B4 \uC911\uC5D0 \uC774\uBBF8\uC9C0\uAC00 \uC788\uB294 \uB2E8\uC5B4\uB9CC \uACB0\uACFC\uC5D0 \uBCF4\uC5EC\uC90D\uB2C8\uB2E4."}),n("training.filter.sameStructureInfo",{defaultValue:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC: \uC815\uB2F5\uACFC \uC624\uB2F5\uC758 \uC74C\uC808 \uAD6C\uC870(\uAE00\uC790 \uC218\xB7\uBC1B\uCE68 \uC720\uBB34 \uB4F1)\uAC00 \uAC19\uC740 \uACB0\uACFC\uB9CC \uB0A8\uACA8\uC694."})],[n]),Dt=a.useMemo(()=>{const m=[];if(u.choseong){const N={value:ne,displayLabel:L.codaExclude},O=u.fixedNoCoda===!0,M=(U,he)=>{const me=O&&U==="jong",ve={label:he,groupLabel:L.phonemeGroup,allOption:!u.requireSyllable,allLabel:L.noLimit,allOptionDisabled:me};if(d==="pron"){const Se=pu[U].map(Lt=>Lt.map(({v:ou,tooltip:Nu})=>{const lu=ce(ou),Tu=me||!lu.some(Rt=>k[U].has(Rt));return lu.length>1?{value:ou,labels:lu,tooltip:Nu,disabled:Tu}:{value:ou,tooltip:Nu,disabled:Tu}}));return U==="jong"&&!u.requireCoda&&Se.unshift([N]),{...ve,groups:Se}}const Ve=ft[U].map(Se=>!me&&_u[U].has(Se)?Se:{value:Se,disabled:!0});return{...ve,items:U==="jong"&&!u.requireCoda?[N,...Ve]:Ve}};m.push(M("cho",L.trainOnset)),m.push(M("jung",L.trainVowel)),m.push(M("jong",L.trainCoda))}if(m.push({...at(n,x,{labelInfo:ke([n("wordPairs.filter.difficultyInfo",{defaultValue:"\uAD6D\uB9BD\uAD6D\uC5B4\uC6D0\uC758 \uAE30\uCD08 \uC5B4\uD718 \uB4F1\uAE09\uC774 \uACB0\uACFC\uC5D0 \uBC18\uC601\uB429\uB2C8\uB2E4."})])}),label:L.gradeLabel}),u.partOfSpeech&&m.push(it(x)),u.wordType&&m.push(ct(x)),u.choseong||u.fixedSyllable!=null){const N=u.fixedSyllable;m.push({label:L.syllableCount,items:[...Ct.map(O=>({value:mu(O),displayLabel:n("wordPairs.syllableN",{n:O,defaultValue:"{{n}}\uC74C\uC808"}),disabled:N!=null?O!==N:!tu.exact.has(O)||O<re})),{value:mu(oe),displayLabel:n("wordPairs.syllableNPlus",{n:oe,defaultValue:"{{n}}\uC74C\uC808 \uC774\uC0C1"}),disabled:N!=null?oe!==N:!tu.min}],allOption:!0,allOptionDisabled:N!=null})}return u.choseong?m.push({label:L.exclude,displayLabel:L.selectLabel,multiple:!0,items:[L.excludeImage,L.sameStructure],labelInfo:ke(nu)}):m.push({label:L.exclude,displayLabel:L.selectLabel,multiple:!0,items:[L.excludeImage],labelInfo:ke([nu[0]])}),m},[u.choseong,u.partOfSpeech,u.wordType,u.requireSyllable,u.fixedSyllable,u.fixedNoCoda,u.requireCoda,re,_u,k,d,tu,L,n,ke,nu,x]),_t={...u.difficulty?{[L.diffPhonemeCount]:String(c)}:{},...(u.choseong||u.fixedSyllable!=null)&&i.syllable!=null?{[L.syllableCount]:mu(i.syllable)}:{},...u.choseong&&i.cho?{[L.trainOnset]:i.cho}:{},...u.choseong&&i.jung?{[L.trainVowel]:i.jung}:{},...u.choseong&&i.jong?{[L.trainCoda]:i.jong}:{},[L.exclude]:[...h?[L.excludeImage]:[],...B?[L.sameStructure]:[]],[L.gradeLabel]:_.map(m=>n("wordSearch.filter.grade",{n:Number(m),defaultValue:"{{n}}\uB4F1\uAE09"})),...u.partOfSpeech?{[x.partOfSpeech]:I}:{},...u.wordType?{[x.wordType]:v}:{}},Ot=a.useCallback((m,N)=>{if(N===L.diffPhonemeCount){const O=Number(m);O>=1&&C(O)}else if(N===L.exclude)m===L.excludeImage?S(O=>!O):m===L.sameStructure&&A(O=>!O);else if(N===L.syllableCount)g(O=>{if(!m||m===ge)return{...O,syllable:null};const M=Co(m);return{...O,syllable:O.syllable===M?null:M}});else if(N===L.gradeLabel){if(!m||m===ge){b([]);return}const O=m.replace(/\D/g,"");b(M=>M.includes(O)?M.filter(U=>U!==O):[...M,O])}else if(N===x.partOfSpeech){if(!m||m===ge){R([]);return}R(O=>O.includes(m)?O.filter(M=>M!==m):[...O,m])}else if(N===x.wordType){if(!m||m===ge){j([]);return}j(O=>O.includes(m)?O.filter(M=>M!==m):[...O,m])}else{const O=Ou[N];if(!O)return;g(M=>u.requireSyllable?m&&m!==ge?{...M,[O]:m}:M:!m||m===ge||M[O]===m?{...M,[O]:null}:{...M,[O]:m})}},[L,Ou,x,u.requireSyllable]),Nt=a.useCallback(m=>!u.partOfSpeech&&!u.wordType?!0:ro(m,{...u.partOfSpeech?{[x.partOfSpeech]:I}:{},...u.wordType?{[x.wordType]:v}:{}},x),[u.partOfSpeech,u.wordType,I,v,x]),Tt=a.useCallback(m=>{m!==d&&(m!=="direct"&&d!=="direct"&&g(N=>St(N,m,p.current)),f(m))},[d]),jt=a.useCallback(()=>({composition:i,contrastCount:c,excludeNoImage:h,sameStructureOnly:B,phonemeView:d,gradeFilter:_}),[i,c,h,B,d,_]),It=a.useCallback(m=>{g(m.composition),C(m.contrastCount),S(m.excludeNoImage),A(m.sameStructureOnly??!0),f(m.phonemeView),b(Array.isArray(m.gradeFilter)?m.gradeFilter:[])},[]);return{difficulty:w,contrastCount:c,composition:i,choseong:i.cho,excludeNoImage:h,sameStructureOnly:B,gradeFilter:_,posFilter:I,wordTypeFilter:v,matchesWordAttributes:Nt,poolVersion:Y,filterSections:Dt,filterSelected:_t,handleFilterSelect:Ot,phonemeView:d,setPhonemeView:Tt,phonemeGroupLabel:L.phonemeGroup,wordCount:X,getFilterSnapshot:jt,restoreFilterSnapshot:It}}function So(e){const u=s=>s?ce(s):null,t=u(e.cho),n=u(e.jung),o=e.jong===ne,l=o?null:u(e.jong),r=e.syllable!=null?Su(e.syllable):null;return!t&&!n&&!l&&!o&&!r?null:{cho:t,jung:n,jong:l,jongNone:o,syllable:r}}function Eo(e,u,t,n,o,l,r=!0,s="char",c=[]){const[C,d]=a.useState({}),[f,i]=a.useState(!1),{cho:g=null,jung:E=null,jong:w=null,syllable:p=null}=n??{},h=c.length>0?c.slice().sort().join(","):"";return a.useEffect(()=>{l>0&&Jn(o).catch(()=>{})},[l,o]),a.useEffect(()=>{let S=!1;return i(!0),(async()=>{const B=So({cho:g,jung:E,jong:w,syllable:p}),A=`${g??""}_${E??""}_${w??""}_${p??""}_${h}`,_={};await Promise.all(e.map(async b=>{const I=au[b.key];try{const R=await rt(b.key,{difficulty:I.difficulty?u:null,contrastCount:I.difficulty?t:1,composition:I.choseong?B:null,count:5,excludeNoImage:o,sameStructureOnly:r,phonemeView:s,grade:c.length>0?c:null});R&&R.length>0?_[b.key]={id:`wt-${b.key}-${u}-${A}-${Date.now()}`,name:b.label,training_type:b.key,category_main_code:"WORD",iconColor:b.color,subTitle:b.subTitle,items:R,itemCount:R.length}:_[b.key]={id:`wt-${b.key}-empty`,name:b.label,training_type:b.key,category_main_code:"WORD",iconColor:b.color,subTitle:b.subTitle,items:[],itemCount:0,__empty:!0}}catch{_[b.key]=null}})),S||(d(_),i(!1))})(),()=>{S=!0}},[u,t,g,E,w,p,o,r,s,l,h]),{perTypeData:C,generating:f}}function po(){return ze(new Date)}function ze(e){if(e==null||e==="")return"";const u=e instanceof Date?e:new Date(e);return isNaN(u.getTime())?"":new Intl.DateTimeFormat("fr-CA",{timeZone:"Asia/Seoul"}).format(u)}const je=[],Ie=[],Le=[],Re=[],Je={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},Ze={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},yo={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let Bu=null,yt=null,Ce=null;function Bo({counts:e,forceRefresh:u}={}){const t=Object.assign({},yo,e||{}),n=po(),o=ze(new Date(`${n}T00:00:00+09:00`).getTime()-864e5),l=JSON.stringify(t);if(!u&&yt===n&&Bu===l&&Ce)return Object.assign(Je,Ce.today),Object.assign(Ze,Ce.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:Je,yesterday:Ze};const r={LISTEN_IN_NOISE:ae(je,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:ae(Ie,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:ae(Le,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:ae(Re,Math.max(0,Number(t.ORDERING_SENTENCE)||0))};let s=null;return Ce&&Bu===l&&Ce.yesterday&&Ce.yesterday.date===o&&(s=Ce.yesterday.selection),s||(s={LISTEN_IN_NOISE:ae(je,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:ae(Ie,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:ae(Le,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:ae(Re,Math.max(0,Number(t.ORDERING_SENTENCE)||0))}),Object.assign(Je,r),Object.assign(Ze,s),yt=n,Bu=l,Ce={today:r,yesterday:{date:o,countsKey:l,selection:s}},{today:Je,yesterday:Ze}}let Bt=!1,Me=null;async function wo(){try{const e={url:typeof document>"u"?require("url").pathToFileURL(__filename).href:ru&&ru.tagName.toUpperCase()==="SCRIPT"&&ru.src||new URL("hooks.cjs.js",document.baseURI).href}&&void 0||"/",u=await fetch(`${e}data/allTrainingData.json`);return u.ok?await u.json():null}catch{return null}}async function bo(){if(!Bt)return Me||(Me=(async()=>{const e=await wo();if(!e){Me=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{for(const u of Object.keys(e||{})){const t=e[u]||[];for(const n of t){const o=n,l=String(o.training_type||u),r=String(o.category_main_code||o.category_main||o.category_0||""),s=String(o.category_sub_code||o.category_sub||o.category_1||""),c=Object.assign({},o,{training_type:l,category_0:r,category_1:s});l==="LISTEN_IN_NOISE"?je.push(c):l==="SHORT_STORY"?Ie.push(c):l==="LONG_STORY"?Le.push(c):l==="ORDERING_SENTENCE"&&Re.push(c)}}}catch{Me=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}try{Bo()}catch{}Bt=!0})(),Me)}async function Ao(e=3e3){const u=bo();return Promise.race([u,new Promise(t=>setTimeout(t,e))])}function Do(e){let u=2166136261;for(let t=0;t<e.length;t++)u^=e.charCodeAt(t),u=Math.imul(u,16777619);return u>>>0}function _o(e){let u=e>>>0;return()=>{u|=0,u=u+1831565813|0;let t=Math.imul(u^u>>>15,1|u);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}const Qe=ae;function wu(e,u){const t=u?_o(Do(u)):Math.random;return{LISTEN_IN_NOISE:Qe(je,Math.max(0,e.LISTEN_IN_NOISE||0),t),SHORT_STORY:Qe(Ie,Math.max(0,e.SHORT_STORY||0),t),LONG_STORY:Qe(Le,Math.max(0,e.LONG_STORY||0),t),ORDERING_SENTENCE:Qe(Re,Math.max(0,e.ORDERING_SENTENCE||0),t)}}function wt(e){return e?!!(e.LISTEN_IN_NOISE?.length||e.SHORT_STORY?.length||e.LONG_STORY?.length||e.ORDERING_SENTENCE?.length):!1}const Oo={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};function bt(e=!1,u=Oo,t){const n=ze(Date.now()),o=ze(Date.now()-864e5),l=`${t??""}|${n}`,r=`${t??""}|${o}`;return je.length>0||Ie.length>0||Le.length>0||Re.length>0?{today:wu(u,l),yesterday:wu(u,r)}:{today:wu(u,l),yesterday:null}}function No(e){const u=a.useRef({LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),t=a.useRef(null),[n,o]=a.useState(!1),[l,r]=a.useState(!1),[s,c]=a.useState(0),[C,d]=a.useState(!1);a.useEffect(()=>{let i=!1,g,E=0;const w=40,p=()=>{g!==void 0&&(clearInterval(g),g=void 0)};let h=!1;try{const A=new URLSearchParams(window.location.search),_=A.get("forceRefresh")||A.get("force");h=_==="1"||_==="true"}catch{}const S=A=>{u.current=A.today,t.current=A.yesterday,o(!0),d(!0),c(_=>_+1),i=!0,p()},B=async()=>{if(i)return;if(!h){const _=bt(!1,void 0,e);if(wt(_.today)){S(_);return}}try{await Ao(3e3)}catch{}if(i)return;const A=bt(h,void 0,e);if(wt(A.today)){S(A);return}++E>=w&&(o(!0),d(!1),i=!0,p())};return B(),g=setInterval(B,250),()=>{i=!0,p()}},[e]);const f=a.useCallback(i=>{const g=l?t.current:u.current,E=l?u.current:t.current;return g?.[i]?.length?g[i]:E?.[i]?.length?E[i]:void 0},[l,s]);return{loaded:n,hasData:C,showYesterday:l,setShowYesterday:r,getTrainingPerType:f}}const Be=[];let Xe=!1;function At(e){if(e.key!=="Escape"||e.defaultPrevented)return;const u=Be[Be.length-1];u&&(e.stopPropagation(),u())}function To(e){return Be.push(e),!Xe&&typeof document<"u"&&(document.addEventListener("keydown",At),Xe=!0),()=>{const u=Be.lastIndexOf(e);u>=0&&Be.splice(u,1),Be.length===0&&Xe&&typeof document<"u"&&(document.removeEventListener("keydown",At),Xe=!1)}}function jo(e,u=!0){const t=Iu(e);a.useEffect(()=>{if(u)return To(()=>{t.current?.()})},[u,t])}const bu=(e,u)=>`${e}:${u??1}`,Au=new Map;function Io(e,u){const[t,n]=a.useState(0),o=e.map(l=>bu(l.word,l.homonum)).join("|");return a.useEffect(()=>{const l=(o?o.split("|"):[]).filter(c=>!Au.has(c));if(l.length===0)return;let r=!1;const s=Array.from(new Set(l.map(c=>c.slice(0,c.lastIndexOf(":")))));return u(s).then(c=>{if(!(r||c.length===0)){for(const C of c)C.Meaning&&Au.set(bu(C.Word,C.Homonum??void 0),C.Meaning);n(C=>C+1)}}),()=>{r=!0}},[o,u]),a.useMemo(()=>{const l=o?o.split("|"):[],r=new Map;for(const s of l){const c=Au.get(s);c!=null&&r.set(s,c)}return r},[o,t])}function Lo(){const[e,u]=a.useState(null),t=a.useCallback(l=>u(l.getBoundingClientRect()),[]),n=a.useCallback(()=>u(null),[]),o=a.useCallback(l=>{const r=l.getBoundingClientRect();u(s=>s?null:r)},[]);return{anchorRect:e,isOpen:e!=null,openAt:t,close:n,toggleAt:o}}function Ro(e){const[u,t]=a.useState(null),[n,o]=a.useState(null),l=a.useRef(null);a.useEffect(()=>()=>{l.current&&clearTimeout(l.current)},[]);const r=a.useCallback((c,C)=>{l.current&&clearTimeout(l.current),l.current=setTimeout(()=>{t(c),o(C)},e)},[e]),s=a.useCallback(()=>{l.current&&clearTimeout(l.current),t(null),o(null)},[]);return{payload:u,anchorRect:n,openAfterDelay:r,close:s}}function Mo(e,u,t){const n=Number.isFinite(u)&&u>=1?Math.floor(u):1,o=Math.max(1,Math.ceil(e.length/n)),l=Number.isFinite(t)?Math.min(Math.max(1,Math.floor(t)),o):1;return{pageItems:a.useMemo(()=>e.slice((l-1)*n,l*n),[e,l,n]),totalPages:o,curPage:l}}function xo(e="warning"){const[u,t]=a.useState(""),[n,o]=a.useState(e),[l,r]=a.useState(0),s=a.useCallback((f,i)=>{o(i),t(f),r(g=>g+1)},[]),c=a.useCallback(f=>s(f,"warning"),[s]),C=a.useCallback(f=>s(f,"normal"),[s]),d=a.useCallback(()=>t(""),[]);return{toastMessage:u,toastType:n,toastKey:l,showToast:s,showWarning:c,showNormal:C,clearToast:d}}const Po=[{key:"LISTEN_IN_NOISE",label:"\uC18C\uC74C \uD558 \uBB38\uC7A5 \uB4E3\uAE30",icon:"party-popper",desc:"\uB2E4\uC591\uD55C \uC18C\uC74C \uD658\uACBD\uC5D0\uC11C \uBB38\uC7A5 \uCCAD\uB825\uC744 \uD6C8\uB828\uD569\uB2C8\uB2E4."},{key:"SHORT_STORY",label:"\uC9E7\uC740 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square",desc:"\uC9E7\uC740 \uC774\uC57C\uAE30\uB97C \uB4E3\uACE0 \uAE30\uC5B5\uD558\uC5EC \uBB38\uC81C\uB97C \uD480\uC5B4\uBD05\uB2C8\uB2E4."},{key:"LONG_STORY",label:"\uAE34 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square-text",desc:"\uAE34 \uC774\uC57C\uAE30\uB97C \uB4E3\uACE0 \uAE30\uC5B5\uD558\uC5EC \uB2E4\uC218\uC758 \uBB38\uC81C\uB97C \uD480\uC5B4\uBD05\uB2C8\uB2E4."},{key:"ORDERING_SENTENCE",label:"\uBB38\uC7A5 \uC21C\uC11C\uD654 \uD558\uAE30",icon:"align-start-vertical",desc:"\uC5EC\uB7EC\uAC1C\uC758 \uC9E7\uC740 \uBB38\uC7A5\uC744 \uB4E3\uACE0 \uAE30\uC5B5\uD558\uC5EC \uADF8 \uC21C\uC11C\uC5D0 \uB9DE\uAC8C \uBC30\uC5F4\uD569\uB2C8\uB2E4."}],Fo={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};function ko(e){return Po.map(u=>{const t=Fo[u.key];return t?{...u,label:e(`trainingType.${t}.title`),desc:e(`trainingType.${t}.desc`)}:u})}const xe={blue:"#60A5FA",green:"#4ADE80",amber:"#FBBF24",purple:"#A78BFA",pink:"#F472B6"},Pe=xe.blue,eu=xe.green,Fe=xe.amber,uu=xe.purple,vo=xe.pink,Vo=[{key:"discrimination",label:"\uBCC0\uBCC4\uD6C8\uB828",disc:"\uB450 \uC18C\uB9AC\uAC00 \uAC19\uC740\uC9C0 \uB2E4\uB978\uC9C0, \uB610\uB294 \uD2B9\uC815 \uC18C\uB9AC\uB97C \uAD6C\uBCC4\uD558\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"ear",types:[{key:"SAME_SOUND_PICK",label:"\uAC19\uC740 \uC18C\uB9AC \uACE0\uB974\uAE30",icon:"volume-2",color:Pe,subTitle:"\uB4E4\uC740 \uC18C\uB9AC\uC640 \uAC19\uC740 \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"SAME_OR_DIFF",label:"\uAC19\uC740\uC9C0 \uB2E4\uB978\uC9C0 \uB9DE\uD788\uAE30",icon:"diff",color:Pe,subTitle:"\uB450 \uC18C\uB9AC\uAC00 \uAC19\uC740\uC9C0, \uB2E4\uB978\uC9C0 \uAD6C\uBD84\uD558\uC138\uC694."},{key:"HEAR_AND_PICK_SAME",label:"\uC77C\uCE58\uD558\uB294 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"headphones",color:Pe,subTitle:"\uB4E4\uC740 \uC18C\uB9AC\uC758 \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"HEAR_AND_PICK_INCLUDED",label:"\uD55C \uC74C\uC808 \uD3EC\uD568 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"scan-search",color:Pe,subTitle:"\uB4E4\uC740 \uC74C\uC808\uC774 \uD3EC\uD568\uB41C \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"STARTS_WITH_SAME_SOUND",label:"\uCCAB \uC74C\uC808\uC774 \uAC19\uC740 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"play-circle",color:Pe,subTitle:"\uB4E4\uC740 \uB2E8\uC5B4\uC640 \uAC19\uC740 \uC18C\uB9AC\uB85C \uC2DC\uC791\uD558\uB294 \uB2E8\uC5B4\uB97C \uACE0\uB974\uC138\uC694."}]},{key:"synthesis",label:"\uD569\uC131\uD6C8\uB828",disc:"\uB450 \uAC1C \uC774\uC0C1\uC758 \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uD569\uCCD0 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"git-merge",types:[{key:"MERGE_2_SYLLABLES",label:"\uC74C\uC808 2\uAC1C \uD569\uCE58\uAE30",icon:"link-2",color:eu,subTitle:"\uB450 \uC74C\uC808\uC744 \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_3_SYLLABLES",label:"\uC74C\uC808 3\uAC1C \uD569\uCE58\uAE30",icon:"git-merge",color:eu,subTitle:"\uC138 \uC74C\uC808\uC744 \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_2_PHONEMES",label:"\uC74C\uC18C 2\uAC1C \uD569\uCE58\uAE30",icon:"combine",color:eu,subTitle:"\uB450 \uC74C\uC18C\uB97C \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_3_PHONEMES",label:"\uC74C\uC18C 3\uAC1C \uD569\uCE58\uAE30",icon:"braces",color:eu,subTitle:"\uC138 \uC74C\uC18C\uB97C \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"}]},{key:"deletion",label:"\uD0C8\uB77D\uD6C8\uB828",disc:"\uB2E8\uC5B4\uC5D0\uC11C \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uC81C\uAC70\uD588\uC744 \uB54C \uB0A8\uB294 \uC18C\uB9AC\uB97C \uC778\uC2DD\uD558\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"scissors",types:[{key:"DROP_1_FROM_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C 1\uC74C\uC808 \uD0C8\uB77D",icon:"scissors",color:Fe,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC5D0\uC11C \uD55C \uC74C\uC808\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_1_FROM_3SYLL",label:"3\uC74C\uC808\uC5D0\uC11C 1\uC74C\uC808 \uD0C8\uB77D",icon:"minus-circle",color:Fe,subTitle:"3\uC74C\uC808 \uB2E8\uC5B4\uC5D0\uC11C \uD55C \uC74C\uC808\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_PART_FROM_COMPOUND",label:"\uD569\uC131\uC5B4\uC5D0\uC11C \uBD80\uBD84\uD0C8\uB77D",icon:"unlink",color:Fe,subTitle:"\uD569\uC131\uC5B4\uC758 \uC77C\uBD80\uB97C \uBE7C\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_FINAL_CONSONANT_FROM_1SYLL",label:"1\uC74C\uC808\uC5D0\uC11C \uBC1B\uCE68 \uD0C8\uB77D",icon:"eraser",color:Fe,subTitle:"\uBC1B\uCE68\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"REMOVE_CONSONANT_AND_IDENTIFY_PHONEME",label:"1\uC74C\uC808\uC5D0\uC11C \uC790\uC74C \uD0C8\uB77D",icon:"audio-lines",color:Fe,subTitle:"\uC790\uC74C\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB0A8\uC744\uAE4C\uC694?"}]},{key:"substitution",label:"\uB300\uCE58\uD6C8\uB828",disc:"\uB2E8\uC5B4\uC758 \uC77C\uBD80 \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uBC14\uAFB8\uC5B4 \uC0C8\uB85C\uC6B4 \uC18C\uB9AC\uB97C \uB9CC\uB4DC\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"replace",types:[{key:"CHANGE_1_SYLL_IN_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uBC14\uAFB8\uAE30",icon:"replace",color:uu,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC808\uC744 \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_SYLL_IN_3SYLL",label:"3\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uBC14\uAFB8\uAE30",icon:"shuffle",color:uu,subTitle:"3\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC808\uC744 \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_PHONEME_IN_1SYLL",label:"1\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC18C \uBC14\uAFB8\uAE30",icon:"arrow-right-left",color:uu,subTitle:"1\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC18C\uB97C \uBC14\uAFD4 \uC0C8 \uC18C\uB9AC\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_PHONEME_IN_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC18C \uBC14\uAFB8\uAE30",icon:"flip-horizontal",color:uu,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC18C\uB97C \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."}]},{key:"attention",label:"\uCCAD\uAC01\uC801\uC8FC\uC758\uB825\uD6C8\uB828",disc:"\uC5EC\uB7EC \uC18C\uB9AC\uB97C \uB4E3\uACE0 \uC21C\uC11C\uB97C \uAE30\uC5B5\uD558\uB294 \uC8FC\uC758\uB825\uACFC \uB2E8\uAE30 \uAE30\uC5B5 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"list-ordered",types:[{key:"LISTEN_AND_REMEMBER_ORDER",label:"\uB4E3\uACE0 \uC21C\uC11C\uB300\uB85C \uAE30\uC5B5\uD558\uAE30",icon:"list-ordered",color:vo,subTitle:"\uC138 \uB2E8\uC5B4\uB97C \uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCE74\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694."}]}];function Go(){const{t:e}=Ee.useTranslation();return a.useMemo(()=>{const u=Object.fromEntries(ko(e).map(n=>[n.key,n.label])),t={...u};return Vo.flatMap(n=>n.types).forEach(n=>{t[n.key]=e(`trainingType.${n.key}.label`,{defaultValue:n.label})}),{sentence:u,all:t}},[e])}const Yo="0.70.0";function $o({computeStyle:e,onScroll:u="close",onResize:t="close",ignoreOutsideClickSelector:n}){const[o,l]=a.useState(!1),[r,s]=a.useState({}),c=a.useRef(null),C=a.useRef(null),d=a.useCallback(()=>{c.current&&s(e(c.current.getBoundingClientRect()))},[e]);a.useEffect(()=>{if(!o)return;d();const g=h=>{const S=h.target;n&&S.closest?.(n)||c.current?.contains(S)||C.current?.contains(S)||l(!1)};document.addEventListener("mousedown",g);const E=h=>{C.current?.contains(h.target)||(u==="reposition"?d():u==="close"&&l(!1))};u!=="ignore"&&window.addEventListener("scroll",E,!0);const w=()=>{t==="reposition"?d():t==="close"&&l(!1)};t!=="ignore"&&window.addEventListener("resize",w);const p=h=>{h.key==="Escape"&&l(!1)};return document.addEventListener("keydown",p),()=>{document.removeEventListener("mousedown",g),u!=="ignore"&&window.removeEventListener("scroll",E,!0),t!=="ignore"&&window.removeEventListener("resize",w),document.removeEventListener("keydown",p)}},[o,d,u,t,n]);const f=a.useCallback(()=>l(g=>!g),[]),i=a.useCallback(()=>l(!1),[]);return{open:o,setOpen:l,toggle:f,close:i,style:r,triggerRef:c,menuRef:C}}function Ho(e,{mode:u="playback",autoStart:t=!1,onPlaySpeaker:n,onComplete:o,playMs:l=1100,feedbackMs:r=1500}={}){const[s,c]=a.useState([]),[C,d]=a.useState(0),[f,i]=a.useState("idle"),[g,E]=a.useState(null),[w,p]=a.useState([]),[h,S]=a.useState(null),[B,A]=a.useState(0),_=a.useRef(0),b=a.useCallback(y=>{_.current=typeof y=="function"?y(_.current):y,A(_.current)},[]),I=a.useRef(n),R=a.useRef(o);a.useEffect(()=>{I.current=n,R.current=o},[n,o]);const v=a.useRef([]),j=()=>{v.current.forEach(clearTimeout),v.current=[]},G=(y,D)=>{v.current.push(setTimeout(D,y))};a.useEffect(()=>()=>j(),[]);const x=s[C]?.id??null,k=a.useCallback(()=>{j(),i("playing"),p([]),S(null),b(0);let y=0;e.forEach((D,H)=>{G(y,()=>{d(H),E(D.id),I.current?.(D)}),G(y+1e3,()=>{E(null),p(Y=>[...Y,D.id])}),y+=1300}),G(y,()=>{i("done"),R.current?.({score:0,total:e.length})})},[e,b]),T=a.useCallback((y,D)=>{if(D>=y.length){i("done"),R.current?.({score:_.current,total:y.length});return}d(D),S(null),i("playing"),E(y[D].id),I.current?.(y[D]),G(l,()=>{E(null),i("waiting")})},[l]),P=a.useCallback(()=>{j();const y=F(e);c(y),b(0),p([]),T(y,0)},[e,T,b]),$=a.useCallback(()=>{u==="playback"?(c(e),k()):P()},[u,e,k,P]),X=a.useCallback(()=>{j(),i("idle"),E(null),p([]),S(null),d(0),b(0),c([])},[b]);a.useEffect(()=>{t?$():X()},[u,e.length,t]);const le=a.useCallback(y=>{f!=="waiting"||u==="playback"||(S(y),y===s[C]?.id&&b(D=>D+1),u==="exam"?(i("playing"),G(400,()=>T(s,C+1))):(i("feedback"),G(r,()=>T(s,C+1))))},[f,u,s,C,T,r,b]),re=u==="playback"?e.length:s.length;return{bind:{activeSpeakerId:g,playedIds:w,selectedId:h,answerId:x,showFeedback:f==="feedback",clickable:f==="waiting",onSelectSpeaker:le},index:C,total:re,score:B,phase:f,done:f==="done",start:$,reset:X}}exports.CACHE_GROUPS=Vu,exports.CORE_VERSION=Yo,exports.DocumentTitleSuppressContext=Mu,exports.EMPTY_COMPOSITION=yu,exports.MediaQueryOverrideContext=ju,exports.NO_CODA=ne,exports.SYLLABLE_MIN=oe,exports.VAP_PAGE_SIZE_OPTIONS=Hu,exports.buildGradeSection=at,exports.buildPartOfSpeechSection=it,exports.buildPositionSection=uo,exports.buildSelectSection=eo,exports.buildSyllableSection=Xn,exports.buildWordTypeSection=ct,exports.charToPronValue=ht,exports.convertComposition=St,exports.fmtBytes=en,exports.lsBytes=Gu,exports.meaningKey=bu,exports.pronToCharValue=mt,exports.syllableToFilter=Su,exports.today=De,exports.toggleAttributeFilter=to,exports.useAnchoredMenu=$o,exports.useCacheManagement=un,exports.useDailyTrainingSelection=No,exports.useDelayedHoverAnchor=Ro,exports.useDeviceManagement=Cn,exports.useDocumentTitle=Ft,exports.useEscToClose=jo,exports.useFontScale=Mt,exports.useHoverAnchor=Lo,exports.useMediaQuery=Pt,exports.usePagedList=Mo,exports.usePasswordChange=vt,exports.useRelativeDay=kt,exports.useSoundCompassExam=Ho,exports.useTablePaging=an,exports.useTableSort=cn,exports.useToastState=xo,exports.useTrainingTypeLabels=Go,exports.useVisitAllPanel=sn,exports.useVisitHistory=on,exports.useVisitSchedule=rn,exports.useWindowEvent=Lu,exports.useWordAttributeFilterKeys=st,exports.useWordDataStats=tn,exports.useWordMeanings=Io,exports.useWordTrainingDataGeneration=Eo,exports.useWordTrainingFilter=mo,exports.valueToJamos=ce;
|