@ihabdevteam/core 0.132.0 → 0.134.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/CHANGELOG.md +129 -0
- package/dist/components.cjs.js +177 -177
- package/dist/components.esm.css +1 -1
- package/dist/hooks.cjs.js +1 -1
- package/dist/i18n.cjs.js +2 -2
- package/dist/ihabdevteam-core.cjs.js +182 -182
- package/dist/ihabdevteam-core.d.ts +8 -13
- package/dist/packages/core/src/components/BarChart.js +2 -2
- package/dist/packages/core/src/components/BottomNav.js +3 -3
- package/dist/packages/core/src/components/Breadcrumb.js +5 -1
- package/dist/packages/core/src/components/BulkBar.js +1 -1
- package/dist/packages/core/src/components/ChoiceChips.js +1 -1
- package/dist/packages/core/src/components/CodeBox.js +1 -1
- package/dist/packages/core/src/components/DatePicker.js +16 -3
- package/dist/packages/core/src/components/Dialog.js +32 -9
- package/dist/packages/core/src/components/Dropdown.js +13 -3
- package/dist/packages/core/src/components/FileUpload.js +8 -7
- package/dist/packages/core/src/components/FilterPanel.js +8 -5
- package/dist/packages/core/src/components/FilterSectionInfo.js +1 -1
- package/dist/packages/core/src/components/Header.css +2 -0
- package/dist/packages/core/src/components/Header.js +4 -1
- package/dist/packages/core/src/components/HearingDeviceInfo.js +1 -1
- package/dist/packages/core/src/components/LandingHeader.js +18 -1
- package/dist/packages/core/src/components/PageTitle.js +1 -1
- package/dist/packages/core/src/components/Pagination.js +6 -3
- package/dist/packages/core/src/components/Panel.d.ts +1 -1
- package/dist/packages/core/src/components/Panel.js +4 -1
- package/dist/packages/core/src/components/PanelRow.js +3 -3
- package/dist/packages/core/src/components/PassCard/passCardProduct.js +6 -0
- package/dist/packages/core/src/components/PaymentPlan.d.ts +6 -0
- package/dist/packages/core/src/components/PaymentPlan.js +6 -4
- package/dist/packages/core/src/components/Popup/DeviceSideTable.js +2 -2
- package/dist/packages/core/src/components/Popup/LoadTablePopup.js +2 -2
- package/dist/packages/core/src/components/Popup/Popup.js +15 -3
- package/dist/packages/core/src/components/Popup/SaveTablePopup.js +1 -1
- package/dist/packages/core/src/components/Popup/TrainingResultPopup.js +1 -1
- package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.js +3 -3
- package/dist/packages/core/src/components/PromoBanner.js +1 -1
- package/dist/packages/core/src/components/SegmentedControl.js +1 -1
- package/dist/packages/core/src/components/SideNav.js +2 -2
- package/dist/packages/core/src/components/SoundCompass.js +10 -1
- package/dist/packages/core/src/components/Table.js +2 -2
- package/dist/packages/core/src/components/Tabs.js +7 -2
- package/dist/packages/core/src/components/Tooltip/MenuTooltip.js +8 -3
- package/dist/packages/core/src/components/Tooltip/TextBoxTooltip.js +1 -1
- package/dist/packages/core/src/components/Tooltip/Tooltip.js +13 -5
- package/dist/packages/core/src/components/Training/NoiseSettingsTooltip.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingBlock.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingBlockButton.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingCardGroup.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingPagePopup.js +51 -23
- package/dist/packages/core/src/components/Training/TrainingPagePopupBottom.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingPagePopupTitle.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.js +26 -5
- package/dist/packages/core/src/components/Training/TrainingStepConfirm.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingStepConfirmWithText.js +2 -2
- package/dist/packages/core/src/components/Training/TrainingStepOrderList.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingStepTextBox.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingStepTitle.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingWordCard.js +11 -6
- package/dist/packages/core/src/components/Training/useAudioPreview.js +7 -3
- package/dist/packages/core/src/components/Training/useNoiseFade.js +22 -1
- package/dist/packages/core/src/components/Training/useTTSPlayback.js +9 -0
- package/dist/packages/core/src/components/UpdateAlert.js +1 -1
- package/dist/packages/core/src/components/Word/PhonemeSelectBlock.js +2 -2
- package/dist/packages/core/src/components/Word/WordSearchResultBlock.js +6 -5
- package/dist/packages/core/src/components/Word/WordTableBlock.js +2 -2
- package/dist/packages/core/src/components/Word/WordTableButton.js +1 -1
- package/dist/packages/core/src/components/WordTable.js +6 -6
- package/dist/packages/core/src/components/useToastLifecycle.js +8 -1
- package/dist/packages/core/src/hooks/useAnchoredMenu.js +10 -9
- package/dist/packages/core/src/hooks/useDocumentTitle.d.ts +0 -11
- package/dist/packages/core/src/hooks/useDocumentTitle.js +16 -3
- package/dist/packages/core/src/hooks/useFocusTrap.js +6 -2
- package/dist/packages/core/src/hooks/useWordTrainingFilter.js +9 -4
- package/dist/packages/core/src/hooks/wordTrainingFilterModel.d.ts +1 -1
- package/dist/packages/core/src/hooks/wordTrainingFilterModel.js +7 -2
- package/dist/packages/core/src/i18n/locales/en.json +11 -0
- package/dist/packages/core/src/i18n/locales/ko.json +11 -0
- package/dist/packages/core/src/utils/audioPeaks.js +13 -5
- package/dist/packages/core/src/utils/csv.js +3 -1
- package/dist/packages/core/src/utils/format.js +17 -1
- package/dist/packages/core/src/utils/koreanPronunciation.js +7 -0
- package/dist/packages/core/src/utils/koreanSyllable.js +2 -1
- package/dist/packages/core/src/utils/pressable.js +4 -0
- package/dist/packages/core/src/utils/savedWordTables.js +2 -1
- package/dist/packages/core/src/utils/textSort.d.ts +0 -10
- package/dist/packages/core/src/utils/textSort.js +7 -2
- package/dist/packages/core/src/utils/wordTrainingPool.d.ts +7 -0
- package/dist/packages/core/src/utils/wordTrainingPool.js +30 -0
- package/dist/packages/core/src/utils/wordTrainingRuntime.js +55 -17
- package/dist/packages/core/src/version.d.ts +1 -1
- package/dist/packages/core/src/version.js +1 -1
- package/dist/utils.cjs.js +2 -2
- package/package.json +1 -1
package/dist/hooks.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var s=require("react"),ce=require("react-i18next"),Ou=require("i18next"),lu=typeof document<"u"?document.currentScript:null;function vt({storageKey:e="fontScale",baseFont:u=20,minScale:t=.8,maxScale:n=1.4,step:o=.1,lineHeightRatio:l=1.4}={}){const r=S=>Math.max(t,Math.min(n,Number(S))),[a,i]=s.useState(()=>{try{const S=localStorage.getItem(e),g=S?Number(S):1;return Number.isFinite(g)?r(g):r(1)}catch{return 1}});s.useEffect(()=>{try{localStorage.setItem(e,String(a))}catch{}},[e,a]);const f=S=>{i(typeof S=="function"?g=>r(S(g)):r(S))},h=()=>f(S=>+(S+o).toFixed(6)),C=()=>f(S=>+(S-o).toFixed(6)),c=a<n-Number.EPSILON,d=a>t+Number.EPSILON,m=Math.round(u*a),y=Math.round(m*l);return{scale:a,setScale:f,increase:h,decrease:C,canIncrease:c,canDecrease:d,fontSize:m,lineHeight:y}}const Nu=s.createContext(null);function xt(e){return/max-width:\s*7[0-9][0-9]px/.test(e)}function Pt(e){const u=s.useContext(Nu),t=l=>typeof window>"u"||!window.matchMedia?!1:window.matchMedia(l).matches,[n,o]=s.useState(t(e));return s.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;const l=window.matchMedia(e),r=i=>o(i.matches),a=l;return a.addEventListener?a.addEventListener("change",r):a.addListener&&a.addListener(r),o(l.matches),()=>{a.removeEventListener?a.removeEventListener("change",r):a.removeListener&&a.removeListener(r)}},[e]),u&&typeof u.mobile=="boolean"&&xt(e)?u.mobile:n}function Tu(e){const u=s.useRef(e);return s.useEffect(()=>{u.current=e}),u}function ju(e,u){const t=Tu(u);s.useEffect(()=>{const n=()=>t.current();try{window.addEventListener(e,n)}catch{}return()=>{try{window.removeEventListener(e,n)}catch{}}},[e,t])}const ru=" \xB7 ",Iu=(()=>{if(typeof document>"u")return"";const e=document.title;return e.includes(ru)?e.split(ru).pop()??e:e})(),Ru=s.createContext(!1);function Ft(e){const u=s.useContext(Ru);s.useEffect(()=>{if(u||typeof e!="string"||!e)return;const t=document.title;return document.title=Iu?`${e}${ru}${Iu}`:e,()=>{document.title=t}},[e,u])}function Vt(){const{t:e}=ce.useTranslation();return s.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])}const Ht=()=>{const e="\uC54C \uC218 \uC5C6\uB294 \uC624\uB958",u=typeof Ou?.t=="function"?Ou.t("common.unknownError",{defaultValue:e}):void 0;return typeof u=="string"&&u?u:e};function $t(e,u){if(u===void 0&&(u=Ht()),e instanceof Error)return e.message||u;if(typeof e=="string")return e||u;if(e&&typeof e=="object"){const t=e;for(const n of[t.message,t.error_description,t.error])if(typeof n=="string"&&n)return n}return u}function Gt(e){const{t:u}=ce.useTranslation(),[t,n]=s.useState({current:"",next:"",confirm:""}),[o,l]=s.useState(null),[r,a]=s.useState(!1),i=s.useRef(null);s.useEffect(()=>()=>{i.current!==null&&clearTimeout(i.current)},[]);const f=s.useCallback(()=>{n({current:"",next:"",confirm:""}),l(null)},[]),h=s.useCallback(async()=>{if(!t.current){l({type:"error",text:u("account.security.password.currentRequired","\uD604\uC7AC \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694.")});return}if(!t.next){l({type:"error",text:u("account.security.password.newRequired","\uC0C8 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694.")});return}if(t.next!==t.confirm){l({type:"error",text:u("account.security.password.mismatch","\uC0C8 \uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.")});return}a(!0);let C;try{C=e?await e(t.current,t.next):null}catch(c){C=$t(c)}finally{a(!1)}if(C){l({type:"error",text:C});return}l({type:"success",text:u("account.security.password.changed","\uBE44\uBC00\uBC88\uD638\uAC00 \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4.")}),n({current:"",next:"",confirm:""}),i.current!==null&&clearTimeout(i.current),i.current=setTimeout(()=>l(null),1500)},[t,e,u]);return{pw:t,setPw:n,pwMsg:o,setPwMsg:l,pwLoading:r,handleChangePw:h,reset:f}}const q=["\u3131","\u3132","\u3134","\u3137","\u3138","\u3139","\u3141","\u3142","\u3143","\u3145","\u3146","\u3147","\u3148","\u3149","\u314A","\u314B","\u314C","\u314D","\u314E"],ee=["\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 P(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 Yt(){const e=new Map;return u=>{let t=e.get(u);return t||(t=[...u].map(n=>P(n)),e.set(u,t)),t}}function Ce(e,u,t=0){return String.fromCharCode(44032+(e*21+u)*28+t)}function Ut(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=P(e[o]),r=P(u[o]);if(!l||!r)return"random";if(l.cho===r.cho&&l.jung===r.jung&&l.jong===r.jong)continue;t++;const a=l.cho!==r.cho,i=l.jung!==r.jung,f=l.jong!==r.jong;(a?1:0)+(i?1:0)+(f?1:0)>1?n="multi":a?n="cho":i?n="jung":n="jong"}return t!==1?"random":n==="cho"?"cho":n==="jung"?"jung":n==="jong"?"jong":"random"}const Be={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(Be).map(([e,u])=>[u.join(""),Q[Number(e)]]));function Kt(e,u){if(!e||!u)return!1;for(const t of e){const n=P(t);if(n){if(q[n.cho]===u)return!0;if(n.jong>0){if(Q[n.jong]===u)return!0;const o=Be[n.jong];if(o&&o.includes(u))return!0}}}return!1}function Ve(e){if(!e)return 0;let u=0;for(const t of e)P(t)&&u++;return u}function Wt(e){if(!e)return!1;let u=!1;for(const t of e){const n=P(t);if(n&&(u=!0,n.jong>0))return!1}return u}function qt(e,u){if(e.jong<=0)return!1;if(u.includes(Q[e.jong]))return!0;const t=Be[e.jong];return!!t&&t.some(n=>u.includes(n))}function zt(e,u,t){if(!e)return!1;const n=[...e],o=l=>{const r=P(n[l]);if(!r||u.cho&&!u.cho.includes(q[r.cho])||u.jung&&!u.jung.includes(ee[r.jung]))return!1;if(u.jongNone){if(r.jong>0)return!1}else if(u.jong&&!qt(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 Jt={cho:q.length,jung:ee.length,jong:Q.length};function Xt(e,u,t,n,o=1/0){if(!e||t<1)return[];const l=[...e].map(C=>P(C));if(l.some(C=>!C))return[];const r=l,a=r.length;if(t>a)return[];const i=Jt[u],f=new Set,h=[];(function C(c,d){if(d.length===t){h.push([...d]);return}for(let m=c;m<a;m++)d.push(m),C(m+1,d),d.pop()})(0,[]);for(const C of h)if((function c(d,m){if(f.size>=o)return;if(d===C.length){const g=m.map(E=>Ce(E.cho,E.jung,E.jong)).join("");g!==e&&n.has(g)&&f.add(g);return}const y=C[d],S=r[y][u];for(let g=0;g<i;g++){if(g===S)continue;const E=m.slice();if(E[y]={...m[y],[u]:g},c(d+1,E),f.size>=o)return}})(0,r),f.size>=o)break;return[...f]}function Zt(e,u){if(!e||!u||e.length!==u.length)return-1;let t=0;for(let n=0;n<e.length;n++){const o=P(e[n]),l=P(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 Lu="word_pair_index_v2",Mu="word_pair_index_sig_v2";let we=null;function Qt(){try{if(typeof localStorage>"u")return null;const e=localStorage.getItem(Lu),u=localStorage.getItem(Mu);return!e||!u?null:{index:JSON.parse(e),sig:u}}catch{return null}}function be(){if(we)return we;const e=Qt();return e?(we=e.index,e.sig,we):null}function en(){we=null;try{typeof localStorage<"u"&&(localStorage.removeItem(Lu),localStorage.removeItem(Mu))}catch{}}const ku="word_image_existence_map_v1";let Se=null;function vu(){if(Se)return Se;try{const e=typeof localStorage<"u"?localStorage.getItem(ku):null;Se=e?JSON.parse(e):{}}catch{Se={}}return Se}function un(e,u){return`${e}_${u??1}`}function tn(e,u){const t=vu(),n=un(e,u);return n in t?t[n]:void 0}function xu(){const e=vu(),u=Object.values(e);return u.length===0?null:{total:u.length,exists:u.filter(Boolean).length}}function nn(){Se={};try{typeof localStorage<"u"&&localStorage.removeItem(ku)}catch{}}const Pu=[{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 Fu(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 on(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 ln(e){const{t:u}=ce.useTranslation(),[t,n]=s.useState({}),[o,l]=s.useState(null),[r,a]=s.useState(null),[i,f]=s.useState(null),h=s.useCallback(()=>{const c={};Pu.forEach(d=>{c[d.id]=Fu([...d.keys])}),n(c),typeof navigator<"u"&&navigator.storage?.estimate&&navigator.storage.estimate().then(d=>{f({usage:d.usage??0,quota:d.quota??0})}).catch(()=>{})},[]);s.useEffect(()=>{h()},[h]);const C=s.useCallback(async c=>{l(c);try{c==="wordData"?(localStorage.removeItem("word_data_cache"),localStorage.removeItem("word_data_version")):c==="pairIndex"?en():c==="imageCache"&&nn(),h(),e?.(u("settings.cache.cleared","\uCE90\uC2DC\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4."))}finally{l(null)}},[h,e,u]);return{cacheSizes:t,clearingId:o,confirmCacheId:r,setConfirmCacheId:a,storageEstimate:i,refreshCacheSizes:h,handleClearCache:C}}function rn(e){const[u,t]=s.useState(null),[n,o]=s.useState(null),l=s.useCallback(()=>{const r=be();if(r){const i=Object.values(r),f=i.filter(h=>h.cho.length+h.jung.length+h.jong.length>0).length;t({matched:f,total:i.length})}else t(null);const a=xu();o(a?{exists:a.exists,total:a.total}:null)},[]);return s.useEffect(()=>{l();const r=setTimeout(l,1e3);return()=>clearTimeout(r)},[e?.length,l]),{pairStats:u,imgStats:n,setPairStats:t,setImgStats:o,refreshStats:l}}function Vu(e,u=[]){const[t,n]=s.useState(u),[o,l]=s.useState(null),[r,a]=s.useState(!1),[i,f]=s.useState(e),h=s.useRef(r);s.useEffect(()=>{h.current=r});const C=s.useRef(null);s.useEffect(()=>{if(h.current)return;const g=C.current;g!==null&&g.length===u.length&&g.every((E,w)=>E===u[w])||(C.current=u,n(u))},[u]);const c=s.useCallback(g=>{l(g),a(!1),f({...g})},[]),d=s.useCallback(()=>a(!0),[]),m=s.useCallback(()=>a(!1),[]),y=s.useCallback((g,E)=>{n(g),l(E),a(!1)},[]),S=s.useCallback(g=>{n(E=>E.filter(w=>w!==g)),l(null)},[]);return{list:t,setList:n,selected:o,setSelected:l,isEditing:r,setIsEditing:a,editForm:i,setEditForm:f,openDetail:c,startEditing:d,cancelEditing:m,commitEdit:y,remove:S}}const Ae=()=>{const e=new Date;return{year:String(e.getFullYear()),month:String(e.getMonth()+1).padStart(2,"0"),day:String(e.getDate()).padStart(2,"0")}},an={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function sn(e=[]){const{list:u,setList:t,selected:n,setSelected:o,isEditing:l,setIsEditing:r,editForm:a,setEditForm:i,openDetail:f,commitEdit:h}=Vu(an,e),{year:C,month:c,day:d}=Ae(),[m,y]=s.useState({year:C,month:c,day:d,hour:"09",minute:"00",memo:""});return{visitHistory:u,visitForm:m,setVisitForm:y,setVisit:S=>g=>y(E=>({...E,[S]:g})),selectedVisit:n,setSelectedVisit:o,isEditingVisit:l,setIsEditingVisit:r,editVisitForm:a,setEditVisitForm:i,openVisitDetail:f,handleVisitSave:S=>{t(A=>[m,...A]);const{year:g,month:E,day:w}=Ae();y({year:g,month:E,day:w,hour:"09",minute:"00",memo:""}),S?.()},handleVisitEditSave:()=>{h(S=>S.map(g=>g===n?a:g),a)},addVisit:S=>{t(g=>[S,...g])},removeVisit:S=>{t(g=>g.filter(E=>E!==S))},revertVisitEdit:(S,g)=>{t(E=>E.map(w=>w===g?S:w)),o(E=>E===g?S:E)}}}const Hu=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")}`,He=e=>[...e].sort((u,t)=>{const n=Hu(u),o=Hu(t);return n<o?-1:n>o?1:0}),cn={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function Cn(e,u=[]){const t=s.useMemo(()=>He(u),[u]),{list:n,setList:o,selected:l,setSelected:r,isEditing:a,setIsEditing:i,editForm:f,setEditForm:h,openDetail:C,commitEdit:c,remove:d}=Vu(cn,t),[m,y]=s.useState([]),{year:S,month:g,day:E}=Ae(),[w,A]=s.useState({year:S,month:g,day:E,hour:"09",minute:"00",memo:""}),_=I=>M=>A(F=>({...F,[I]:M})),b=I=>{o(se=>He([...se,w]));const{year:M,month:F,day:J}=Ae();A({year:M,month:F,day:J,hour:"09",minute:"00",memo:""}),I?.()},L=()=>{c(I=>He(I.map(M=>M===l?f:M)),f)},T=s.useCallback(I=>{d(I)},[d]),v=s.useCallback(I=>{e({year:I.year,month:I.month,day:I.day,hour:I.hour,minute:I.minute,memo:I.memo}),d(I)},[e,d]),R=s.useCallback(I=>{o(M=>M.filter(F=>F!==I)),y(M=>[I,...M]),r(null)},[o,r]),V=s.useCallback(I=>{o(M=>He([...M,I]))},[o]),$=s.useCallback(I=>{o(M=>M.filter(F=>F!==I))},[o]),Y=s.useCallback((I,M)=>{o(F=>F.map(J=>J===M?I:J)),r(F=>F===M?I:F)},[o,r]);return{scheduleList:n,noShowList:m,addSchedule:V,removeSchedule:$,revertScheduleEdit:Y,scheduleForm:w,setScheduleForm:A,setSchedule:_,selectedSchedule:l,setSelectedSchedule:r,isEditingSchedule:a,setIsEditingSchedule:i,editScheduleForm:f,setEditScheduleForm:h,openScheduleDetail:C,handleScheduleSave:b,handleScheduleEditSave:L,handleScheduleDelete:T,handleScheduleToVisit:v,handleScheduleNoVisit:R}}const $e=[{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 dn(e){const{t:u}=ce.useTranslation(),[t,n]=s.useState(""),[o,l]=s.useState("25"),[r,a]=s.useState("all"),[i,f]=s.useState(1),h=s.useMemo(()=>e.filter(({item:y,status:S})=>!(t&&!y.memo.includes(t)||r!=="all"&&S!==r)),[e,t,r]),C=Math.max(1,Math.ceil(h.length/Number(o))),c=Math.min(i,C),d=s.useMemo(()=>h.slice((c-1)*Number(o),c*Number(o)),[h,c,o]),m=s.useMemo(()=>$e.map(y=>({...y,label:u("common.pageSizeLabel",{n:y.value,defaultValue:y.label})})),[u]);return{vapSearch:t,setVapSearch:n,vapPageSize:o,setVapPageSize:l,vapPageSizeOptions:m,vapStatus:r,setVapStatus:a,vapPage:c,setVapPage:f,vapFiltered:h,vapTotal:C,vapPageItems:d}}function fn(e,u,t){const{t:n}=ce.useTranslation(),[o,l]=s.useState(()=>{const m=t?.initialPageSize;return m&&$e.some(y=>y.value===m)?m:"25"}),[r,a]=s.useState(1),[i,f]=s.useState(u);i!==u&&(f(u),r!==1&&a(1));const h=s.useMemo(()=>$e.map(m=>({...m,label:n("visits.showN",{n:m.value})})),[n]),C=s.useCallback(m=>{l(m),a(1)},[]),c=Math.max(1,Math.ceil(e.length/Number(o))),d=Math.min(r,c);return{pageRows:s.useMemo(()=>e.slice((d-1)*Number(o),d*Number(o)),[e,d,o]),pageSizeProps:{options:h,value:o,onChange:C},paginationProps:{page:d,total:c,onChange:a},setPage:a}}function gn(){const[e,u]=s.useState(null),t=s.useCallback(o=>{u(l=>l?.key===o?{key:o,asc:!l.asc}:{key:o,asc:!0})},[]),n=s.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}}const $u=e=>e==="\uC88C"||e==="\uC6B0"?e:null;function hn(){const[e,u]=s.useState(!1),[t,n]=s.useState("\uC88C"),[o,l]=s.useState({\uC88C:null,\uC6B0:null}),[r,a]=s.useState({\uC88C:[],\uC6B0:[]}),[i,f]=s.useState(!1),[h,C]=s.useState("\uC88C"),c=s.useCallback(m=>{const y=$u(m.direction);y&&(l(S=>({...S,[y]:m})),a(S=>({...S,[y]:[m,...S[y]]})),u(!1))},[]),d=s.useCallback(m=>{const y=$u(m.direction);y&&(l(S=>({...S,[y]:m})),f(!1))},[]);return{showDevice:e,setShowDevice:u,deviceDirection:t,setDeviceDirection:n,devices:o,setDevices:l,deviceHistory:r,setDeviceHistory:a,showDeviceList:i,setShowDeviceList:f,listForSide:h,setListForSide:C,handleDeviceSubmit:c,handleSelectFromList:d}}const mn="__ihab_core_word_pool__";function Ge(){return globalThis[mn]??null}function x(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 le(e,u,t=Math.random){return!Array.isArray(e)||e.length===0||u<=0?[]:u>=e.length?x(e,t):x(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"}},pn=q.indexOf("\u3147"),Gu={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!==pn},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}},Sn={\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"},En={\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 Yu(e){return Sn[e]??e}const su={cho:q,jung:ee,jong:Q},K=e=>Array.isArray(e)?e.length>0:!!e;function iu(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 yn(e,u,t){const n=t.pronOf(e),o=t.decompOf,l=t.sameStructureOnly&&o?o(n):null,r=[];for(const a of u)a!==e&&(t.okSet&&!t.okSet.has(a)||t.pronOf(a)!==n&&(l&&o&&iu(l,o(t.pronOf(a)))||r.push(a)));return r}function Uu(e,u,t){const n=u?.[e];if(!n)return[];const o=t.kind?n[t.kind]??[]:[...n.cho??[],...n.jung??[],...n.jong??[]];return yn(e,o,t)}function Bn(e,u,t,n,o,l,r){const a=["cho","jung","jong"].filter(c=>K(e[c])),i={};for(const c of a){const d=e[c];i[c]=new Set(Array.isArray(d)?d:[d])}const f=o==="pron",h=new Map;for(const c of u){const d=t(l(c));if(d.some(g=>!g))continue;let m=d;if(!f&&(m=t(c),m.length!==d.length||m.some(g=>!g)))continue;const y=d.length,S=h.get(y);S?S.push({w:c,dPron:d,dPos:m}):h.set(y,[{w:c,dPron:d,dPos:m}])}const C=new Map;for(const[c,d]of h){const m=new Map,y=(S,g)=>{const E=S.dPos[g];return E!=null&&a.every(w=>i[w].has(su[w][E[w]]))};for(const S of d){let g;if(r==="head")g=y(S,0)?0:-1;else if(r==="tail")g=y(S,c-1)?c-1:-1;else if(r==="mid"){g=-1;for(let w=1;w<c-1;w++)if(y(S,w)){g=w;break}}else g=S.dPos.findIndex(w=>w!=null&&a.every(A=>i[A].has(su[A][w[A]])));if(g<0)continue;const E=m.get(g);E?E.push(S):m.set(g,[S])}for(const[S,g]of m){const E=new Set(a.map(_=>S+":"+_)),w=_=>{let b="";for(let L=0;L<c;L++){const T=_[L];for(const v of["cho","jung","jong"])b+=(E.has(L+":"+v)?"*":T[v])+"."}return b},A=new Map;for(const _ of d){const b=w(_.dPron),L=A.get(b);L?L.push(_):A.set(b,[_])}for(const _ of g){const b=A.get(w(_.dPron))??[],L=[];for(const T of b){if(T.w===_.w)continue;let v=!0;for(const R of a){const V=_.dPron[S][R],$=T.dPron[S][R];if($===V){v=!1;break}if(f&&i[R].has(su[R][$])){v=!1;break}}v&&(n&&iu(_.dPron,T.dPron)||L.push(T.w))}C.set(_.w,L)}}}return C}const wn=e=>e==null?[]:Array.isArray(e)?e:[e];function bn(e){if([...e].length!==1)return"";const u=P(e);if(!u)return"";const t=Yu(Q[u.jong]),n=t===""?0:Q.indexOf(t);return Ce(u.cho,u.jung,n<0?0:n)}function Ku(e,u){return u.get(e)||bn(e)||e}function cu(e){return e?K(e.cho)?"cho":K(e.jung)?"jung":K(e.jong)?"jong":null:null}function Ee(e,u){const t=(n,o)=>!K(n)||wn(n).includes(o);return t(u.cho,q[e.cho])&&t(u.jung,ee[e.jung])&&t(u.jong,Q[e.jong])}function _e(e,u,t){const n=[...e];if(t!=="pron")return n.map(l=>P(l));const o=[...u.get(e)||e];return o.length!==n.length?n.map(l=>P(l)):o.map(l=>P(l))}function De(e,u,t,n,o){const l=u==="cho"?q:u==="jung"?ee:Q,r=e[u],a=[],i=C=>u==="jung"?_n(Ku(C,o)):Ku(C,o),f=new Map([[i(t),-1]]),h=x(l.map((C,c)=>c).filter(C=>C!==r&&(u!=="cho"||l[C]!=="\u3147")&&(u!=="jong"||C!==0)));for(const C of h){if(a.length>=n)break;const c=u==="cho"?Ce(C,e.jung,e.jong):u==="jung"?Ce(e.cho,C,e.jong):Ce(e.cho,e.jung,C),d=i(c),m=f.get(d);if(m!==void 0){u==="jung"&&m>=0&&o.has(c)&&!o.has(a[m])&&(a[m]=c);continue}f.set(d,a.length),a.push(c)}return a}const An={\u3154:"\u3150",\u3156:"\u3152",\u315A:"\u3159",\u315E:"\u3159"};function _n(e){if([...e].length!==1)return e;const u=P(e);if(!u)return e;const t=An[ee[u.jung]];return t?Ce(u.cho,ee.indexOf(t),u.jong):e}function Dn(e,u,t,n,o,l=null){const r=[...e];if(r.length!==2)return null;const a=r.map(C=>P(C));if(a.some(C=>!C))return null;const i=_e(e,t,n);if(i.some(C=>!C))return null;const f=cu(u);let h=f&&u?i.map((C,c)=>Ee(C,u)?c:-1).filter(C=>C>=0):[0,1];if(l!=null&&(h=h.filter(C=>C!==l)),!h.length)return null;for(const C of x(h)){const c=r[C];if(!o.has(c))continue;const d=De(a[C],f??"cho",c,40,t),m=[];for(const y of d)if(y!==c&&o.has(y)&&!m.includes(y)&&m.push(y),m.length>=2)break;if(!(m.length<2))return{question:e,distractors:[c,...m]}}return null}function On(e,u,t,n,o,l=null){const r=[...e];if(r.length!==3)return null;const a=r.map(C=>P(C));if(a.some(C=>!C))return null;const i=_e(e,t,n);if(i.some(C=>!C))return null;const f=cu(u),h=f&&u?i.map((C,c)=>Ee(C,u)?c:-1).filter(C=>C>=0):[0,1,2];if(!h.length)return null;for(const C of x(h))for(const c of x([0,1,2].filter(d=>d!==C&&(l==null||d===l)))){const d=[0,1,2].filter(E=>E!==c),m=d.map(E=>r[E]).join("");if(!o.has(m))continue;const y=d.indexOf(C),S=De(a[C],f??"cho",r[C],40,t),g=[];for(const E of S){const w=d.map(_=>r[_]);w[y]=E;const A=w.join("");if(A!==m&&o.has(A)&&!g.includes(A)&&g.push(A),g.length>=2)break}if(!(g.length<2))return{question:e,distractors:[m,...g]}}return null}function Nn(e,u,t,n,o,l=null){const r=[...e],a=r.length;if(a<2)return null;const i=[];for(let h=1;h<=a-1;h++)i.push({remain:r.slice(0,h).join(""),dropped:r.slice(h).join(""),droppedEnd:1}),i.push({remain:r.slice(a-h).join(""),dropped:r.slice(0,a-h).join(""),droppedEnd:0});const f=cu(u);for(const{remain:h,dropped:C,droppedEnd:c}of x(i)){if(l!=null&&c!==l||h===e||!o.has(h)||!o.has(C))continue;const d=[...h],m=d.map(g=>P(g));if(m.some(g=>!g))continue;const y=_e(h,t,n);if(y.some(g=>!g))continue;const S=f&&u?y.map((g,E)=>Ee(g,u)?E:-1).filter(g=>g>=0):d.map((g,E)=>E);if(S.length)for(const g of x(S)){const E=De(m[g],f??"cho",d[g],40,t),w=[];for(const A of E){const _=[...d];_[g]=A;const b=_.join("");if(b!==h&&o.has(b)&&!w.includes(b)&&w.push(b),w.length>=2)break}if(w.length>=2)return{question:e,distractors:[h,...w]}}}return null}function Tn(e,u,t,n,o,l=null){if([...e].length!==1)return null;const r=P(t.get(e)||e);if(!r||r.jong===0)return null;const a=Ce(r.cho,r.jung,0),i=De({cho:r.cho,jung:r.jung,jong:0},"cho",a,2,t);return i.length<2?null:{question:e,distractors:[a,...i]}}const Cu=q.indexOf("\u3147");function jn(e,u,t,n,o,l=null){if([...e].length!==1)return null;const r=P(t.get(e)||e);if(!r||r.jong!==0||r.cho===Cu)return null;const a=Ce(Cu,r.jung,0),i=De({cho:Cu,jung:r.jung,jong:0},"jung",a,2,t);return i.length<2?null:{question:e,distractors:[a,...i]}}function In(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 i=0;i<o;i++)r+=i===l?"*":n[i];const a=u.get(r);a?a.push(t):u.set(r,[t])}}return u}function Rn(e,u,t,n,o,l=null,r=null,a=2){const i=[...e],f=i.length;if(f<2||f>3)return null;const h=i.map(E=>P(E));if(h.some(E=>!E))return null;const C=_e(e,t,n);if(C.some(E=>!E))return null;const c=E=>t.get(E)??E,d=c(e),m=!!u&&(K(u.cho)||K(u.jung)||K(u.jong)),y=!!r&&(K(r.cho)||K(r.jung)||K(r.jong)),S=E=>{let w=f+"|"+E+"|";for(let A=0;A<f;A++)w+=A===E?"*":i[A];return w};let g;if(l!=null){if(l>=f||m&&!Ee(C[l],u))return null;g=[l]}else m?g=C.map((E,w)=>Ee(E,u)?w:-1).filter(E=>E>=0):g=Array.from({length:f},(E,w)=>w);for(const E of x(g)){const w=o.get(S(E))??[],A=[],_=[];for(const R of w){if(R===e)continue;const V=[...R].map(M=>P(M)),$=h[E],Y=V[E];if(!$||!Y)continue;let I=0;if($.cho!==Y.cho&&I++,$.jung!==Y.jung&&I++,$.jong!==Y.jong&&I++,!(I<a||c(R)===d))if(y){const M=_e(R,t,n)[E];M&&Ee(M,r)?A.push(R):_.push(R)}else A.push(R)}if(!A.length)continue;const b=x(A)[0],L=[],T=new Set([d,c(b)]),v=y?_:A.filter(R=>R!==b);for(const R of x(v)){const V=c(R);if(!T.has(V)&&(T.add(V),L.push(R),L.length>=2))break}if(!y&&L.length<2)for(const R of x(w)){if(R===e||R===b)continue;const V=c(R);if(!T.has(V)&&(T.add(V),L.push(R),L.length>=2))break}if(!(L.length<2))return{question:e,distractors:[b,...L]}}return null}let Ye=null,Wu=null,qu=null;function Ln(){const e=Ge();if(e&&e.entries.length>0){const u=be();if(Ye&&Wu===e&&qu===u)return Ye;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 Ye=n,Wu=e,qu=u,Ye}return[]}const ue=new Proxy([],{get(e,u){const t=Ln(),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 x(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 du=null,zu=null;function fe(){const e=Ge();if(du&&zu===e)return du;const u=new Map;for(const t of ue)t.w&&u.set(t.w,t.pron);return du=u,zu=e,u}function X(e){return fe().get(e)||e}function fu(e,u,t=new Set){const n=[];for(const o of x(e)){if(n.length>=u)break;const l=X(o);t.has(l)||(t.add(l),n.push(o))}return n}let Mn=0;function z(e){return`${e}-rt-${++Mn}`}function Oe(e){const u=xu();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)tn(n)===!0&&t.add(n);return t}const Ke=new Map;let Ju=null,Xu=null;function Ne(e){return e==null?"":Array.isArray(e)?e.slice().sort().join(","):e}function Zu(e){const u=Ne(e.choseong),t=e.composition,n=t?.syllable==null?"":Array.isArray(t.syllable)?t.syllable.slice().sort().join(","):String(t.syllable),o=t?`${Ne(t.cho)}/${Ne(t.jung)}/${Ne(t.jong)}/${t.jongNone?"N":""}/${n}`:"",l=Ne(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=Ge(),t=be();(u!==Ju||t!==Xu)&&(Ke.clear(),Ju=u,Xu=t);const n=Zu(e);return Ke.has(n)||Ke.set(n,vn(e)),Ke.get(n)}function kn(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=>Wt(r):r=>zt(r,{cho:t,jung:n,jong:l,jongNone:o}):null}async function vn(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,a=e.sameStructureOnly??!0,i=e.phonemeView==="pron"?"pron":"char",f=Math.max(1,e.contrastCount??1),h=u==="cho"||u==="jung"||u==="jong",C=h&&f>=2,c=u==="count",d=t?new Set(Array.isArray(t)?t:[t]):null,m=n?.syllable!=null?new Set(Array.isArray(n.syllable)?n.syllable:[n.syllable]):null,y=n?[kn(n),m?B=>m.has(Ve(B)):null].filter(B=>B!=null):[],S=u==="random"||u===null,g=S||c,E=S||C||c;let w=ue.filter(B=>!B.w||r&&(!B.grade||!r.has(B.grade))?!1:E?!0:Array.isArray(B.p)&&B.p.length>0);d&&(w=w.filter(B=>{for(const D of d)if(Kt(B.w,D))return!0;return!1})),y.length>0&&(w=w.filter(B=>{const D=i==="pron"?X(B.w):B.w;return y.every(G=>G(D))})),o&&(w=w.filter(B=>B.w[0]===o));let A;if(l){const B=new Set;for(const D of w)if(B.add(D.w),Array.isArray(D.p))for(const G of D.p)B.add(G);if(g)for(const D of ue)D.w&&B.add(D.w);A=Oe(B)}else{const B=new Set;for(const D of w)if(B.add(D.w),Array.isArray(D.p))for(const G of D.p)B.add(G);if(g)for(const D of ue)D.w&&B.add(D.w);A=B}let _=null;if(C){const B=new Set;for(const D of ue)D.w&&B.add(D.w);_=l?Oe(B):B}const b=w.filter(B=>A.has(B.w)),L=600,T=Array.from(A),v=T.length>L?te(T,L):T,R=c&&n!=null&&(K(n.cho)||K(n.jung)||K(n.jong)),V=2500,$=new Map;if(c&&!R&&f>=2){for(const B of T){const D=Ve(B),G=$.get(D);G?G.push(B):$.set(D,[B])}for(const[B,D]of $)D.length>V&&$.set(B,te(D,V))}const Y=Yt(),I=R?Bn(n,T,Y,a,i,X):null,M=500,F=1500,J=e.fullCount?b:u==="random"?b.length>M?te(b,M):b:b.length>F?te(b,F):b,se=be(),ie=[];for(const B of J){let D;const G=X(B.w);if(C)D=Xt(B.w,u,f,_,24).filter(H=>X(H)!==G);else if(c)R?D=(I.get(B.w)??[]).filter(H=>X(H)!==G):f<=1?D=Uu(B.w,se,{okSet:A,pronOf:X,decompOf:Y,sameStructureOnly:!1}):D=($.get(Ve(B.w))??[]).filter(H=>{if(H===B.w||X(H)===G)return!1;const O=Zt(B.w,H);return f>=5?O>=5:O===f});else if(S)D=v.filter(H=>H!==B.w&&H.length===B.w.length&&X(H)!==G);else{const H=u;D=Uu(B.w,se,{kind:H,okSet:A,pronOf:X,decompOf:Y,sameStructureOnly:!1}),D.length===0&&(D=(v.length>30?te(v,30):v).filter(O=>O!==B.w&&Ut(B.w,O)===u&&X(O)!==G))}if(a&&D.length>0&&(h||c&&!R)){const H=Y(X(B.w));D=D.filter(O=>!iu(H,Y(X(O))))}D.length!==0&&ie.push({word:B,usable:D})}return ie}async function Qu(e,u){const{choicesPerItem:t=3,count:n=10}=u,o=t-1,l=(await Z(u)).filter(a=>a.usable.length>=o),r=[];for(const a of x(l)){if(r.length>=n)break;const i=fu(a.usable,o);if(i.length<o)continue;const f=x([a.word.w,...i]);r.push({id:z(e+"-item"),index:r.length+1,word:a.word.w,syllables:a.word.s,choices:f,answerIndex:f.indexOf(a.word.w)})}return r}async function xn(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=x([...o]);for(const a of r){if(l.length>=t)break;const i=a.word.w,f=[...a.word.pron||i],h=Ue(f);if(!h)continue;const C=o.filter(m=>m.word.w!==i&&m.word.s===a.word.s&&!(m.word.pron||m.word.w).includes(h)&&m.word.pron!==a.word.pron);if(C.length<n)continue;const c=fu(C.map(m=>m.word.w),n);if(c.length<n)continue;const d=x([i,...c]);l.push({id:z("HPI-item"),index:l.length+1,targetSyllable:h,word:i,choices:d,answerIndex:d.indexOf(i)})}return l}async function Pn(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 a;if(r)a=[l.word.w,l.word.w];else{const i=Ue(l.usable);a=Math.random()<.5?[l.word.w,i]:[i,l.word.w]}return{id:z("SOD-item"),index:o+1,word:l.word.w,pair:a,same:r}}).filter(n=>!!n)}async function Fn(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(c=>c.word.w),r=new Map(o.map(c=>[c.word.w,c.word.pron])),a=c=>(r.get(c)||c)[0]??"",i={};for(const c of o){const d=a(c.word.w);d&&(i[d]||(i[d]=[]),i[d].push(c.word.w))}const f=Object.entries(i).filter(([,c])=>c.length>=2).map(([c])=>c);if(f.length===0)return[];const h=[],C=x([...f]);for(let c=0;h.length<t&&c<t*4;c++){const d=C[c%C.length],m=i[d];if(m.length<2)continue;const y=x([...m]),S=y[0],g=y[1];if(!S||!g||S===g||(r.get(S)||S)===(r.get(g)||g))continue;const E=r.get(g)||g,w=l.filter(b=>a(b)!==d&&b!==S&&b!==g&&b.length===g.length&&(r.get(b)||b)!==E);if(w.length<n)continue;const A=fu(w,n);if(A.length<n)continue;const _=x([g,...A]);h.push({id:z("SWS-item"),index:h.length+1,sourceWord:S,targetSyllable:d,word:g,choices:_,answerIndex:_.indexOf(g)})}return h}function et(e,u,t){return te(e,u).map((n,o)=>{const l=Ue(n.usable)??"",r=[...n.word.w],a=[...l],i=r.findIndex((h,C)=>h!==a[C]),f=x(n.usable.filter(h=>h&&h!==l)).slice(0,2);return{id:z(t),index:o+1,word:n.word.w,original:n.word.w,changed:l,changedFrom:i>=0?r[i]:"",changedTo:i>=0?a[i]:"",distractors:f}})}async function ut(e,u,t){const{count:n=10}=u,o=fe(),l=ue.filter(d=>d.w&&d.s===e),r=u.excludeNoImage?Oe(l.map(d=>d.w)):null,a=r?l.filter(d=>r.has(d.w)):l,i=new Set(a.map(d=>d.w)),f=In(i),h=u.phonemeView??"char",C=u.composition??null,c=[];for(const d of x(a)){if(c.length>=n)break;const m=Rn(d.w,C,o,h,f,null,null);if(!m)continue;const y=m.distractors[0],S=[...d.w],g=[...y],E=S.findIndex((w,A)=>w!==g[A]);c.push({id:z(t),index:c.length+1,word:d.w,original:d.w,changed:y,changedFrom:E>=0?S[E]:"",changedTo:E>=0?g[E]:"",distractors:m.distractors.slice(1)})}return c}async function Vn(e){return ut(2,e,"CS2-item")}async function Hn(e){return ut(3,e,"CS3-item")}async function $n(e){const u=(await Z({...e,difficulty:"count",contrastCount:1})).filter(t=>t.word.s===1&&t.usable.length>=1);return et(u,e.count??10,"CP1-item")}async function Gn(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 et(t,e.count??10,"CP2-item")}async function Yn(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 Un(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 Kn(e){const{count:u=10}=e,t=(await Z({...e})).filter(a=>a.word.s===2),n=fe(),o=new Set(ue.map(a=>a.w)),l=e.phonemeView??"char",r=[];for(const a of x(t)){if(r.length>=u)break;const i=Dn(a.word.w,e.composition??null,n,l,o);if(!i)continue;const[f,...h]=i.distractors,C=[...a.word.w],c=C[0]===f?C[1]:C[0];r.push({id:z("D2-item"),index:r.length+1,original:a.word.w,word:a.word.w,dropped:c,missingResult:f,distractors:h})}return r}async function Wn(e){const{count:u=10}=e,t=(await Z({...e})).filter(a=>a.word.s===3),n=fe(),o=new Set(ue.map(a=>a.w)),l=e.phonemeView??"char",r=[];for(const a of x(t)){if(r.length>=u)break;const i=On(a.word.w,e.composition??null,n,l,o);if(!i)continue;const[f,...h]=i.distractors,C=[...a.word.w];let c="";for(let d=0;d<C.length;d++)if(C.filter((m,y)=>y!==d).join("")===f){c=C[d];break}r.push({id:z("D3-item"),index:r.length+1,original:a.word.w,word:a.word.w,dropped:c,missingResult:f,distractors:h})}return r}async function qn(e){const{count:u=10}=e,t=(await Z({...e})).filter(a=>a.word.s>=2),n=fe(),o=new Set(ue.map(a=>a.w)),l=e.phonemeView??"char",r=[];for(const a of x(t)){if(r.length>=u)break;const i=Nn(a.word.w,e.composition??null,n,l,o);if(!i)continue;const[f,...h]=i.distractors,C=a.word.w,c=C.startsWith(f)?C.slice(f.length):C.endsWith(f)?C.slice(0,C.length-f.length):"";r.push({id:z("DPC-item"),index:r.length+1,original:C,word:C,dropped:c,missingResult:f,distractors:h})}return r}async function zn(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:x(l)}})}function We(e,u,t){const n=ue.filter(r=>r.w&&r.s===e),o=u?Oe(n.map(r=>r.w)):null,l=[];for(const r of n)if(!(o&&!o.has(r.w))){if(t){const a=P(r.w);if(!a||!t(a))continue}l.push(r)}return l}function Jn(e){const u=We(1,e.excludeNoImage??!1,t=>t.jong===0);return te(u,e.count??10).map((t,n)=>{const o=P(t.w);return{id:z("M2P-item"),index:n+1,parts:[q[o.cho],ee[o.jung]],answer:t.w,word:t.w}})}function Xn(e){const u=We(1,e.excludeNoImage??!1,t=>t.jong>0&&!Be[t.jong]);return te(u,e.count??10).map((t,n)=>{const o=P(t.w);return{id:z("M3P-item"),index:n+1,parts:[q[o.cho],ee[o.jung],Q[o.jong]],answer:t.w,word:t.w}})}function Zn(e){const u=Gu.DROP_FINAL_CONSONANT_FROM_1SYLL,t=We(u.syllables,e.excludeNoImage??!1,u.syllable),n=fe(),o=[];for(const l of x(t)){if(o.length>=(e.count??10))break;const r=Tn(l.w,null,n);if(!r)continue;const[a,...i]=r.distractors;o.push({id:z("DFC-item"),index:o.length+1,original:l.w,word:l.w,result:a,distractors:i})}return o}function Qn(e){const u=Gu.REMOVE_CONSONANT_AND_IDENTIFY_PHONEME,t=We(u.syllables,e.excludeNoImage??!1,u.syllable),n=fe(),o=[];for(const l of x(t)){if(o.length>=(e.count??10))break;const r=jn(l.w,null,n);if(!r)continue;const a=P(n.get(l.w)||l.w);if(!a)continue;const[i,...f]=r.distractors;o.push({id:z("RCP-item"),index:o.length+1,base:l.w,word:l.w,missingConsonant:q[a.cho],remaining:i,distractors:f})}return o}const qe=new Map;let tt=null,nt=null;async function ot(e,u={}){const t=Ge(),n=be();(t!==tt||n!==nt)&&(qe.clear(),tt=t,nt=n);const o=`${e}:${Zu(u)}`;if(qe.has(o))return qe.get(o);const l=await uo(e,u);return qe.set(o,l),l}const eo={SAME_SOUND_PICK:e=>Qu("SSP",e),HEAR_AND_PICK_SAME:e=>Qu("HPS",e),HEAR_AND_PICK_INCLUDED:e=>xn(e),SAME_OR_DIFF:e=>Pn(e),STARTS_WITH_SAME_SOUND:e=>Fn(e),LISTEN_AND_REMEMBER_ORDER:e=>zn(e),MERGE_2_SYLLABLES:e=>Yn(e),MERGE_3_SYLLABLES:e=>Un(e),MERGE_2_PHONEMES:e=>Jn(e),MERGE_3_PHONEMES:e=>Xn(e),DROP_1_FROM_2SYLL:e=>Kn(e),DROP_1_FROM_3SYLL:e=>Wn(e),DROP_PART_FROM_COMPOUND:e=>qn(e),DROP_FINAL_CONSONANT_FROM_1SYLL:e=>Zn(e),REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:e=>Qn(e),CHANGE_1_SYLL_IN_2SYLL:e=>Vn(e),CHANGE_1_SYLL_IN_3SYLL:e=>Hn(e),CHANGE_1_PHONEME_IN_1SYLL:e=>$n(e),CHANGE_1_PHONEME_IN_2SYLL:e=>Gn(e)};async function uo(e,u={}){const t=eo[e];return t?await t(u):[]}async function to(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];ot(l,{difficulty:r.difficulty?o:null,choseong:null,count:10,excludeNoImage:e}).catch(()=>{}),++n%6===0&&await new Promise(a=>setTimeout(a,0))}}async function no(e){return(await Z({...e,fullCount:!0})).length}async function oo(e={}){const u=[];for(const a of ue)a.w&&u.push(a.w);const t=e.excludeNoImage?Oe(u):u,n=new Set,o=new Set,l=new Set,r=new Set;for(const a of t){r.add(Ve(a));for(const i of a){const f=P(i);if(f&&(q[f.cho]!=="\u3147"&&n.add(q[f.cho]),o.add(ee[f.jung]),f.jong>0)){l.add(Q[f.jong]);const h=Be[f.jong];h&&h.forEach(C=>l.add(C))}}}return{cho:n,jung:o,jong:l,syllable:r}}const ge="\uC804\uCCB4";function lt(){const{t:e}=ce.useTranslation();return s.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 rt(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 at(e){return{label:e.partOfSpeech,items:Object.keys(e.posMap),multiple:!0,allOption:!0}}function st(e){return{label:e.wordType,items:Object.keys(e.typeMap),multiple:!0,allOption:!0}}function lo(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 ro(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 ao(e,u){const{label:t,headValue:n,midValue:o,tailValue:l,includeMid:r=!0,headDisabled:a,midDisabled:i,tailDisabled:f,allOptionDisabled:h,groupLabel:C,labelAction:c}=u;return{label:t,...C?{groupLabel:C}:{},...c?{labelAction:c}:{},allOption:!0,allLabel:e("wordSearch.filter.positionAny",{defaultValue:"\uBB34\uAD00"}),...h?{allOptionDisabled:h}:{},items:[{value:n,displayLabel:e("wordSearch.filter.positionHead",{defaultValue:"\uC5B4\uB450"}),disabled:a},...r?[{value:o,displayLabel:e("wordSearch.filter.positionMid",{defaultValue:"\uC5B4\uC911"}),disabled:i}]:[],{value:l,displayLabel:e("wordSearch.filter.positionTail",{defaultValue:"\uC5B4\uB9D0"}),disabled:f}]}}function so(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(En).map(([e,{nucleus:u}])=>[e,u]));const io={\uACE0\uC720\uC5B4:"\uACE0\uC720",\uD55C\uC790\uC5B4:"\uD55C\uC790",\uC678\uB798\uC5B4:"\uC678\uB798",\uD63C\uC885\uC5B4:"\uD63C\uC885"},co={"\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"]},Co={difficulty:"\uB09C\uC774\uB3C4 \uB4F1\uAE09",syllables:"\uC74C\uC808 \uC218",syllable5plus:"5\uC74C\uC808 \uC774\uC0C1",partOfSpeech:"\uD488\uC0AC",wordType:"\uC720\uD615",posMap:co,typeMap:io};function fo(e,u,t=Co){const n=u[t.difficulty];if(n?.length&&!n.some(a=>e.grade===a.replace(/\D/g,"")))return!1;const o=u[t.syllables];if(o?.length){const a=e.syllables??0;if(!o.some(i=>i===t.syllable5plus?a>=5:a===parseInt(i)))return!1}const l=u[t.partOfSpeech];if(l?.length&&!l.flatMap(a=>t.posMap[a]??[a]).some(a=>(e.pos??"").includes(a)))return!1;const r=u[t.wordType];return!(r?.length&&!r.some(a=>e.wordType===t.typeMap[a]))}const go={labial:e=>e("common.phonetics.place.labial",{defaultValue:"\uC591\uC21C\uC74C"}),alveolar:e=>e("common.phonetics.place.alveolar",{defaultValue:"\uCE58\uC870\uC74C"}),palatal:e=>e("common.phonetics.place.palatal",{defaultValue:"\uACBD\uAD6C\uAC1C\uC74C"}),velar:e=>e("common.phonetics.place.velar",{defaultValue:"\uC5F0\uAD6C\uAC1C\uC74C"}),glottal:e=>e("common.phonetics.place.glottal",{defaultValue:"\uC131\uBB38\uC74C"})},ho={frontHigh:e=>e("common.phonetics.vowel.frontHigh",{defaultValue:"\uC804\uC124 \uACE0\uBAA8\uC74C"}),backHighUnrounded:e=>e("common.phonetics.vowel.backHighUnrounded",{defaultValue:"\uD6C4\uC124 \uACE0\uBAA8\uC74C \uD3C9\uC21C"}),backHighRounded:e=>e("common.phonetics.vowel.backHighRounded",{defaultValue:"\uD6C4\uC124 \uACE0\uBAA8\uC74C \uC6D0\uC21C"}),frontMid:e=>e("common.phonetics.vowel.frontMid",{defaultValue:"\uC804\uC124 \uC911\uBAA8\uC74C"}),backMidUnrounded:e=>e("common.phonetics.vowel.backMidUnrounded",{defaultValue:"\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C"}),backMidRounded:e=>e("common.phonetics.vowel.backMidRounded",{defaultValue:"\uD6C4\uC124 \uC911\uBAA8\uC74C \uC6D0\uC21C"}),low:e=>e("common.phonetics.vowel.low",{defaultValue:"\uC800\uBAA8\uC74C"})},mo={j:e=>e("common.phonetics.glide.j",{defaultValue:"j\uD65C\uC74C"}),w:e=>e("common.phonetics.glide.w",{defaultValue:"w\uD65C\uC74C"}),velar:e=>e("common.phonetics.glide.velar",{defaultValue:"\u0270\uD65C\uC74C"})};function it(e,u){if("place"in u)return go[u.place](e);const t=ho[u.vowel](e);return u.glide?`${t} \xB7 ${mo[u.glide](e)}`:t}const po=(e,{defaultValue:u})=>u,ct=(e,u)=>({jamos:e,phonetic:u,tooltip:it(po,u)}),re=(e,u)=>u.map(t=>ct([t],{place:e})),W=(e,u,t)=>ct([...e],t?{vowel:u,glide:t}:{vowel:u}),gu={cho:[re("labial",["\u3142","\u3143","\u314D","\u3141"]),re("alveolar",["\u3137","\u3138","\u314C","\u3134","\u3139"]),re("alveolar",["\u3145","\u3146"]),re("palatal",["\u3148","\u3149","\u314A"]),re("velar",["\u3131","\u3132","\u314B"]),re("glottal",["\u314E"])],jung:[[W("\u3163","frontHigh"),W("\u315F","frontHigh","w"),W("\u3162","frontHigh","velar")],[W("\u3161","backHighUnrounded")],[W("\u315C","backHighRounded"),W("\u3160","backHighRounded","j")],[W("\u3154\u3150","frontMid"),W("\u3156\u3152","frontMid","j"),W("\u3159\u315A\u315E","frontMid","w")],[W("\u3153","backMidUnrounded"),W("\u3155","backMidUnrounded","j"),W("\u315D","backMidUnrounded","w")],[W("\u3157","backMidRounded"),W("\u315B","backMidRounded","j")],[W("\u314F","low"),W("\u3151","low","j"),W("\u3158","low","w")]],jong:[re("labial",["\u3142","\u3141"]),re("alveolar",["\u3137","\u3134","\u3139"]),re("velar",["\u3131","\u3147"])]},So=[...q],Eo=[...ee],yo=Q.filter(e=>e!==""),ae=e=>e===ne?[]:Array.from(e),ne="__NO_CODA__",Ct=[1,2,3,4],oe=5,Bo=12,dt="SYL_",hu=e=>`${dt}${e}`,wo=e=>Number(e.slice(dt.length));function mu(e){return e>=oe?Array.from({length:Bo-oe+1},(u,t)=>oe+t):[e]}const ft={cho:So,jung:Eo,jong:yo},pu=e=>e.map(u=>u.map(({jamos:t,phonetic:n,tooltip:o})=>({v:t.join(""),phonetic:n,tooltip:o}))),Su={cho:pu(gu.cho),jung:pu(gu.jung),jong:pu(gu.jong)},gt={};Su.jung.flat().forEach(({v:e})=>{for(const u of ae(e))gt[u]=e});const bo=new Set(Su.cho.flat().map(e=>e.v));function ht(e,u){return e==="cho"?bo.has(u)?u:null:e==="jung"?gt[u]??u:Yu(u)}function mt(e,u,t){if(e==="jung"){const n=ae(u);return t&&n.includes(t)?t:n[0]??u}return u}function pt(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 Eu={cho:null,jung:null,jong:null,syllable:null},Ao="wt_filter",St=e=>`wt_filter_${e}`;function Et(e){try{const u=localStorage.getItem(St(e))??localStorage.getItem(Ao);if(u)return JSON.parse(u)}catch{}return null}function yt(e){const u=e?.phonemeView;return u==="pron"?"pron":u==="direct"?"direct":"char"}function _o(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?{...Eu,cho:u.choseong}:Eu}function Do(e,u,t){const{t:n,i18n:o}=ce.useTranslation(),[l]=s.useState(()=>t?.resetOnMount?null:Et(e)),[r,a]=s.useState(yt(l)),[i,f]=s.useState(()=>_o(l)),h=s.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]);s.useEffect(()=>{!u.requireSyllable&&u.fixedSyllable==null&&!u.fixedNoCoda||f(p=>p.cho||p.jung||p.syllable!=null||p.jong?p:h())},[]);const C=s.useMemo(()=>K(i.cho)||K(i.jung)||K(i.jong)?"count":"random",[i.cho,i.jung,i.jong]),c=s.useRef(r==="char"?i.jung:null);s.useEffect(()=>{r==="char"&&(c.current=i.jung)},[r,i.jung]);const[d,m]=s.useState(t?.resetOnMount?!!t?.defaultImageOnly:l?.excludeNoImage??!0),[y,S]=s.useState(t?.resetOnMount?!1:l?.sameStructureOnly??!0),[g,E]=s.useState(Array.isArray(l?.gradeFilter)?l.gradeFilter:[]),[w,A]=s.useState(Array.isArray(l?.posFilter)?l.posFilter:[]),[_,b]=s.useState(Array.isArray(l?.wordTypeFilter)?l.wordTypeFilter:[]),L=s.useRef(t?.resetKey);s.useEffect(()=>{L.current!==t?.resetKey&&(L.current=t?.resetKey,f(h()),m(!1),S(!1),E([]),A([]),b([]))},[t?.resetKey]);const T=lt(),[v,R]=s.useState({cho:new Set,jung:new Set,jong:new Set,syllable:new Set}),[V,$]=s.useState(!1),[Y,I]=s.useState(null),M=1,F=Math.max(1,[i.cho,i.jung,i.jong].filter(Boolean).length),[J,se]=s.useState(e);s.useEffect(()=>{if(J!==e){if(!t?.resetOnMount){const p=Et(e);f(p?.composition??h()),m(p?.excludeNoImage??!0),S(p?.sameStructureOnly??!0),a(yt(p)),E(Array.isArray(p?.gradeFilter)?p.gradeFilter:[]),A(Array.isArray(p?.posFilter)?p.posFilter:[]),b(Array.isArray(p?.wordTypeFilter)?p.wordTypeFilter:[])}se(e)}},[e,J,t?.resetOnMount]),s.useEffect(()=>{if(!t?.resetOnMount&&J===e)try{localStorage.setItem(St(e),JSON.stringify({contrastCount:F,composition:i,excludeNoImage:d,sameStructureOnly:y,phonemeView:r,gradeFilter:g,posFilter:w,wordTypeFilter:_}))}catch{}},[t?.resetOnMount,e,J,F,i,d,y,r,g,w,_]);const[ie,B]=s.useState(0);ju("wordpool:update",()=>B(p=>p+1));const D=s.useRef(o.language);s.useEffect(()=>{D.current!==o.language&&(D.current=o.language,B(p=>p+1))},[o.language]),s.useEffect(()=>{if(!u.choseong)return;let p=!1;return oo({difficulty:C,excludeNoImage:d}).then(j=>{p||(R(j),j.cho.size+j.jung.size+j.jong.size>0&&$(!0))}).catch(()=>{p||R({cho:new Set,jung:new Set,jong:new Set,syllable:new Set})}),()=>{p=!0}},[u.choseong,C,d,ie]),s.useEffect(()=>{let p=!1;const j=i,N=j.cho?ae(j.cho):null,k=j.jung?ae(j.jung):null,U=j.jong===ne,he=U?null:j.jong?ae(j.jong):null,me=j.syllable!=null?mu(j.syllable):null,Pe=!!(N||k||he||U||me);return no({difficulty:u.difficulty?C:null,contrastCount:u.difficulty?F:1,composition:u.choseong&&Pe?{cho:N,jung:k,jong:he,jongNone:U,syllable:me}:null,excludeNoImage:d,sameStructureOnly:y,phonemeView:r==="pron"?"pron":"char",grade:g.length>0?g:null}).then(Fe=>{p||I(Fe)}).catch(()=>{p||I(null)}),()=>{p=!0}},[u.choseong,u.difficulty,C,F,i,r,d,y,ie,g]),s.useEffect(()=>{V&&f(p=>{const j={...p};let N=!1;return["cho","jung","jong"].forEach(k=>{const U=p[k];!U||U===ne||ae(U).some(he=>v[k].has(he))||(j[k]=null,N=!0)}),p.syllable!=null&&u.fixedSyllable==null&&(p.syllable>=oe?[...v.syllable].some(k=>k>=oe)||(j.syllable=null,N=!0):(!v.syllable.has(p.syllable)||p.syllable<M)&&(j.syllable=null,N=!0)),N?j:p})},[v,V,M,u.fixedSyllable]);const G=s.useMemo(()=>{const p=j=>{const N=new Set;for(const k of ft[j])v[j].has(k)&&N.add(k);return N};return{cho:p("cho"),jung:p("jung"),jong:p("jong")}},[v]),H=s.useMemo(()=>({exact:new Set(Ct.filter(p=>v.syllable.has(p))),min:[...v.syllable].some(p=>p>=oe)}),[v]),O=s.useMemo(()=>({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]),Au=s.useMemo(()=>({[O.trainOnset]:"cho",[O.trainVowel]:"jung",[O.trainCoda]:"jong"}),[O]),xe=s.useCallback((p,j)=>({title:j,items:p}),[]),tu=s.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=s.useMemo(()=>{const p=[];if(u.choseong){const j={value:ne,displayLabel:O.codaExclude},N=u.fixedNoCoda===!0,k=(U,he)=>{const me=N&&U==="jong",Pe={label:he,groupLabel:O.phonemeGroup,allOption:!u.requireSyllable,allLabel:O.noLimit,allOptionDisabled:me};if(r==="pron"){const pe=Su[U].map(Lt=>Lt.map(({v:nu,phonetic:Mt})=>{const ou=ae(nu),_u=it(n,Mt),Du=me||!ou.some(kt=>v[U].has(kt));return ou.length>1?{value:nu,labels:ou,tooltip:_u,disabled:Du}:{value:nu,tooltip:_u,disabled:Du}}));return U==="jong"&&!u.requireCoda&&pe.unshift([j]),{...Pe,groups:pe}}const Fe=ft[U].map(pe=>!me&&G[U].has(pe)?pe:{value:pe,disabled:!0});return{...Pe,items:U==="jong"&&!u.requireCoda?[j,...Fe]:Fe}};p.push(k("cho",O.trainOnset)),p.push(k("jung",O.trainVowel)),p.push(k("jong",O.trainCoda))}if(p.push({...rt(n,T,{labelInfo:xe([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:O.gradeLabel}),u.partOfSpeech&&p.push(at(T)),u.wordType&&p.push(st(T)),u.choseong||u.fixedSyllable!=null){const j=u.fixedSyllable;p.push({label:O.syllableCount,items:[...Ct.map(N=>({value:hu(N),displayLabel:n("wordPairs.syllableN",{n:N,defaultValue:"{{n}}\uC74C\uC808"}),disabled:j!=null?N!==j:!H.exact.has(N)||N<M})),{value:hu(oe),displayLabel:n("wordPairs.syllableNPlus",{n:oe,defaultValue:"{{n}}\uC74C\uC808 \uC774\uC0C1"}),disabled:j!=null?oe!==j:!H.min}],allOption:!0,allOptionDisabled:j!=null})}return u.choseong?p.push({label:O.exclude,displayLabel:O.selectLabel,multiple:!0,items:[O.excludeImage,O.sameStructure],labelInfo:xe(tu)}):p.push({label:O.exclude,displayLabel:O.selectLabel,multiple:!0,items:[O.excludeImage],labelInfo:xe([tu[0]])}),p},[u.choseong,u.partOfSpeech,u.wordType,u.requireSyllable,u.fixedSyllable,u.fixedNoCoda,u.requireCoda,M,G,v,r,H,O,n,xe,tu,T]),Ot={...(u.choseong||u.fixedSyllable!=null)&&i.syllable!=null?{[O.syllableCount]:hu(i.syllable)}:{},...u.choseong&&i.cho?{[O.trainOnset]:i.cho}:{},...u.choseong&&i.jung?{[O.trainVowel]:i.jung}:{},...u.choseong&&i.jong?{[O.trainCoda]:i.jong}:{},[O.exclude]:[...d?[O.excludeImage]:[],...y?[O.sameStructure]:[]],[O.gradeLabel]:g.map(p=>n("wordSearch.filter.grade",{n:Number(p),defaultValue:"{{n}}\uB4F1\uAE09"})),...u.partOfSpeech?{[T.partOfSpeech]:w}:{},...u.wordType?{[T.wordType]:_}:{}},Nt=s.useCallback((p,j)=>{if(j===O.exclude)p===O.excludeImage?m(N=>!N):p===O.sameStructure&&S(N=>!N);else if(j===O.syllableCount)f(N=>{if(!p||p===ge)return{...N,syllable:null};const k=wo(p);return{...N,syllable:N.syllable===k?null:k}});else if(j===O.gradeLabel){if(!p||p===ge){E([]);return}const N=p.replace(/\D/g,"");E(k=>k.includes(N)?k.filter(U=>U!==N):[...k,N])}else if(j===T.partOfSpeech){if(!p||p===ge){A([]);return}A(N=>N.includes(p)?N.filter(k=>k!==p):[...N,p])}else if(j===T.wordType){if(!p||p===ge){b([]);return}b(N=>N.includes(p)?N.filter(k=>k!==p):[...N,p])}else{const N=Au[j];if(!N)return;f(k=>u.requireSyllable?p&&p!==ge?{...k,[N]:p}:k:!p||p===ge||k[N]===p?{...k,[N]:null}:{...k,[N]:p})}},[O,Au,T,u.requireSyllable]),Tt=s.useCallback(p=>!u.partOfSpeech&&!u.wordType?!0:fo(p,{...u.partOfSpeech?{[T.partOfSpeech]:w}:{},...u.wordType?{[T.wordType]:_}:{}},T),[u.partOfSpeech,u.wordType,w,_,T]),jt=s.useCallback(p=>{p!==r&&(p!=="direct"&&r!=="direct"&&f(j=>pt(j,p,c.current)),a(p))},[r]),It=s.useCallback(()=>({composition:i,contrastCount:F,excludeNoImage:d,sameStructureOnly:y,phonemeView:r,gradeFilter:g,posFilter:w,wordTypeFilter:_}),[i,F,d,y,r,g,w,_]),Rt=s.useCallback(p=>{f(p.composition),m(p.excludeNoImage),S(p.sameStructureOnly??!0),a(p.phonemeView),E(Array.isArray(p.gradeFilter)?p.gradeFilter:[]),Array.isArray(p.posFilter)&&A(p.posFilter),Array.isArray(p.wordTypeFilter)&&b(p.wordTypeFilter)},[]);return{difficulty:C,contrastCount:F,composition:i,choseong:i.cho,excludeNoImage:d,sameStructureOnly:y,gradeFilter:g,posFilter:w,wordTypeFilter:_,matchesWordAttributes:Tt,poolVersion:ie,filterSections:Dt,filterSelected:Ot,handleFilterSelect:Nt,phonemeView:r,setPhonemeView:jt,phonemeGroupLabel:O.phonemeGroup,wordCount:Y,getFilterSnapshot:It,restoreFilterSnapshot:Rt}}function Oo(e){const u=a=>a?ae(a):null,t=u(e.cho),n=u(e.jung),o=e.jong===ne,l=o?null:u(e.jong),r=e.syllable!=null?mu(e.syllable):null;return!t&&!n&&!l&&!o&&!r?null:{cho:t,jung:n,jong:l,jongNone:o,syllable:r}}function No(e,u,t,n,o,l,r=!0,a="char",i=[]){const[f,h]=s.useState({}),[C,c]=s.useState(!1),{cho:d=null,jung:m=null,jong:y=null,syllable:S=null}=n??{},g=i.length>0?i.slice().sort().join(","):"";return s.useEffect(()=>{l>0&&to(o).catch(()=>{})},[l,o]),s.useEffect(()=>{let E=!1;return c(!0),(async()=>{const w=Oo({cho:d,jung:m,jong:y,syllable:S}),A=`${d??""}_${m??""}_${y??""}_${S??""}_${g}`,_={};await Promise.all(e.map(async b=>{const L=au[b.key];try{const T=await ot(b.key,{difficulty:L.difficulty?u:null,contrastCount:L.difficulty?t:1,composition:L.choseong?w:null,count:5,excludeNoImage:o,sameStructureOnly:r,phonemeView:a,grade:i.length>0?i:null});T&&T.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:T,itemCount:T.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}})),E||(h(_),c(!1))})(),()=>{E=!0}},[u,t,d,m,y,S,o,r,a,l,g]),{perTypeData:f,generating:C}}function To(){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 Te=[],je=[],Ie=[],Re=[],Je={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},Xe={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},jo={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let yu=null,Bt=null,de=null;function Io({counts:e,forceRefresh:u}={}){const t=Object.assign({},jo,e||{}),n=To(),o=ze(new Date(`${n}T00:00:00+09:00`).getTime()-864e5),l=JSON.stringify(t);if(!u&&Bt===n&&yu===l&&de)return Object.assign(Je,de.today),Object.assign(Xe,de.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:Je,yesterday:Xe};const r={LISTEN_IN_NOISE:le(Te,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:le(je,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:le(Ie,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:le(Re,Math.max(0,Number(t.ORDERING_SENTENCE)||0))};let a=null;return de&&yu===l&&de.yesterday&&de.yesterday.date===o&&(a=de.yesterday.selection),a||(a={LISTEN_IN_NOISE:le(Te,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:le(je,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:le(Ie,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:le(Re,Math.max(0,Number(t.ORDERING_SENTENCE)||0))}),Object.assign(Je,r),Object.assign(Xe,a),Bt=n,yu=l,de={today:r,yesterday:{date:o,countsKey:l,selection:a}},{today:Je,yesterday:Xe}}let wt=!1,Le=null;async function Ro(){try{const e={url:typeof document>"u"?require("url").pathToFileURL(__filename).href:lu&&lu.tagName.toUpperCase()==="SCRIPT"&&lu.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 Lo(){if(!wt)return Le||(Le=(async()=>{const e=await Ro();if(!e){Le=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||""),a=String(o.category_sub_code||o.category_sub||o.category_1||""),i=Object.assign({},o,{training_type:l,category_0:r,category_1:a});l==="LISTEN_IN_NOISE"?Te.push(i):l==="SHORT_STORY"?je.push(i):l==="LONG_STORY"?Ie.push(i):l==="ORDERING_SENTENCE"&&Re.push(i)}}}catch{Le=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}try{Io()}catch{}wt=!0})(),Le)}async function Mo(e=3e3){const u=Lo();return Promise.race([u,new Promise(t=>setTimeout(t,e))])}function ko(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 vo(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 Ze=le;function Bu(e,u){const t=u?vo(ko(u)):Math.random;return{LISTEN_IN_NOISE:Ze(Te,Math.max(0,e.LISTEN_IN_NOISE||0),t),SHORT_STORY:Ze(je,Math.max(0,e.SHORT_STORY||0),t),LONG_STORY:Ze(Ie,Math.max(0,e.LONG_STORY||0),t),ORDERING_SENTENCE:Ze(Re,Math.max(0,e.ORDERING_SENTENCE||0),t)}}function bt(e){return e?!!(e.LISTEN_IN_NOISE?.length||e.SHORT_STORY?.length||e.LONG_STORY?.length||e.ORDERING_SENTENCE?.length):!1}const xo={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};function At(e=!1,u=xo,t){const n=ze(Date.now()),o=ze(Date.now()-864e5),l=`${t??""}|${n}`,r=`${t??""}|${o}`;return Te.length>0||je.length>0||Ie.length>0||Re.length>0?{today:Bu(u,l),yesterday:Bu(u,r)}:{today:Bu(u,l),yesterday:null}}function Po(e){const u=s.useRef({LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),t=s.useRef(null),[n,o]=s.useState(!1),[l,r]=s.useState(!1),[a,i]=s.useState(0),[f,h]=s.useState(!1);s.useEffect(()=>{let c=!1,d,m=0;const y=40,S=()=>{d!==void 0&&(clearInterval(d),d=void 0)};let g=!1;try{const A=new URLSearchParams(window.location.search),_=A.get("forceRefresh")||A.get("force");g=_==="1"||_==="true"}catch{}const E=A=>{u.current=A.today,t.current=A.yesterday,o(!0),h(!0),i(_=>_+1),c=!0,S()},w=async()=>{if(c)return;if(!g){const _=At(!1,void 0,e);if(bt(_.today)){E(_);return}}try{await Mo(3e3)}catch{}if(c)return;const A=At(g,void 0,e);if(bt(A.today)){E(A);return}++m>=y&&(o(!0),h(!1),c=!0,S())};return w(),d=setInterval(w,250),()=>{c=!0,S()}},[e]);const C=s.useCallback(c=>{const d=l?t.current:u.current,m=l?u.current:t.current;return d?.[c]?.length?d[c]:m?.[c]?.length?m[c]:void 0},[l,a]);return{loaded:n,hasData:f,showYesterday:l,setShowYesterday:r,getTrainingPerType:C}}const ye=[];let Qe=!1;function _t(e){if(e.key!=="Escape"||e.defaultPrevented)return;const u=ye[ye.length-1];u&&(e.stopPropagation(),u())}function Fo(e){return ye.push(e),!Qe&&typeof document<"u"&&(document.addEventListener("keydown",_t),Qe=!0),()=>{const u=ye.lastIndexOf(e);u>=0&&ye.splice(u,1),ye.length===0&&Qe&&typeof document<"u"&&(document.removeEventListener("keydown",_t),Qe=!1)}}function Vo(e,u=!0){const t=Tu(e);s.useEffect(()=>{if(u)return Fo(()=>{t.current?.()})},[u,t])}const wu=(e,u)=>`${e}:${u??1}`,bu=new Map;function Ho(e,u){const[t,n]=s.useState(0),o=e.map(l=>wu(l.word,l.homonum)).join("|");return s.useEffect(()=>{const l=(o?o.split("|"):[]).filter(i=>!bu.has(i));if(l.length===0)return;let r=!1;const a=Array.from(new Set(l.map(i=>i.slice(0,i.lastIndexOf(":")))));return u(a).then(i=>{if(!(r||i.length===0)){for(const f of i)f.Meaning&&bu.set(wu(f.Word,f.Homonum??void 0),f.Meaning);n(f=>f+1)}}).catch(()=>{}),()=>{r=!0}},[o,u]),s.useMemo(()=>{const l=o?o.split("|"):[],r=new Map;for(const a of l){const i=bu.get(a);i!=null&&r.set(a,i)}return r},[o,t])}function $o(){const[e,u]=s.useState(null),t=s.useCallback(l=>u(l.getBoundingClientRect()),[]),n=s.useCallback(()=>u(null),[]),o=s.useCallback(l=>{const r=l.getBoundingClientRect();u(a=>a?null:r)},[]);return{anchorRect:e,isOpen:e!=null,openAt:t,close:n,toggleAt:o}}function Go(e){const[u,t]=s.useState(null),[n,o]=s.useState(null),l=s.useRef(null);s.useEffect(()=>()=>{l.current&&clearTimeout(l.current)},[]);const r=s.useCallback((i,f)=>{l.current&&clearTimeout(l.current),l.current=setTimeout(()=>{t(i),o(f)},e)},[e]),a=s.useCallback(()=>{l.current&&clearTimeout(l.current),t(null),o(null)},[]);return{payload:u,anchorRect:n,openAfterDelay:r,close:a}}function Yo(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:s.useMemo(()=>e.slice((l-1)*n,l*n),[e,l,n]),totalPages:o,curPage:l}}function Uo(e="warning"){const[u,t]=s.useState(""),[n,o]=s.useState(e),[l,r]=s.useState(0),a=s.useCallback((C,c)=>{o(c),t(C),r(d=>d+1)},[]),i=s.useCallback(C=>a(C,"warning"),[a]),f=s.useCallback(C=>a(C,"normal"),[a]),h=s.useCallback(()=>t(""),[]);return{toastMessage:u,toastType:n,toastKey:l,showToast:a,showWarning:i,showNormal:f,clearToast:h}}const Ko=[{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."}],Wo={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};function qo(e){return Ko.map(u=>{const t=Wo[u.key];return t?{...u,label:e(`trainingType.${t}.title`),desc:e(`trainingType.${t}.desc`)}:u})}const Me={blue:"#60A5FA",green:"#4ADE80",amber:"#FBBF24",purple:"#A78BFA",pink:"#F472B6"},ke=Me.blue,eu=Me.green,ve=Me.amber,uu=Me.purple,zo=Me.pink,Jo=[{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:ke,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:ke,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:ke,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:ke,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:ke,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:ve,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:ve,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:ve,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:ve,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:ve,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:zo,subTitle:"\uC138 \uB2E8\uC5B4\uB97C \uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCE74\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694."}]}];function Xo(){const{t:e}=ce.useTranslation();return s.useMemo(()=>{const u=Object.fromEntries(qo(e).map(n=>[n.key,n.label])),t={...u};return Jo.flatMap(n=>n.types).forEach(n=>{t[n.key]=e(`trainingType.${n.key}.label`,{defaultValue:n.label})}),{sentence:u,all:t}},[e])}const Zo="0.132.0";function Qo({computeStyle:e,onScroll:u="close",onResize:t="close",ignoreOutsideClickSelector:n}){const[o,l]=s.useState(!1),[r,a]=s.useState({}),i=s.useRef(null),f=s.useRef(null),h=s.useCallback(()=>{i.current&&a(e(i.current.getBoundingClientRect()))},[e]);s.useEffect(()=>{if(!o)return;h();const d=g=>{const E=g.target;n&&E.closest?.(n)||i.current?.contains(E)||f.current?.contains(E)||l(!1)};document.addEventListener("mousedown",d);const m=g=>{f.current?.contains(g.target)||(u==="reposition"?h():u==="close"&&l(!1))};u!=="ignore"&&window.addEventListener("scroll",m,!0);const y=()=>{t==="reposition"?h():t==="close"&&l(!1)};t!=="ignore"&&window.addEventListener("resize",y);const S=g=>{g.key==="Escape"&&l(!1)};return document.addEventListener("keydown",S),()=>{document.removeEventListener("mousedown",d),u!=="ignore"&&window.removeEventListener("scroll",m,!0),t!=="ignore"&&window.removeEventListener("resize",y),document.removeEventListener("keydown",S)}},[o,h,u,t,n]);const C=s.useCallback(()=>l(d=>!d),[]),c=s.useCallback(()=>l(!1),[]);return{open:o,setOpen:l,toggle:C,close:c,style:r,triggerRef:i,menuRef:f}}function el(e,{mode:u="playback",autoStart:t=!1,onPlaySpeaker:n,onComplete:o,playMs:l=1100,feedbackMs:r=1500}={}){const[a,i]=s.useState([]),[f,h]=s.useState(0),[C,c]=s.useState("idle"),[d,m]=s.useState(null),[y,S]=s.useState([]),[g,E]=s.useState(null),[w,A]=s.useState(0),_=s.useRef(0),b=s.useCallback(B=>{_.current=typeof B=="function"?B(_.current):B,A(_.current)},[]),L=s.useRef(n),T=s.useRef(o);s.useEffect(()=>{L.current=n,T.current=o},[n,o]);const v=s.useRef([]),R=()=>{v.current.forEach(clearTimeout),v.current=[]},V=(B,D)=>{v.current.push(setTimeout(D,B))};s.useEffect(()=>()=>R(),[]);const $=a[f]?.id??null,Y=s.useCallback(()=>{R(),c("playing"),S([]),E(null),b(0);let B=0;e.forEach((D,G)=>{V(B,()=>{h(G),m(D.id),L.current?.(D)}),V(B+1e3,()=>{m(null),S(H=>[...H,D.id])}),B+=1300}),V(B,()=>{c("done"),T.current?.({score:0,total:e.length})})},[e,b]),I=s.useCallback((B,D)=>{if(D>=B.length){c("done"),T.current?.({score:_.current,total:B.length});return}h(D),E(null),c("playing"),m(B[D].id),L.current?.(B[D]),V(l,()=>{m(null),c("waiting")})},[l]),M=s.useCallback(()=>{R();const B=x(e);i(B),b(0),S([]),I(B,0)},[e,I,b]),F=s.useCallback(()=>{u==="playback"?(i(e),Y()):M()},[u,e,Y,M]),J=s.useCallback(()=>{R(),c("idle"),m(null),S([]),E(null),h(0),b(0),i([])},[b]);s.useEffect(()=>{t?F():J()},[u,e.length,t]);const se=s.useCallback(B=>{C!=="waiting"||u==="playback"||(E(B),B===a[f]?.id&&b(D=>D+1),u==="exam"?(c("playing"),V(400,()=>I(a,f+1))):(c("feedback"),V(r,()=>I(a,f+1))))},[C,u,a,f,I,r,b]),ie=u==="playback"?e.length:a.length;return{bind:{activeSpeakerId:d,playedIds:y,selectedId:g,answerId:$,showFeedback:C==="feedback",clickable:C==="waiting",onSelectSpeaker:se},index:f,total:ie,score:w,phase:C,done:C==="done",start:F,reset:J}}exports.CACHE_GROUPS=Pu,exports.CORE_VERSION=Zo,exports.DocumentTitleSuppressContext=Ru,exports.EMPTY_COMPOSITION=Eu,exports.MediaQueryOverrideContext=Nu,exports.NO_CODA=ne,exports.SYLLABLE_MIN=oe,exports.VAP_PAGE_SIZE_OPTIONS=$e,exports.buildGradeSection=rt,exports.buildPartOfSpeechSection=at,exports.buildPositionSection=ao,exports.buildSelectSection=ro,exports.buildSyllableSection=lo,exports.buildWordTypeSection=st,exports.charToPronValue=ht,exports.convertComposition=pt,exports.fmtBytes=on,exports.lsBytes=Fu,exports.meaningKey=wu,exports.pronToCharValue=mt,exports.syllableToFilter=mu,exports.today=Ae,exports.toggleAttributeFilter=so,exports.useAnchoredMenu=Qo,exports.useCacheManagement=ln,exports.useDailyTrainingSelection=Po,exports.useDelayedHoverAnchor=Go,exports.useDeviceManagement=hn,exports.useDocumentTitle=Ft,exports.useEscToClose=Vo,exports.useFontScale=vt,exports.useHoverAnchor=$o,exports.useMediaQuery=Pt,exports.usePagedList=Yo,exports.usePasswordChange=Gt,exports.useRelativeDay=Vt,exports.useSoundCompassExam=el,exports.useTablePaging=fn,exports.useTableSort=gn,exports.useToastState=Uo,exports.useTrainingTypeLabels=Xo,exports.useVisitAllPanel=dn,exports.useVisitHistory=sn,exports.useVisitSchedule=Cn,exports.useWindowEvent=ju,exports.useWordAttributeFilterKeys=lt,exports.useWordDataStats=rn,exports.useWordMeanings=Ho,exports.useWordTrainingDataGeneration=No,exports.useWordTrainingFilter=Do,exports.valueToJamos=ae;
|
|
1
|
+
"use strict";var i=require("react"),ce=require("react-i18next"),ju=require("i18next"),au=typeof document<"u"?document.currentScript:null;function Ht({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))),[a,s]=i.useState(()=>{try{const p=localStorage.getItem(e),h=p?Number(p):1;return Number.isFinite(h)?r(h):r(1)}catch{return 1}});i.useEffect(()=>{try{localStorage.setItem(e,String(a))}catch{}},[e,a]);const d=p=>{s(typeof p=="function"?h=>r(p(h)):r(p))},m=()=>d(p=>+(p+o).toFixed(6)),C=()=>d(p=>+(p-o).toFixed(6)),c=a<n-Number.EPSILON,g=a>t+Number.EPSILON,f=Math.round(u*a),E=Math.round(f*l);return{scale:a,setScale:d,increase:m,decrease:C,canIncrease:c,canDecrease:g,fontSize:f,lineHeight:E}}const Iu=i.createContext(null);function Gt(e){return/max-width:\s*7[0-9][0-9]px/.test(e)}function Yt(e){const u=i.useContext(Iu),t=l=>typeof window>"u"||!window.matchMedia?!1:window.matchMedia(l).matches,[n,o]=i.useState(t(e));return i.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;const l=window.matchMedia(e),r=s=>o(s.matches),a=l;return a.addEventListener?a.addEventListener("change",r):a.addListener&&a.addListener(r),o(l.matches),()=>{a.removeEventListener?a.removeEventListener("change",r):a.removeListener&&a.removeListener(r)}},[e]),u&&typeof u.mobile=="boolean"&&Gt(e)?u.mobile:n}function Ru(e){const u=i.useRef(e);return i.useEffect(()=>{u.current=e}),u}function Mu(e,u){const t=Ru(u);i.useEffect(()=>{const n=()=>t.current();try{window.addEventListener(e,n)}catch{}return()=>{try{window.removeEventListener(e,n)}catch{}}},[e,t])}const su=" \xB7 ",Lu=(()=>{if(typeof document>"u")return"";const e=document.title;return e.includes(su)?e.split(su).pop()??e:e})(),ku=i.createContext(!1),ge=[];let vu=null;function Ut(e){const u=i.useContext(ku);i.useEffect(()=>{if(u||typeof e!="string"||!e)return;ge.length===0&&(vu=document.title);const t={text:Lu?`${e}${su}${Lu}`:e};return ge.push(t),document.title=t.text,()=>{const n=ge.lastIndexOf(t);n>=0&&ge.splice(n,1),document.title=ge.length?ge[ge.length-1].text:vu??document.title}},[e,u])}function Kt(){const{t:e}=ce.useTranslation();return i.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])}const Wt=()=>{const e="\uC54C \uC218 \uC5C6\uB294 \uC624\uB958",u=typeof ju?.t=="function"?ju.t("common.unknownError",{defaultValue:e}):void 0;return typeof u=="string"&&u?u:e};function qt(e,u){if(u===void 0&&(u=Wt()),e instanceof Error)return e.message||u;if(typeof e=="string")return e||u;if(e&&typeof e=="object"){const t=e;for(const n of[t.message,t.error_description,t.error])if(typeof n=="string"&&n)return n}return u}function zt(e){const{t:u}=ce.useTranslation(),[t,n]=i.useState({current:"",next:"",confirm:""}),[o,l]=i.useState(null),[r,a]=i.useState(!1),s=i.useRef(null);i.useEffect(()=>()=>{s.current!==null&&clearTimeout(s.current)},[]);const d=i.useCallback(()=>{n({current:"",next:"",confirm:""}),l(null)},[]),m=i.useCallback(async()=>{if(!t.current){l({type:"error",text:u("account.security.password.currentRequired","\uD604\uC7AC \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694.")});return}if(!t.next){l({type:"error",text:u("account.security.password.newRequired","\uC0C8 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694.")});return}if(t.next!==t.confirm){l({type:"error",text:u("account.security.password.mismatch","\uC0C8 \uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.")});return}a(!0);let C;try{C=e?await e(t.current,t.next):null}catch(c){C=qt(c)}finally{a(!1)}if(C){l({type:"error",text:C});return}l({type:"success",text:u("account.security.password.changed","\uBE44\uBC00\uBC88\uD638\uAC00 \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4.")}),n({current:"",next:"",confirm:""}),s.current!==null&&clearTimeout(s.current),s.current=setTimeout(()=>l(null),1500)},[t,e,u]);return{pw:t,setPw:n,pwMsg:o,setPwMsg:l,pwLoading:r,handleChangePw:m,reset:d}}const z=["\u3131","\u3132","\u3134","\u3137","\u3138","\u3139","\u3141","\u3142","\u3143","\u3145","\u3146","\u3147","\u3148","\u3149","\u314A","\u314B","\u314C","\u314D","\u314E"],ne=["\u314F","\u3150","\u3151","\u3152","\u3153","\u3154","\u3155","\u3156","\u3157","\u3158","\u3159","\u315A","\u315B","\u315C","\u315D","\u315E","\u315F","\u3160","\u3161","\u3162","\u3163"],ee=["","\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 x(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 Jt(){const e=new Map;return u=>{let t=e.get(u);return t||(t=[...u].map(n=>x(n)),e.set(u,t)),t}}function Ce(e,u,t=0){return String.fromCharCode(44032+(e*21+u)*28+t)}function Qt(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=x(e[o]),r=x(u[o]);if(!l||!r)return"random";if(l.cho===r.cho&&l.jung===r.jung&&l.jong===r.jong)continue;t++;const a=l.cho!==r.cho,s=l.jung!==r.jung,d=l.jong!==r.jong;(a?1:0)+(s?1:0)+(d?1:0)>1?n="multi":a?n="cho":s?n="jung":n="jong"}return t!==1?"random":n==="cho"?"cho":n==="jung"?"jung":n==="jong"?"jong":"random"}const be={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(be).map(([e,u])=>[u.join(""),ee[Number(e)]]));function Zt(e,u){if(!e||!u)return!1;for(const t of e){const n=x(t);if(n){if(z[n.cho]===u)return!0;if(n.jong>0){if(ee[n.jong]===u)return!0;const o=be[n.jong];if(o&&o.includes(u))return!0}}}return!1}function Ae(e){if(!e)return 0;let u=0;for(const t of e)x(t)&&u++;return u}function Xt(e){if(!e)return!1;let u=!1;for(const t of e){const n=x(t);if(n&&(u=!0,n.jong>0))return!1}return u}function en(e,u){if(e.jong<=0)return!1;if(u.includes(ee[e.jong]))return!0;const t=be[e.jong];return!!t&&t.some(n=>u.includes(n))}function un(e,u,t){if(!e)return!1;const n=[...e],o=l=>{const r=x(n[l]);if(!r||u.cho&&!u.cho.includes(z[r.cho])||u.jung&&!u.jung.includes(ne[r.jung]))return!1;if(u.jongNone){if(r.jong>0)return!1}else if(u.jong&&!en(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 tn={cho:z.length,jung:ne.length,jong:ee.length};function nn(e,u,t,n,o=1/0){if(!e||t<1)return[];const l=[...e].map(C=>x(C));if(l.some(C=>!C))return[];const r=l,a=r.length;if(t>a)return[];const s=tn[u],d=new Set,m=[];(function C(c,g){if(g.length===t){m.push([...g]);return}for(let f=c;f<a;f++)g.push(f),C(f+1,g),g.pop()})(0,[]);for(const C of m)if((function c(g,f){if(d.size>=o)return;if(g===C.length){const h=f.map(y=>Ce(y.cho,y.jung,y.jong)).join("");h!==e&&n.has(h)&&d.add(h);return}const E=C[g],p=r[E][u];for(let h=0;h<s;h++){if(h===p)continue;const y=f.slice();if(y[E]={...f[E],[u]:h},c(g+1,y),d.size>=o)return}})(0,r),d.size>=o)break;return[...d]}function on(e,u){if(!e||!u||e.length!==u.length)return-1;let t=0;for(let n=0;n<e.length;n++){const o=x(e[n]),l=x(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 Pu="word_pair_index_v2",xu="word_pair_index_sig_v2";let _e=null;function ln(){try{if(typeof localStorage>"u")return null;const e=localStorage.getItem(Pu),u=localStorage.getItem(xu);return!e||!u?null:{index:JSON.parse(e),sig:u}}catch{return null}}function De(){if(_e)return _e;const e=ln();return e?(_e=e.index,e.sig,_e):null}function rn(){_e=null;try{typeof localStorage<"u"&&(localStorage.removeItem(Pu),localStorage.removeItem(xu))}catch{}}const Fu="word_image_existence_map_v1";let Ee=null;function Vu(){if(Ee)return Ee;try{const e=typeof localStorage<"u"?localStorage.getItem(Fu):null;Ee=e?JSON.parse(e):{}}catch{Ee={}}return Ee}function an(e,u){return`${e}_${u??1}`}function sn(e,u){const t=Vu(),n=an(e,u);return n in t?t[n]:void 0}function $u(){const e=Vu(),u=Object.values(e);return u.length===0?null:{total:u.length,exists:u.filter(Boolean).length}}function cn(){Ee={};try{typeof localStorage<"u"&&localStorage.removeItem(Fu)}catch{}}const Hu=[{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 Cn(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 dn(e){const{t:u}=ce.useTranslation(),[t,n]=i.useState({}),[o,l]=i.useState(null),[r,a]=i.useState(null),[s,d]=i.useState(null),m=i.useCallback(()=>{const c={};Hu.forEach(g=>{c[g.id]=Gu([...g.keys])}),n(c),typeof navigator<"u"&&navigator.storage?.estimate&&navigator.storage.estimate().then(g=>{d({usage:g.usage??0,quota:g.quota??0})}).catch(()=>{})},[]);i.useEffect(()=>{m()},[m]);const C=i.useCallback(async c=>{l(c);try{c==="wordData"?(localStorage.removeItem("word_data_cache"),localStorage.removeItem("word_data_version")):c==="pairIndex"?rn():c==="imageCache"&&cn(),m(),e?.(u("settings.cache.cleared","\uCE90\uC2DC\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4."))}finally{l(null)}},[m,e,u]);return{cacheSizes:t,clearingId:o,confirmCacheId:r,setConfirmCacheId:a,storageEstimate:s,refreshCacheSizes:m,handleClearCache:C}}function fn(e){const[u,t]=i.useState(null),[n,o]=i.useState(null),l=i.useCallback(()=>{const r=De();if(r){const s=Object.values(r),d=s.filter(m=>m.cho.length+m.jung.length+m.jong.length>0).length;t({matched:d,total:s.length})}else t(null);const a=$u();o(a?{exists:a.exists,total:a.total}:null)},[]);return i.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]=i.useState(u),[o,l]=i.useState(null),[r,a]=i.useState(!1),[s,d]=i.useState(e),m=i.useRef(r);i.useEffect(()=>{m.current=r});const C=i.useRef(null);i.useEffect(()=>{if(m.current)return;const h=C.current;h!==null&&h.length===u.length&&h.every((y,w)=>y===u[w])||(C.current=u,n(u))},[u]);const c=i.useCallback(h=>{l(h),a(!1),d({...h})},[]),g=i.useCallback(()=>a(!0),[]),f=i.useCallback(()=>a(!1),[]),E=i.useCallback((h,y)=>{n(h),l(y),a(!1)},[]),p=i.useCallback(h=>{n(y=>y.filter(w=>w!==h)),l(null)},[]);return{list:t,setList:n,selected:o,setSelected:l,isEditing:r,setIsEditing:a,editForm:s,setEditForm:d,openDetail:c,startEditing:g,cancelEditing:f,commitEdit:E,remove:p}}const Oe=()=>{const e=new Date;return{year:String(e.getFullYear()),month:String(e.getMonth()+1).padStart(2,"0"),day:String(e.getDate()).padStart(2,"0")}},gn={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function hn(e=[]){const{list:u,setList:t,selected:n,setSelected:o,isEditing:l,setIsEditing:r,editForm:a,setEditForm:s,openDetail:d,commitEdit:m}=Yu(gn,e),{year:C,month:c,day:g}=Oe(),[f,E]=i.useState({year:C,month:c,day:g,hour:"09",minute:"00",memo:""});return{visitHistory:u,visitForm:f,setVisitForm:E,setVisit:p=>h=>E(y=>({...y,[p]:h})),selectedVisit:n,setSelectedVisit:o,isEditingVisit:l,setIsEditingVisit:r,editVisitForm:a,setEditVisitForm:s,openVisitDetail:d,handleVisitSave:p=>{t(A=>[f,...A]);const{year:h,month:y,day:w}=Oe();E({year:h,month:y,day:w,hour:"09",minute:"00",memo:""}),p?.()},handleVisitEditSave:()=>{m(p=>p.map(h=>h===n?a:h),a)},addVisit:p=>{t(h=>[p,...h])},removeVisit:p=>{t(h=>h.filter(y=>y!==p))},revertVisitEdit:(p,h)=>{t(y=>y.map(w=>w===h?p:w)),o(y=>y===h?p:y)}}}const Uu=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")}`,Ge=e=>[...e].sort((u,t)=>{const n=Uu(u),o=Uu(t);return n<o?-1:n>o?1:0}),mn={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function pn(e,u=[]){const t=i.useMemo(()=>Ge(u),[u]),{list:n,setList:o,selected:l,setSelected:r,isEditing:a,setIsEditing:s,editForm:d,setEditForm:m,openDetail:C,commitEdit:c,remove:g}=Yu(mn,t),[f,E]=i.useState([]),{year:p,month:h,day:y}=Oe(),[w,A]=i.useState({year:p,month:h,day:y,hour:"09",minute:"00",memo:""}),D=j=>v=>A(V=>({...V,[j]:v})),b=j=>{o(te=>Ge([...te,w]));const{year:v,month:V,day:U}=Oe();A({year:v,month:V,day:U,hour:"09",minute:"00",memo:""}),j?.()},I=()=>{c(j=>Ge(j.map(v=>v===l?d:v)),d)},k=i.useCallback(j=>{g(j)},[g]),M=i.useCallback(j=>{e({year:j.year,month:j.month,day:j.day,hour:j.hour,minute:j.minute,memo:j.memo}),g(j)},[e,g]),O=i.useCallback(j=>{o(v=>v.filter(V=>V!==j)),E(v=>[j,...v]),r(null)},[o,r]),F=i.useCallback(j=>{o(v=>Ge([...v,j]))},[o]),$=i.useCallback(j=>{o(v=>v.filter(V=>V!==j))},[o]),Y=i.useCallback((j,v)=>{o(V=>V.map(U=>U===v?j:U)),r(V=>V===v?j:V)},[o,r]);return{scheduleList:n,noShowList:f,addSchedule:F,removeSchedule:$,revertScheduleEdit:Y,scheduleForm:w,setScheduleForm:A,setSchedule:D,selectedSchedule:l,setSelectedSchedule:r,isEditingSchedule:a,setIsEditingSchedule:s,editScheduleForm:d,setEditScheduleForm:m,openScheduleDetail:C,handleScheduleSave:b,handleScheduleEditSave:I,handleScheduleDelete:k,handleScheduleToVisit:M,handleScheduleNoVisit:O}}const Ye=[{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{t:u}=ce.useTranslation(),[t,n]=i.useState(""),[o,l]=i.useState("25"),[r,a]=i.useState("all"),[s,d]=i.useState(1),m=i.useMemo(()=>e.filter(({item:E,status:p})=>!(t&&!E.memo.includes(t)||r!=="all"&&p!==r)),[e,t,r]),C=Math.max(1,Math.ceil(m.length/Number(o))),c=Math.min(s,C),g=i.useMemo(()=>m.slice((c-1)*Number(o),c*Number(o)),[m,c,o]),f=i.useMemo(()=>Ye.map(E=>({...E,label:u("common.pageSizeLabel",{n:E.value,defaultValue:E.label})})),[u]);return{vapSearch:t,setVapSearch:n,vapPageSize:o,setVapPageSize:l,vapPageSizeOptions:f,vapStatus:r,setVapStatus:a,vapPage:c,setVapPage:d,vapFiltered:m,vapTotal:C,vapPageItems:g}}function yn(e,u,t){const{t:n}=ce.useTranslation(),[o,l]=i.useState(()=>{const f=t?.initialPageSize;return f&&Ye.some(E=>E.value===f)?f:"25"}),[r,a]=i.useState(1),[s,d]=i.useState(u);s!==u&&(d(u),r!==1&&a(1));const m=i.useMemo(()=>Ye.map(f=>({...f,label:n("visits.showN",{n:f.value})})),[n]),C=i.useCallback(f=>{l(f),a(1)},[]),c=Math.max(1,Math.ceil(e.length/Number(o))),g=Math.min(r,c);return{pageRows:i.useMemo(()=>e.slice((g-1)*Number(o),g*Number(o)),[e,g,o]),pageSizeProps:{options:m,value:o,onChange:C},paginationProps:{page:g,total:c,onChange:a},setPage:a}}function En(){const[e,u]=i.useState(null),t=i.useCallback(o=>{u(l=>l?.key===o?{key:o,asc:!l.asc}:{key:o,asc:!0})},[]),n=i.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}}const Ku=e=>e==="\uC88C"||e==="\uC6B0"?e:null;function Bn(){const[e,u]=i.useState(!1),[t,n]=i.useState("\uC88C"),[o,l]=i.useState({\uC88C:null,\uC6B0:null}),[r,a]=i.useState({\uC88C:[],\uC6B0:[]}),[s,d]=i.useState(!1),[m,C]=i.useState("\uC88C"),c=i.useCallback(f=>{const E=Ku(f.direction);E&&(l(p=>({...p,[E]:f})),a(p=>({...p,[E]:[f,...p[E]]})),u(!1))},[]),g=i.useCallback(f=>{const E=Ku(f.direction);E&&(l(p=>({...p,[E]:f})),d(!1))},[]);return{showDevice:e,setShowDevice:u,deviceDirection:t,setDeviceDirection:n,devices:o,setDevices:l,deviceHistory:r,setDeviceHistory:a,showDeviceList:s,setShowDeviceList:d,listForSide:m,setListForSide:C,handleDeviceSubmit:c,handleSelectFromList:g}}const wn="__ihab_core_word_pool__";function Ue(){return globalThis[wn]??null}function P(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?P(e,t):P(e,t).slice(0,u)}const iu={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"}},bn=z.indexOf("\u3147"),Wu={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!==bn},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}},An={\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"},_n={\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 cu(e){return An[e]??e}const Cu={cho:z,jung:ne,jong:ee},W=e=>Array.isArray(e)?e.length>0:!!e;function du(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&&z[n.cho]==="\u3147"!=(z[o.cho]==="\u3147")||n.jong!==o.jong&&n.jong===0!=(o.jong===0)))return!0}return!1}function Dn(e,u,t){const n=t.pronOf(e),o=t.decompOf,l=t.sameStructureOnly&&o?o(n):null,r=[];for(const a of u)a!==e&&(t.okSet&&!t.okSet.has(a)||t.pronOf(a)!==n&&(l&&o&&du(l,o(t.pronOf(a)))||r.push(a)));return r}function qu(e,u,t){const n=u?.[e];if(!n)return[];const o=t.kind?n[t.kind]??[]:[...n.cho??[],...n.jung??[],...n.jong??[]];return Dn(e,o,t)}function On(e,u,t,n,o,l,r){const a=["cho","jung","jong"].filter(c=>W(e[c])),s={};for(const c of a){const g=e[c];s[c]=new Set(Array.isArray(g)?g:[g])}const d=o==="pron",m=new Map;for(const c of u){const g=t(l(c));if(g.some(h=>!h))continue;let f=g;if(!d&&(f=t(c),f.length!==g.length||f.some(h=>!h)))continue;const E=g.length,p=m.get(E);p?p.push({w:c,dPron:g,dPos:f}):m.set(E,[{w:c,dPron:g,dPos:f}])}const C=new Map;for(const[c,g]of m){const f=new Map,E=(p,h)=>{const y=p.dPos[h];return y!=null&&a.every(w=>s[w].has(Cu[w][y[w]]))};for(const p of g){let h;if(r==="head")h=E(p,0)?0:-1;else if(r==="tail")h=E(p,c-1)?c-1:-1;else if(r==="mid"){h=-1;for(let w=1;w<c-1;w++)if(E(p,w)){h=w;break}}else h=p.dPos.findIndex(w=>w!=null&&a.every(A=>s[A].has(Cu[A][w[A]])));if(h<0)continue;const y=f.get(h);y?y.push(p):f.set(h,[p])}for(const[p,h]of f){const y=new Set(a.map(D=>p+":"+D)),w=D=>{let b="";for(let I=0;I<c;I++){const k=D[I];for(const M of["cho","jung","jong"])b+=(y.has(I+":"+M)?"*":k[M])+"."}return b},A=new Map;for(const D of g){const b=w(D.dPron),I=A.get(b);I?I.push(D):A.set(b,[D])}for(const D of h){const b=A.get(w(D.dPron))??[],I=[];for(const k of b){if(k.w===D.w)continue;let M=!0;for(const O of a){const F=D.dPron[p][O],$=k.dPron[p][O];if($===F){M=!1;break}if(d&&s[O].has(Cu[O][$])){M=!1;break}}M&&(n&&du(D.dPron,k.dPron)||I.push(k.w))}C.set(D.w,I)}}}return C}const Nn=e=>e==null?[]:Array.isArray(e)?e:[e];function Tn(e){if([...e].length!==1)return"";const u=x(e);if(!u)return"";const t=cu(ee[u.jong]),n=t===""?0:ee.indexOf(t);return Ce(u.cho,u.jung,n<0?0:n)}function zu(e,u){return u.get(e)||Tn(e)||e}function fu(e){return e?W(e.cho)?"cho":W(e.jung)?"jung":W(e.jong)?"jong":null:null}function Be(e,u){const t=(n,o)=>!W(n)||Nn(n).includes(o);return t(u.cho,z[e.cho])&&t(u.jung,ne[e.jung])&&t(u.jong,ee[e.jong])}function Ne(e,u,t){const n=[...e];if(t!=="pron")return n.map(l=>x(l));const o=[...u.get(e)||e];return o.length!==n.length?n.map(l=>x(l)):o.map(l=>x(l))}function Te(e,u,t,n,o){const l=u==="cho"?z:u==="jung"?ne:ee,r=e[u],a=[],s=C=>u==="jung"?In(zu(C,o)):zu(C,o),d=new Map([[s(t),-1]]),m=P(l.map((C,c)=>c).filter(C=>C!==r&&(u!=="cho"||l[C]!=="\u3147")&&(u!=="jong"||C!==0)));for(const C of m){if(a.length>=n)break;const c=u==="cho"?Ce(C,e.jung,e.jong):u==="jung"?Ce(e.cho,C,e.jong):Ce(e.cho,e.jung,C),g=s(c),f=d.get(g);if(f!==void 0){u==="jung"&&f>=0&&o.has(c)&&!o.has(a[f])&&(a[f]=c);continue}d.set(g,a.length),a.push(c)}return a}const jn={\u3154:"\u3150",\u3156:"\u3152",\u315A:"\u3159",\u315E:"\u3159"};function In(e){if([...e].length!==1)return e;const u=x(e);if(!u)return e;const t=jn[ne[u.jung]];return t?Ce(u.cho,ne.indexOf(t),u.jong):e}function Rn(e,u,t,n,o,l=null){const r=[...e];if(r.length!==2)return null;const a=r.map(C=>x(C));if(a.some(C=>!C))return null;const s=Ne(e,t,n);if(s.some(C=>!C))return null;const d=fu(u);let m=d&&u?s.map((C,c)=>Be(C,u)?c:-1).filter(C=>C>=0):[0,1];if(l!=null&&(m=m.filter(C=>C!==l)),!m.length)return null;for(const C of P(m)){const c=r[C];if(!o.has(c))continue;const g=Te(a[C],d??"cho",c,40,t),f=[];for(const E of g)if(E!==c&&o.has(E)&&!f.includes(E)&&f.push(E),f.length>=2)break;if(!(f.length<2))return{question:e,distractors:[c,...f]}}return null}function Mn(e,u,t,n,o,l=null){const r=[...e];if(r.length!==3)return null;const a=r.map(C=>x(C));if(a.some(C=>!C))return null;const s=Ne(e,t,n);if(s.some(C=>!C))return null;const d=fu(u),m=d&&u?s.map((C,c)=>Be(C,u)?c:-1).filter(C=>C>=0):[0,1,2];if(!m.length)return null;for(const C of P(m))for(const c of P([0,1,2].filter(g=>g!==C&&(l==null||g===l)))){const g=[0,1,2].filter(y=>y!==c),f=g.map(y=>r[y]).join("");if(!o.has(f))continue;const E=g.indexOf(C),p=Te(a[C],d??"cho",r[C],40,t),h=[];for(const y of p){const w=g.map(D=>r[D]);w[E]=y;const A=w.join("");if(A!==f&&o.has(A)&&!h.includes(A)&&h.push(A),h.length>=2)break}if(!(h.length<2))return{question:e,distractors:[f,...h]}}return null}function Ln(e,u,t,n,o,l=null){const r=[...e],a=r.length;if(a<2)return null;const s=[];for(let m=1;m<=a-1;m++)s.push({remain:r.slice(0,m).join(""),dropped:r.slice(m).join(""),droppedEnd:1}),s.push({remain:r.slice(a-m).join(""),dropped:r.slice(0,a-m).join(""),droppedEnd:0});const d=fu(u);for(const{remain:m,dropped:C,droppedEnd:c}of P(s)){if(l!=null&&c!==l||m===e||!o.has(m)||!o.has(C))continue;const g=[...m],f=g.map(h=>x(h));if(f.some(h=>!h))continue;const E=Ne(m,t,n);if(E.some(h=>!h))continue;const p=d&&u?E.map((h,y)=>Be(h,u)?y:-1).filter(h=>h>=0):g.map((h,y)=>y);if(p.length)for(const h of P(p)){const y=Te(f[h],d??"cho",g[h],40,t),w=[];for(const A of y){const D=[...g];D[h]=A;const b=D.join("");if(b!==m&&o.has(b)&&!w.includes(b)&&w.push(b),w.length>=2)break}if(w.length>=2)return{question:e,distractors:[m,...w]}}}return null}function kn(e,u,t,n,o,l=null){if([...e].length!==1)return null;const r=x(t.get(e)||e);if(!r||r.jong===0)return null;const a=Ce(r.cho,r.jung,0),s=Te({cho:r.cho,jung:r.jung,jong:0},"cho",a,2,t);return s.length<2?null:{question:e,distractors:[a,...s]}}const gu=z.indexOf("\u3147");function vn(e,u,t,n,o,l=null){if([...e].length!==1)return null;const r=x(t.get(e)||e);if(!r||r.jong!==0||r.cho===gu)return null;const a=Ce(gu,r.jung,0),s=Te({cho:gu,jung:r.jung,jong:0},"jung",a,2,t);return s.length<2?null:{question:e,distractors:[a,...s]}}function Pn(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 s=0;s<o;s++)r+=s===l?"*":n[s];const a=u.get(r);a?a.push(t):u.set(r,[t])}}return u}function xn(e,u,t,n,o,l=null,r=null,a=2){const s=[...e],d=s.length;if(d<2||d>3)return null;const m=s.map(y=>x(y));if(m.some(y=>!y))return null;const C=Ne(e,t,n);if(C.some(y=>!y))return null;const c=y=>t.get(y)??y,g=c(e),f=!!u&&(W(u.cho)||W(u.jung)||W(u.jong)),E=!!r&&(W(r.cho)||W(r.jung)||W(r.jong)),p=y=>{let w=d+"|"+y+"|";for(let A=0;A<d;A++)w+=A===y?"*":s[A];return w};let h;if(l!=null){if(l>=d||f&&!Be(C[l],u))return null;h=[l]}else f?h=C.map((y,w)=>Be(y,u)?w:-1).filter(y=>y>=0):h=Array.from({length:d},(y,w)=>w);for(const y of P(h)){const w=o.get(p(y))??[],A=[],D=[];for(const O of w){if(O===e)continue;const F=[...O].map(v=>x(v)),$=m[y],Y=F[y];if(!$||!Y)continue;let j=0;if($.cho!==Y.cho&&j++,$.jung!==Y.jung&&j++,$.jong!==Y.jong&&j++,!(j<a||c(O)===g))if(E){const v=Ne(O,t,n)[y];v&&Be(v,r)?A.push(O):D.push(O)}else A.push(O)}if(!A.length)continue;const b=P(A)[0],I=[],k=new Set([g,c(b)]),M=E?D:A.filter(O=>O!==b);for(const O of P(M)){const F=c(O);if(!k.has(F)&&(k.add(F),I.push(O),I.length>=2))break}if(!E&&I.length<2)for(const O of P(w)){if(O===e||O===b)continue;const F=c(O);if(!k.has(F)&&(k.add(F),I.push(O),I.length>=2))break}if(!(I.length<2))return{question:e,distractors:[b,...I]}}return null}let Ke=null,Ju=null,Qu=null;function Fn(){const e=Ue();if(e&&e.entries.length>0){const u=De();if(Ke&&Ju===e&&Qu===u)return Ke;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 Ke=n,Ju=e,Qu=u,Ke}return[]}const oe=new Proxy([],{get(e,u){const t=Fn(),n=t[u];return typeof n=="function"?n.bind(t):n}});function hu(e){return e.length?e[Math.floor(Math.random()*e.length)]:void 0}function ue(e,u){if(u>=e.length)return P(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 mu=null,Zu=null;function de(){const e=Ue();if(mu&&Zu===e)return mu;const u=new Map;for(const t of oe)t.w&&u.set(t.w,t.pron);return mu=u,Zu=e,u}function Q(e){return de().get(e)||e}function We(e,u,t=new Set){const n=[];for(const o of P(e)){if(n.length>=u)break;const l=Q(o);t.has(l)||(t.add(l),n.push(o))}return n}let Vn=0;function J(e){return`${e}-rt-${++Vn}`}function je(e){const u=$u();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)sn(n)===!0&&t.add(n);return t}const qe=new Map;let Xu=null,et=null;function Ie(e){return e==null?"":Array.isArray(e)?e.slice().sort().join(","):e}function ut(e){const u=Ie(e.choseong),t=e.composition,n=t?.syllable==null?"":Array.isArray(t.syllable)?t.syllable.slice().sort().join(","):String(t.syllable),o=t?`${Ie(t.cho)}/${Ie(t.jung)}/${Ie(t.jong)}/${t.jongNone?"N":""}/${n}`:"",l=Ie(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=Ue(),t=De();(u!==Xu||t!==et)&&(qe.clear(),Xu=u,et=t);const n=ut(e);return qe.has(n)||qe.set(n,$n(e)),qe.get(n)}function tt(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=>Xt(r):r=>un(r,{cho:t,jung:n,jong:l,jongNone:o}):null}function nt(e){const u=e.grade&&e.grade.length>0?new Set(e.grade):null,t=e.composition??null,n=t?.syllable!=null?new Set(Array.isArray(t.syllable)?t.syllable:[t.syllable]):null,o=t?[tt(t),n?r=>n.has(Ae(r)):null].filter(r=>r!=null):[];if(!u&&o.length===0)return null;const l=e.phonemeView==="pron";return r=>{if(u&&(!r.grade||!u.has(r.grade)))return!1;if(o.length===0)return!0;const a=l?Q(r.w):r.w;return o.every(s=>s(a))}}async function $n(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,a=e.sameStructureOnly??!0,s=e.phonemeView==="pron"?"pron":"char",d=Math.max(1,e.contrastCount??1),m=u==="cho"||u==="jung"||u==="jong",C=m&&d>=2,c=u==="count",g=t?new Set(Array.isArray(t)?t:[t]):null,f=n?.syllable!=null?new Set(Array.isArray(n.syllable)?n.syllable:[n.syllable]):null,E=n?[tt(n),f?B=>f.has(Ae(B)):null].filter(B=>B!=null):[],p=u==="random"||u===null,h=p||c,y=p||C||c;let w=oe.filter(B=>!B.w||r&&(!B.grade||!r.has(B.grade))?!1:y?!0:Array.isArray(B.p)&&B.p.length>0);g&&(w=w.filter(B=>{for(const _ of g)if(Zt(B.w,_))return!0;return!1})),E.length>0&&(w=w.filter(B=>{const _=s==="pron"?Q(B.w):B.w;return E.every(G=>G(_))})),o&&(w=w.filter(B=>B.w[0]===o));let A;if(l){const B=new Set;for(const _ of w)if(B.add(_.w),Array.isArray(_.p))for(const G of _.p)B.add(G);if(h)for(const _ of oe)_.w&&B.add(_.w);A=je(B)}else{const B=new Set;for(const _ of w)if(B.add(_.w),Array.isArray(_.p))for(const G of _.p)B.add(G);if(h)for(const _ of oe)_.w&&B.add(_.w);A=B}let D=null;if(C){const B=new Set;for(const _ of oe)_.w&&B.add(_.w);D=l?je(B):B}const b=w.filter(B=>A.has(B.w)),I=600,k=Array.from(A),M=k.length>I?ue(k,I):k,O=c&&n!=null&&(W(n.cho)||W(n.jung)||W(n.jong)),F=2500,$=new Map;if(c&&!O&&d>=2){for(const B of k){const _=Ae(B),G=$.get(_);G?G.push(B):$.set(_,[B])}for(const[B,_]of $)_.length>F&&$.set(B,ue(_,F))}const Y=Jt(),j=O?On(n,k,Y,a,s,Q):null,v=500,V=1500,U=e.fullCount?b:u==="random"?b.length>v?ue(b,v):b:b.length>V?ue(b,V):b,te=De(),me=[];for(const B of U){let _;const G=Q(B.w);if(C)_=nn(B.w,u,d,D,24).filter(H=>Q(H)!==G);else if(c)O?_=(j.get(B.w)??[]).filter(H=>Q(H)!==G):d<=1?_=qu(B.w,te,{okSet:A,pronOf:Q,decompOf:Y,sameStructureOnly:!1}):_=($.get(Ae(B.w))??[]).filter(H=>{if(H===B.w||Q(H)===G)return!1;const X=on(B.w,H);return d>=5?X>=5:X===d});else if(p)_=M.filter(H=>H!==B.w&&H.length===B.w.length&&Q(H)!==G);else{const H=u;_=qu(B.w,te,{kind:H,okSet:A,pronOf:Q,decompOf:Y,sameStructureOnly:!1}),_.length===0&&(_=(M.length>30?ue(M,30):M).filter(X=>X!==B.w&&Qt(B.w,X)===u&&Q(X)!==G))}if(a&&_.length>0&&(m||c&&!O)){const H=Y(Q(B.w));_=_.filter(X=>!du(H,Y(Q(X))))}_.length!==0&&me.push({word:B,usable:_})}return me}async function ot(e,u){const{choicesPerItem:t=3,count:n=10}=u,o=t-1,l=(await Z(u)).filter(a=>a.usable.length>=o),r=[];for(const a of P(l)){if(r.length>=n)break;const s=We(a.usable,o);if(s.length<o)continue;const d=P([a.word.w,...s]);r.push({id:J(e+"-item"),index:r.length+1,word:a.word.w,syllables:a.word.s,choices:d,answerIndex:d.indexOf(a.word.w)})}return r}async function Hn(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=P([...o]);for(const a of r){if(l.length>=t)break;const s=a.word.w,d=[...a.word.pron||s],m=hu(d);if(!m)continue;const C=o.filter(f=>f.word.w!==s&&f.word.s===a.word.s&&!(f.word.pron||f.word.w).includes(m)&&f.word.pron!==a.word.pron);if(C.length<n)continue;const c=We(C.map(f=>f.word.w),n);if(c.length<n)continue;const g=P([s,...c]);l.push({id:J("HPI-item"),index:l.length+1,targetSyllable:m,word:s,choices:g,answerIndex:g.indexOf(s)})}return l}async function Gn(e){const{count:u=10}=e,t=(await Z(e)).filter(l=>l.usable.length>=1);if(!t.length)return[];const n=t.length>=u?ue(t,u):P(Array.from({length:u},(l,r)=>t[r%t.length])),o=P(Array.from({length:u},(l,r)=>r<Math.ceil(u/2)));return n.map((l,r)=>{const a=o[r];let s;if(a)s=[l.word.w,l.word.w];else{const d=hu(l.usable);s=Math.random()<.5?[l.word.w,d]:[d,l.word.w]}return{id:J("SOD-item"),index:r+1,word:l.word.w,pair:s,same:a}})}async function Yn(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(c=>c.word.w),r=new Map(o.map(c=>[c.word.w,c.word.pron])),a=c=>(r.get(c)||c)[0]??"",s={};for(const c of o){const g=a(c.word.w);g&&(s[g]||(s[g]=[]),s[g].push(c.word.w))}const d=Object.entries(s).filter(([,c])=>c.length>=2).map(([c])=>c);if(d.length===0)return[];const m=[],C=P([...d]);for(let c=0;m.length<t&&c<t*4;c++){const g=C[c%C.length],f=s[g];if(f.length<2)continue;const E=P([...f]),p=E[0],h=E[1];if(!p||!h||p===h||(r.get(p)||p)===(r.get(h)||h))continue;const y=r.get(h)||h,w=l.filter(b=>a(b)!==g&&b!==p&&b!==h&&b.length===h.length&&(r.get(b)||b)!==y);if(w.length<n)continue;const A=We(w,n);if(A.length<n)continue;const D=P([h,...A]);m.push({id:J("SWS-item"),index:m.length+1,sourceWord:p,targetSyllable:g,word:h,choices:D,answerIndex:D.indexOf(h)})}return m}function lt(e,u,t){const n=de(),o=a=>n.get(a)||a,l=(a,s)=>{const d=[...a],m=[...s];if(d.length!==m.length)return-1;let C=-1;for(let c=0;c<d.length;c++)if(d[c]!==m[c]){if(C>=0)return-1;C=c}return C},r=e.map(a=>({e:a,swaps:a.usable.filter(s=>!!s&&l(a.word.w,s)>=0&&o(s)!==o(a.word.w))})).filter(a=>a.swaps.length>0);return ue(r,u).map(({e:a,swaps:s},d)=>{const m=hu(s)??"",C=[...a.word.w],c=[...m],g=l(a.word.w,m),f=We(a.usable.filter(E=>E&&E!==m),2,new Set([o(m),o(a.word.w)]));return{id:J(t),index:d+1,word:a.word.w,original:a.word.w,changed:m,changedFrom:g>=0?C[g]:"",changedTo:g>=0?c[g]:"",distractors:f}})}async function rt(e,u,t){const{count:n=10}=u,o=de(),l=oe.filter(f=>f.w&&f.s===e),r=u.excludeNoImage?je(l.map(f=>f.w)):null,a=r?l.filter(f=>r.has(f.w)):l,s=new Set(a.map(f=>f.w)),d=Pn(s),m=u.phonemeView??"char",C=u.composition??null,c=nt({grade:u.grade}),g=[];for(const f of P(a)){if(g.length>=n)break;if(c&&!c(f))continue;const E=xn(f.w,C,o,m,d,null,null);if(!E)continue;const p=E.distractors[0],h=[...f.w],y=[...p],w=h.findIndex((A,D)=>A!==y[D]);g.push({id:J(t),index:g.length+1,word:f.w,original:f.w,changed:p,changedFrom:w>=0?h[w]:"",changedTo:w>=0?y[w]:"",distractors:E.distractors.slice(1)})}return g}async function Un(e){return rt(2,e,"CS2-item")}async function Kn(e){return rt(3,e,"CS3-item")}async function Wn(e){const u=(await Z({...e,difficulty:"count",contrastCount:1})).filter(t=>t.word.s===1&&t.usable.length>=1);return lt(u,e.count??10,"CP1-item")}async function qn(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 lt(t,e.count??10,"CP2-item")}async function zn(e){const{count:u=10}=e,t=(await Z({...e})).filter(n=>n.word.s===2);return ue(t,u).map((n,o)=>({id:J("M2S-item"),index:o+1,word:n.word.w,answer:n.word.w,parts:[...n.word.w]}))}async function Jn(e){const{count:u=10}=e,t=(await Z({...e})).filter(n=>n.word.s===3);return ue(t,u).map((n,o)=>({id:J("M3S-item"),index:o+1,word:n.word.w,answer:n.word.w,parts:[...n.word.w]}))}async function Qn(e){const{count:u=10}=e,t=(await Z({...e})).filter(a=>a.word.s===2),n=de(),o=new Set(oe.map(a=>a.w)),l=e.phonemeView??"char",r=[];for(const a of P(t)){if(r.length>=u)break;const s=Rn(a.word.w,e.composition??null,n,l,o);if(!s)continue;const[d,...m]=s.distractors,C=[...a.word.w],c=C[0]===d?C[1]:C[0];r.push({id:J("D2-item"),index:r.length+1,original:a.word.w,word:a.word.w,dropped:c,missingResult:d,distractors:m})}return r}async function Zn(e){const{count:u=10}=e,t=(await Z({...e})).filter(a=>a.word.s===3),n=de(),o=new Set(oe.map(a=>a.w)),l=e.phonemeView??"char",r=[];for(const a of P(t)){if(r.length>=u)break;const s=Mn(a.word.w,e.composition??null,n,l,o);if(!s)continue;const[d,...m]=s.distractors,C=[...a.word.w];let c="";for(let g=0;g<C.length;g++)if(C.filter((f,E)=>E!==g).join("")===d){c=C[g];break}r.push({id:J("D3-item"),index:r.length+1,original:a.word.w,word:a.word.w,dropped:c,missingResult:d,distractors:m})}return r}async function Xn(e){const{count:u=10}=e,t=(await Z({...e})).filter(a=>a.word.s>=2),n=de(),o=new Set(oe.map(a=>a.w)),l=e.phonemeView??"char",r=[];for(const a of P(t)){if(r.length>=u)break;const s=Ln(a.word.w,e.composition??null,n,l,o);if(!s)continue;const[d,...m]=s.distractors,C=a.word.w,c=C.startsWith(d)?C.slice(d.length):C.endsWith(d)?C.slice(0,C.length-d.length):"";r.push({id:J("DPC-item"),index:r.length+1,original:C,word:C,dropped:c,missingResult:d,distractors:m})}return r}async function eo(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=ue(t,3);return{id:J("LRO-item"),index:o+1,sequence:l,choices:P(l)}})}function ze(e,u,t){const n=oe.filter(a=>a.w&&a.s===e),o=u.excludeNoImage?je(n.map(a=>a.w)):null,l=nt(u),r=[];for(const a of n)if(!(o&&!o.has(a.w))&&!(l&&!l(a))){if(t){const s=x(a.w);if(!s||!t(s))continue}r.push(a)}return r}function uo(e){const u=ze(1,e,t=>t.jong===0);return ue(u,e.count??10).map((t,n)=>{const o=x(t.w);return{id:J("M2P-item"),index:n+1,parts:[z[o.cho],ne[o.jung]],answer:t.w,word:t.w}})}function to(e){const u=ze(1,e,t=>t.jong>0&&!be[t.jong]);return ue(u,e.count??10).map((t,n)=>{const o=x(t.w);return{id:J("M3P-item"),index:n+1,parts:[z[o.cho],ne[o.jung],ee[o.jong]],answer:t.w,word:t.w}})}function no(e){const u=Wu.DROP_FINAL_CONSONANT_FROM_1SYLL,t=ze(u.syllables,e,u.syllable),n=de(),o=[];for(const l of P(t)){if(o.length>=(e.count??10))break;const r=kn(l.w,null,n);if(!r)continue;const[a,...s]=r.distractors;o.push({id:J("DFC-item"),index:o.length+1,original:l.w,word:l.w,result:a,distractors:s})}return o}function oo(e){const u=Wu.REMOVE_CONSONANT_AND_IDENTIFY_PHONEME,t=ze(u.syllables,e,u.syllable),n=de(),o=[];for(const l of P(t)){if(o.length>=(e.count??10))break;const r=vn(l.w,null,n);if(!r)continue;const a=x(n.get(l.w)||l.w);if(!a)continue;const[s,...d]=r.distractors;o.push({id:J("RCP-item"),index:o.length+1,base:l.w,word:l.w,missingConsonant:z[a.cho],remaining:s,distractors:d})}return o}const Je=new Map;let at=null,st=null;async function it(e,u={}){const t=Ue(),n=De();(t!==at||n!==st)&&(Je.clear(),at=t,st=n);const o=`${e}:${ut(u)}`;if(Je.has(o))return Je.get(o);const l=await ro(e,u);return Je.set(o,l),l}const lo={SAME_SOUND_PICK:e=>ot("SSP",e),HEAR_AND_PICK_SAME:e=>ot("HPS",e),HEAR_AND_PICK_INCLUDED:e=>Hn(e),SAME_OR_DIFF:e=>Gn(e),STARTS_WITH_SAME_SOUND:e=>Yn(e),LISTEN_AND_REMEMBER_ORDER:e=>eo(e),MERGE_2_SYLLABLES:e=>zn(e),MERGE_3_SYLLABLES:e=>Jn(e),MERGE_2_PHONEMES:e=>uo(e),MERGE_3_PHONEMES:e=>to(e),DROP_1_FROM_2SYLL:e=>Qn(e),DROP_1_FROM_3SYLL:e=>Zn(e),DROP_PART_FROM_COMPOUND:e=>Xn(e),DROP_FINAL_CONSONANT_FROM_1SYLL:e=>no(e),REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:e=>oo(e),CHANGE_1_SYLL_IN_2SYLL:e=>Un(e),CHANGE_1_SYLL_IN_3SYLL:e=>Kn(e),CHANGE_1_PHONEME_IN_1SYLL:e=>Wn(e),CHANGE_1_PHONEME_IN_2SYLL:e=>qn(e)};async function ro(e,u={}){const t=lo[e];return t?await t(u):[]}async function ao(e){const u=[null,"count"],t=Object.keys(iu);let n=0;for(const o of u)for(const l of t){const r=iu[l];it(l,{difficulty:r.difficulty?o:null,choseong:null,count:10,excludeNoImage:e}).catch(()=>{}),++n%6===0&&await new Promise(a=>setTimeout(a,0))}}async function so(e){return(await Z({...e,fullCount:!0})).length}async function io(e={}){const u=[];for(const a of oe)a.w&&u.push(a.w);const t=e.excludeNoImage?je(u):u,n=new Set,o=new Set,l=new Set,r=new Set;for(const a of t){r.add(Ae(a));for(const s of a){const d=x(s);if(d&&(z[d.cho]!=="\u3147"&&n.add(z[d.cho]),o.add(ne[d.jung]),d.jong>0)){l.add(ee[d.jong]);const m=be[d.jong];m&&m.forEach(C=>l.add(C))}}}return{cho:n,jung:o,jong:l,syllable:r}}const he="\uC804\uCCB4";function ct(){const{t:e}=ce.useTranslation();return i.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 Ct(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 dt(e){return{label:e.partOfSpeech,items:Object.keys(e.posMap),multiple:!0,allOption:!0}}function ft(e){return{label:e.wordType,items:Object.keys(e.typeMap),multiple:!0,allOption:!0}}function co(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 Co(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 fo(e,u){const{label:t,headValue:n,midValue:o,tailValue:l,includeMid:r=!0,headDisabled:a,midDisabled:s,tailDisabled:d,allOptionDisabled:m,groupLabel:C,labelAction:c}=u;return{label:t,...C?{groupLabel:C}:{},...c?{labelAction:c}:{},allOption:!0,allLabel:e("wordSearch.filter.positionAny",{defaultValue:"\uBB34\uAD00"}),...m?{allOptionDisabled:m}:{},items:[{value:n,displayLabel:e("wordSearch.filter.positionHead",{defaultValue:"\uC5B4\uB450"}),disabled:a},...r?[{value:o,displayLabel:e("wordSearch.filter.positionMid",{defaultValue:"\uC5B4\uC911"}),disabled:s}]:[],{value:l,displayLabel:e("wordSearch.filter.positionTail",{defaultValue:"\uC5B4\uB9D0"}),disabled:d}]}}function go(e,u,t){if(u===he){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(_n).map(([e,{nucleus:u}])=>[e,u]));const ho={\uACE0\uC720\uC5B4:"\uACE0\uC720",\uD55C\uC790\uC5B4:"\uD55C\uC790",\uC678\uB798\uC5B4:"\uC678\uB798",\uD63C\uC885\uC5B4:"\uD63C\uC885"},mo={"\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"]},po={difficulty:"\uB09C\uC774\uB3C4 \uB4F1\uAE09",syllables:"\uC74C\uC808 \uC218",syllable5plus:"5\uC74C\uC808 \uC774\uC0C1",partOfSpeech:"\uD488\uC0AC",wordType:"\uC720\uD615",posMap:mo,typeMap:ho};function So(e,u,t=po){const n=u[t.difficulty];if(n?.length&&!n.some(a=>e.grade===a.replace(/\D/g,"")))return!1;const o=u[t.syllables];if(o?.length){const a=e.syllables??0;if(!o.some(s=>s===t.syllable5plus?a>=5:a===parseInt(s)))return!1}const l=u[t.partOfSpeech];if(l?.length&&!l.flatMap(a=>t.posMap[a]??[a]).some(a=>(e.pos??"").includes(a)))return!1;const r=u[t.wordType];return!(r?.length&&!r.some(a=>e.wordType===t.typeMap[a]))}const yo={labial:e=>e("common.phonetics.place.labial",{defaultValue:"\uC591\uC21C\uC74C"}),alveolar:e=>e("common.phonetics.place.alveolar",{defaultValue:"\uCE58\uC870\uC74C"}),palatal:e=>e("common.phonetics.place.palatal",{defaultValue:"\uACBD\uAD6C\uAC1C\uC74C"}),velar:e=>e("common.phonetics.place.velar",{defaultValue:"\uC5F0\uAD6C\uAC1C\uC74C"}),glottal:e=>e("common.phonetics.place.glottal",{defaultValue:"\uC131\uBB38\uC74C"})},Eo={frontHigh:e=>e("common.phonetics.vowel.frontHigh",{defaultValue:"\uC804\uC124 \uACE0\uBAA8\uC74C"}),backHighUnrounded:e=>e("common.phonetics.vowel.backHighUnrounded",{defaultValue:"\uD6C4\uC124 \uACE0\uBAA8\uC74C \uD3C9\uC21C"}),backHighRounded:e=>e("common.phonetics.vowel.backHighRounded",{defaultValue:"\uD6C4\uC124 \uACE0\uBAA8\uC74C \uC6D0\uC21C"}),frontMid:e=>e("common.phonetics.vowel.frontMid",{defaultValue:"\uC804\uC124 \uC911\uBAA8\uC74C"}),backMidUnrounded:e=>e("common.phonetics.vowel.backMidUnrounded",{defaultValue:"\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C"}),backMidRounded:e=>e("common.phonetics.vowel.backMidRounded",{defaultValue:"\uD6C4\uC124 \uC911\uBAA8\uC74C \uC6D0\uC21C"}),low:e=>e("common.phonetics.vowel.low",{defaultValue:"\uC800\uBAA8\uC74C"})},Bo={j:e=>e("common.phonetics.glide.j",{defaultValue:"j\uD65C\uC74C"}),w:e=>e("common.phonetics.glide.w",{defaultValue:"w\uD65C\uC74C"}),velar:e=>e("common.phonetics.glide.velar",{defaultValue:"\u0270\uD65C\uC74C"})};function gt(e,u){if("place"in u)return yo[u.place](e);const t=Eo[u.vowel](e);return u.glide?`${t} \xB7 ${Bo[u.glide](e)}`:t}const wo=(e,{defaultValue:u})=>u,ht=(e,u)=>({jamos:e,phonetic:u,tooltip:gt(wo,u)}),se=(e,u)=>u.map(t=>ht([t],{place:e})),q=(e,u,t)=>ht([...e],t?{vowel:u,glide:t}:{vowel:u}),pu={cho:[se("labial",["\u3142","\u3143","\u314D","\u3141"]),se("alveolar",["\u3137","\u3138","\u314C","\u3134","\u3139"]),se("alveolar",["\u3145","\u3146"]),se("palatal",["\u3148","\u3149","\u314A"]),se("velar",["\u3131","\u3132","\u314B"]),se("glottal",["\u314E"])],jung:[[q("\u3163","frontHigh"),q("\u315F","frontHigh","w"),q("\u3162","frontHigh","velar")],[q("\u3161","backHighUnrounded")],[q("\u315C","backHighRounded"),q("\u3160","backHighRounded","j")],[q("\u3154\u3150","frontMid"),q("\u3156\u3152","frontMid","j"),q("\u3159\u315A\u315E","frontMid","w")],[q("\u3153","backMidUnrounded"),q("\u3155","backMidUnrounded","j"),q("\u315D","backMidUnrounded","w")],[q("\u3157","backMidRounded"),q("\u315B","backMidRounded","j")],[q("\u314F","low"),q("\u3151","low","j"),q("\u3158","low","w")]],jong:[se("labial",["\u3142","\u3141"]),se("alveolar",["\u3137","\u3134","\u3139"]),se("velar",["\u3131","\u3147"])]},bo=[...z],Ao=[...ne],_o=ee.filter(e=>e!==""),ie=e=>e===le?[]:Array.from(e),le="__NO_CODA__",mt=[1,2,3,4],re=5,Do=12,pt="SYL_",Su=e=>`${pt}${e}`,Oo=e=>Number(e.slice(pt.length));function yu(e){return e>=re?Array.from({length:Do-re+1},(u,t)=>re+t):[e]}const St={cho:bo,jung:Ao,jong:_o},Eu=e=>e.map(u=>u.map(({jamos:t,phonetic:n,tooltip:o})=>({v:t.join(""),phonetic:n,tooltip:o}))),Bu={cho:Eu(pu.cho),jung:Eu(pu.jung),jong:Eu(pu.jong)},yt={};Bu.jung.flat().forEach(({v:e})=>{for(const u of ie(e))yt[u]=e});const No=new Set(Bu.cho.flat().map(e=>e.v));function Et(e,u){return e==="cho"?No.has(u)?u:null:e==="jung"?yt[u]??u:cu(u)}function Bt(e,u,t){if(e==="jung"){const n=ie(u);return t&&n.includes(t)?t:n[0]??u}return e==="jong"&&t&&cu(t)===u?t:u}function wt(e,u,t,n){const o=(l,r)=>r?l==="jong"&&r===le?le:u==="pron"?Et(l,r):Bt(l,r,l==="jung"?t:l==="jong"?n:null):null;return{...e,cho:o("cho",e.cho),jung:o("jung",e.jung),jong:o("jong",e.jong)}}const wu={cho:null,jung:null,jong:null,syllable:null},To="wt_filter",bt=e=>`wt_filter_${e}`;function At(e){try{const u=localStorage.getItem(bt(e))??localStorage.getItem(To);if(u)return JSON.parse(u)}catch{}return null}function _t(e){const u=e?.phonemeView;return u==="pron"?"pron":u==="direct"?"direct":"char"}function jo(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?{...wu,cho:u.choseong}:wu}function Io(e,u,t){const{t:n,i18n:o}=ce.useTranslation(),[l]=i.useState(()=>t?.resetOnMount?null:At(e)),[r,a]=i.useState(_t(l)),[s,d]=i.useState(()=>jo(l)),m=i.useCallback(()=>u.requireSyllable?{cho:"\u3131",jung:"\u314F",jong:le,syllable:u.fixedSyllable??null}:{cho:null,jung:null,jong:u.fixedNoCoda?le:null,syllable:u.fixedSyllable??null},[u.requireSyllable,u.fixedSyllable,u.fixedNoCoda]);i.useEffect(()=>{!u.requireSyllable&&u.fixedSyllable==null&&!u.fixedNoCoda||d(S=>S.cho||S.jung||S.syllable!=null||S.jong?S:m())},[]);const C=i.useMemo(()=>W(s.cho)||W(s.jung)||W(s.jong)?"count":"random",[s.cho,s.jung,s.jong]),c=i.useRef(r==="char"?s.jung:null),g=i.useRef(r==="char"?s.jong:null);i.useEffect(()=>{r==="char"&&(c.current=s.jung,g.current=s.jong)},[r,s.jung,s.jong]);const[f,E]=i.useState(t?.resetOnMount?!!t?.defaultImageOnly:l?.excludeNoImage??!0),[p,h]=i.useState(t?.resetOnMount?!1:l?.sameStructureOnly??!0),[y,w]=i.useState(Array.isArray(l?.gradeFilter)?l.gradeFilter:[]),[A,D]=i.useState(Array.isArray(l?.posFilter)?l.posFilter:[]),[b,I]=i.useState(Array.isArray(l?.wordTypeFilter)?l.wordTypeFilter:[]),k=i.useRef(t?.resetKey);i.useEffect(()=>{k.current!==t?.resetKey&&(k.current=t?.resetKey,d(m()),E(!!t?.defaultImageOnly),h(!1),w([]),D([]),I([]))},[t?.resetKey]);const M=ct(),[O,F]=i.useState({cho:new Set,jung:new Set,jong:new Set,syllable:new Set}),[$,Y]=i.useState(!1),[j,v]=i.useState(null),V=1,U=Math.max(1,[s.cho,s.jung,s.jong].filter(Boolean).length),[te,me]=i.useState(e);i.useEffect(()=>{if(te!==e){if(!t?.resetOnMount){const S=At(e);d(S?.composition??m()),E(S?.excludeNoImage??!0),h(S?.sameStructureOnly??!0),a(_t(S)),w(Array.isArray(S?.gradeFilter)?S.gradeFilter:[]),D(Array.isArray(S?.posFilter)?S.posFilter:[]),I(Array.isArray(S?.wordTypeFilter)?S.wordTypeFilter:[])}me(e)}},[e,te,t?.resetOnMount]),i.useEffect(()=>{if(!t?.resetOnMount&&te===e)try{localStorage.setItem(bt(e),JSON.stringify({contrastCount:U,composition:s,excludeNoImage:f,sameStructureOnly:p,phonemeView:r,gradeFilter:y,posFilter:A,wordTypeFilter:b}))}catch{}},[t?.resetOnMount,e,te,U,s,f,p,r,y,A,b]);const[B,_]=i.useState(0);Mu("wordpool:update",()=>_(S=>S+1));const G=i.useRef(o.language);i.useEffect(()=>{G.current!==o.language&&(G.current=o.language,_(S=>S+1))},[o.language]),i.useEffect(()=>{if(!u.choseong)return;let S=!1;return io({difficulty:C,excludeNoImage:f}).then(T=>{S||(F(T),T.cho.size+T.jung.size+T.jong.size>0&&Y(!0))}).catch(()=>{S||F({cho:new Set,jung:new Set,jong:new Set,syllable:new Set})}),()=>{S=!0}},[u.choseong,C,f,B]),i.useEffect(()=>{let S=!1;const T=s,N=T.cho?ie(T.cho):null,L=T.jung?ie(T.jung):null,K=T.jong===le,pe=K?null:T.jong?ie(T.jong):null,Se=T.syllable!=null?yu(T.syllable):null,$e=!!(N||L||pe||K||Se);return so({difficulty:u.difficulty?C:null,contrastCount:u.difficulty?U:1,composition:u.choseong&&$e?{cho:N,jung:L,jong:pe,jongNone:K,syllable:Se}:null,excludeNoImage:f,sameStructureOnly:p,phonemeView:r==="pron"?"pron":"char",grade:y.length>0?y:null}).then(He=>{S||v(He)}).catch(()=>{S||v(null)}),()=>{S=!0}},[u.choseong,u.difficulty,C,U,s,r,f,p,B,y]),i.useEffect(()=>{$&&d(S=>{const T={...S};let N=!1;return["cho","jung","jong"].forEach(L=>{const K=S[L];!K||K===le||ie(K).some(pe=>O[L].has(pe))||(T[L]=null,N=!0)}),S.syllable!=null&&u.fixedSyllable==null&&(S.syllable>=re?[...O.syllable].some(L=>L>=re)||(T.syllable=null,N=!0):(!O.syllable.has(S.syllable)||S.syllable<V)&&(T.syllable=null,N=!0)),N?T:S})},[O,$,V,u.fixedSyllable]);const H=i.useMemo(()=>{const S=T=>{const N=new Set;for(const L of St[T])O[T].has(L)&&N.add(L);return N};return{cho:S("cho"),jung:S("jung"),jong:S("jong")}},[O]),X=i.useMemo(()=>({exact:new Set(mt.filter(S=>O.syllable.has(S))),min:[...O.syllable].some(S=>S>=re)}),[O]),R=i.useMemo(()=>({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=i.useMemo(()=>({[R.trainOnset]:"cho",[R.trainVowel]:"jung",[R.trainCoda]:"jong"}),[R]),Ve=i.useCallback((S,T)=>({title:T,items:S}),[]),ou=i.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]),Rt=i.useMemo(()=>{const S=[];if(u.choseong){const T={value:le,displayLabel:R.codaExclude},N=u.fixedNoCoda===!0,L=(K,pe)=>{const Se=N&&K==="jong",$e={label:pe,groupLabel:R.phonemeGroup,allOption:!u.requireSyllable,allLabel:R.noLimit,allOptionDisabled:Se};if(r==="pron"){const ye=Bu[K].map(Ft=>Ft.map(({v:lu,phonetic:Vt})=>{const ru=ie(lu),Nu=gt(n,Vt),Tu=Se||!ru.some($t=>O[K].has($t));return ru.length>1?{value:lu,labels:ru,tooltip:Nu,disabled:Tu}:{value:lu,tooltip:Nu,disabled:Tu}}));return K==="jong"&&!u.requireCoda&&ye.unshift([T]),{...$e,groups:ye}}const He=St[K].map(ye=>!Se&&H[K].has(ye)?ye:{value:ye,disabled:!0});return{...$e,items:K==="jong"&&!u.requireCoda?[T,...He]:He}};S.push(L("cho",R.trainOnset)),S.push(L("jung",R.trainVowel)),S.push(L("jong",R.trainCoda))}if(S.push({...Ct(n,M,{labelInfo:Ve([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:R.gradeLabel}),u.partOfSpeech&&S.push(dt(M)),u.wordType&&S.push(ft(M)),u.choseong||u.fixedSyllable!=null){const T=u.fixedSyllable;S.push({label:R.syllableCount,items:[...mt.map(N=>({value:Su(N),displayLabel:n("wordPairs.syllableN",{n:N,defaultValue:"{{n}}\uC74C\uC808"}),disabled:T!=null?N!==T:!X.exact.has(N)||N<V})),{value:Su(re),displayLabel:n("wordPairs.syllableNPlus",{n:re,defaultValue:"{{n}}\uC74C\uC808 \uC774\uC0C1"}),disabled:T!=null?re!==T:!X.min}],allOption:!0,allOptionDisabled:T!=null})}return u.choseong?S.push({label:R.exclude,displayLabel:R.selectLabel,multiple:!0,items:[R.excludeImage,R.sameStructure],labelInfo:Ve(ou)}):S.push({label:R.exclude,displayLabel:R.selectLabel,multiple:!0,items:[R.excludeImage],labelInfo:Ve([ou[0]])}),S},[u.choseong,u.partOfSpeech,u.wordType,u.requireSyllable,u.fixedSyllable,u.fixedNoCoda,u.requireCoda,V,H,O,r,X,R,n,Ve,ou,M]),Mt={...(u.choseong||u.fixedSyllable!=null)&&s.syllable!=null?{[R.syllableCount]:Su(s.syllable)}:{},...u.choseong&&s.cho?{[R.trainOnset]:s.cho}:{},...u.choseong&&s.jung?{[R.trainVowel]:s.jung}:{},...u.choseong&&s.jong?{[R.trainCoda]:s.jong}:{},[R.exclude]:[...f?[R.excludeImage]:[],...p?[R.sameStructure]:[]],[R.gradeLabel]:y.map(S=>n("wordSearch.filter.grade",{n:Number(S),defaultValue:"{{n}}\uB4F1\uAE09"})),...u.partOfSpeech?{[M.partOfSpeech]:A}:{},...u.wordType?{[M.wordType]:b}:{}},Lt=i.useCallback((S,T)=>{if(T===R.exclude)S===R.excludeImage?E(N=>!N):S===R.sameStructure&&h(N=>!N);else if(T===R.syllableCount)d(N=>{if(!S||S===he)return{...N,syllable:null};const L=Oo(S);return{...N,syllable:N.syllable===L?null:L}});else if(T===R.gradeLabel){if(!S||S===he){w([]);return}const N=S.replace(/\D/g,"");w(L=>L.includes(N)?L.filter(K=>K!==N):[...L,N])}else if(T===M.partOfSpeech){if(!S||S===he){D([]);return}D(N=>N.includes(S)?N.filter(L=>L!==S):[...N,S])}else if(T===M.wordType){if(!S||S===he){I([]);return}I(N=>N.includes(S)?N.filter(L=>L!==S):[...N,S])}else{const N=Ou[T];if(!N)return;d(L=>u.requireSyllable?S&&S!==he?{...L,[N]:S}:L:!S||S===he||L[N]===S?{...L,[N]:null}:{...L,[N]:S})}},[R,Ou,M,u.requireSyllable]),kt=i.useCallback(S=>!u.partOfSpeech&&!u.wordType?!0:So(S,{...u.partOfSpeech?{[M.partOfSpeech]:A}:{},...u.wordType?{[M.wordType]:b}:{}},M),[u.partOfSpeech,u.wordType,A,b,M]),vt=i.useCallback(S=>{S!==r&&(S!=="direct"&&r!=="direct"&&d(T=>wt(T,S,c.current,g.current)),a(S))},[r]),Pt=i.useCallback(()=>({composition:s,contrastCount:U,excludeNoImage:f,sameStructureOnly:p,phonemeView:r,gradeFilter:y,posFilter:A,wordTypeFilter:b}),[s,U,f,p,r,y,A,b]),xt=i.useCallback(S=>{d(S.composition),E(S.excludeNoImage),h(S.sameStructureOnly??!0),a(S.phonemeView),w(Array.isArray(S.gradeFilter)?S.gradeFilter:[]),Array.isArray(S.posFilter)&&D(S.posFilter),Array.isArray(S.wordTypeFilter)&&I(S.wordTypeFilter)},[]);return{difficulty:C,contrastCount:U,composition:s,choseong:s.cho,excludeNoImage:f,sameStructureOnly:p,gradeFilter:y,posFilter:A,wordTypeFilter:b,matchesWordAttributes:kt,poolVersion:B,filterSections:Rt,filterSelected:Mt,handleFilterSelect:Lt,phonemeView:r,setPhonemeView:vt,phonemeGroupLabel:R.phonemeGroup,wordCount:j,getFilterSnapshot:Pt,restoreFilterSnapshot:xt}}function Ro(e){const u=a=>a?ie(a):null,t=u(e.cho),n=u(e.jung),o=e.jong===le,l=o?null:u(e.jong),r=e.syllable!=null?yu(e.syllable):null;return!t&&!n&&!l&&!o&&!r?null:{cho:t,jung:n,jong:l,jongNone:o,syllable:r}}function Mo(e,u,t,n,o,l,r=!0,a="char",s=[]){const[d,m]=i.useState({}),[C,c]=i.useState(!1),{cho:g=null,jung:f=null,jong:E=null,syllable:p=null}=n??{},h=s.length>0?s.slice().sort().join(","):"";return i.useEffect(()=>{l>0&&ao(o).catch(()=>{})},[l,o]),i.useEffect(()=>{let y=!1;return c(!0),(async()=>{const w=Ro({cho:g,jung:f,jong:E,syllable:p}),A=`${g??""}_${f??""}_${E??""}_${p??""}_${h}`,D={};await Promise.all(e.map(async b=>{const I=iu[b.key];try{const k=await it(b.key,{difficulty:I.difficulty?u:null,contrastCount:I.difficulty?t:1,composition:I.choseong?w:null,count:5,excludeNoImage:o,sameStructureOnly:r,phonemeView:a,grade:s.length>0?s:null});k&&k.length>0?D[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:k,itemCount:k.length}:D[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{D[b.key]=null}})),y||(m(D),c(!1))})(),()=>{y=!0}},[u,t,g,f,E,p,o,r,a,l,h]),{perTypeData:d,generating:C}}function Lo(){return Qe(new Date)}function Qe(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 Re=[],Me=[],Le=[],ke=[],Ze={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},Xe={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},ko={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let bu=null,Dt=null,fe=null;function vo({counts:e,forceRefresh:u}={}){const t=Object.assign({},ko,e||{}),n=Lo(),o=Qe(new Date(`${n}T00:00:00+09:00`).getTime()-864e5),l=JSON.stringify(t);if(!u&&Dt===n&&bu===l&&fe)return Object.assign(Ze,fe.today),Object.assign(Xe,fe.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:Ze,yesterday:Xe};const r={LISTEN_IN_NOISE:ae(Re,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:ae(Me,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:ae(Le,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:ae(ke,Math.max(0,Number(t.ORDERING_SENTENCE)||0))};let a=null;return fe&&bu===l&&fe.yesterday&&fe.yesterday.date===o&&(a=fe.yesterday.selection),a||(a={LISTEN_IN_NOISE:ae(Re,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:ae(Me,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:ae(Le,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:ae(ke,Math.max(0,Number(t.ORDERING_SENTENCE)||0))}),Object.assign(Ze,r),Object.assign(Xe,a),Dt=n,bu=l,fe={today:r,yesterday:{date:o,countsKey:l,selection:a}},{today:Ze,yesterday:Xe}}let Ot=!1,ve=null;async function Po(){try{const e={url:typeof document>"u"?require("url").pathToFileURL(__filename).href:au&&au.tagName.toUpperCase()==="SCRIPT"&&au.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 xo(){if(!Ot)return ve||(ve=(async()=>{const e=await Po();if(!e){ve=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||""),a=String(o.category_sub_code||o.category_sub||o.category_1||""),s=Object.assign({},o,{training_type:l,category_0:r,category_1:a});l==="LISTEN_IN_NOISE"?Re.push(s):l==="SHORT_STORY"?Me.push(s):l==="LONG_STORY"?Le.push(s):l==="ORDERING_SENTENCE"&&ke.push(s)}}}catch{ve=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}try{vo()}catch{}Ot=!0})(),ve)}async function Fo(e=3e3){const u=xo();return Promise.race([u,new Promise(t=>setTimeout(t,e))])}function Vo(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 eu=ae;function Au(e,u){const t=u?$o(Vo(u)):Math.random;return{LISTEN_IN_NOISE:eu(Re,Math.max(0,e.LISTEN_IN_NOISE||0),t),SHORT_STORY:eu(Me,Math.max(0,e.SHORT_STORY||0),t),LONG_STORY:eu(Le,Math.max(0,e.LONG_STORY||0),t),ORDERING_SENTENCE:eu(ke,Math.max(0,e.ORDERING_SENTENCE||0),t)}}function Nt(e){return e?!!(e.LISTEN_IN_NOISE?.length||e.SHORT_STORY?.length||e.LONG_STORY?.length||e.ORDERING_SENTENCE?.length):!1}const Ho={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};function Tt(e=!1,u=Ho,t){const n=Qe(Date.now()),o=Qe(Date.now()-864e5),l=`${t??""}|${n}`,r=`${t??""}|${o}`;return Re.length>0||Me.length>0||Le.length>0||ke.length>0?{today:Au(u,l),yesterday:Au(u,r)}:{today:Au(u,l),yesterday:null}}function Go(e){const u=i.useRef({LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),t=i.useRef(null),[n,o]=i.useState(!1),[l,r]=i.useState(!1),[a,s]=i.useState(0),[d,m]=i.useState(!1);i.useEffect(()=>{let c=!1,g,f=0;const E=40,p=()=>{g!==void 0&&(clearInterval(g),g=void 0)};let h=!1;try{const A=new URLSearchParams(window.location.search),D=A.get("forceRefresh")||A.get("force");h=D==="1"||D==="true"}catch{}const y=A=>{u.current=A.today,t.current=A.yesterday,o(!0),m(!0),s(D=>D+1),c=!0,p()},w=async()=>{if(c)return;if(!h){const D=Tt(!1,void 0,e);if(Nt(D.today)){y(D);return}}try{await Fo(3e3)}catch{}if(c)return;const A=Tt(h,void 0,e);if(Nt(A.today)){y(A);return}++f>=E&&(o(!0),m(!1),c=!0,p())};return w(),g=setInterval(w,250),()=>{c=!0,p()}},[e]);const C=i.useCallback(c=>{const g=l?t.current:u.current,f=l?u.current:t.current;return g?.[c]?.length?g[c]:f?.[c]?.length?f[c]:void 0},[l,a]);return{loaded:n,hasData:d,showYesterday:l,setShowYesterday:r,getTrainingPerType:C}}const we=[];let uu=!1;function jt(e){if(e.key!=="Escape"||e.defaultPrevented)return;const u=we[we.length-1];u&&(e.stopPropagation(),u())}function It(e){return we.push(e),!uu&&typeof document<"u"&&(document.addEventListener("keydown",jt),uu=!0),()=>{const u=we.lastIndexOf(e);u>=0&&we.splice(u,1),we.length===0&&uu&&typeof document<"u"&&(document.removeEventListener("keydown",jt),uu=!1)}}function Yo(e,u=!0){const t=Ru(e);i.useEffect(()=>{if(u)return It(()=>{t.current?.()})},[u,t])}const _u=(e,u)=>`${e}:${u??1}`,Du=new Map;function Uo(e,u){const[t,n]=i.useState(0),o=e.map(l=>_u(l.word,l.homonum)).join("|");return i.useEffect(()=>{const l=(o?o.split("|"):[]).filter(s=>!Du.has(s));if(l.length===0)return;let r=!1;const a=Array.from(new Set(l.map(s=>s.slice(0,s.lastIndexOf(":")))));return u(a).then(s=>{if(!(r||s.length===0)){for(const d of s)d.Meaning&&Du.set(_u(d.Word,d.Homonum??void 0),d.Meaning);n(d=>d+1)}}).catch(()=>{}),()=>{r=!0}},[o,u]),i.useMemo(()=>{const l=o?o.split("|"):[],r=new Map;for(const a of l){const s=Du.get(a);s!=null&&r.set(a,s)}return r},[o,t])}function Ko(){const[e,u]=i.useState(null),t=i.useCallback(l=>u(l.getBoundingClientRect()),[]),n=i.useCallback(()=>u(null),[]),o=i.useCallback(l=>{const r=l.getBoundingClientRect();u(a=>a?null:r)},[]);return{anchorRect:e,isOpen:e!=null,openAt:t,close:n,toggleAt:o}}function Wo(e){const[u,t]=i.useState(null),[n,o]=i.useState(null),l=i.useRef(null);i.useEffect(()=>()=>{l.current&&clearTimeout(l.current)},[]);const r=i.useCallback((s,d)=>{l.current&&clearTimeout(l.current),l.current=setTimeout(()=>{t(s),o(d)},e)},[e]),a=i.useCallback(()=>{l.current&&clearTimeout(l.current),t(null),o(null)},[]);return{payload:u,anchorRect:n,openAfterDelay:r,close:a}}function qo(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:i.useMemo(()=>e.slice((l-1)*n,l*n),[e,l,n]),totalPages:o,curPage:l}}function zo(e="warning"){const[u,t]=i.useState(""),[n,o]=i.useState(e),[l,r]=i.useState(0),a=i.useCallback((C,c)=>{o(c),t(C),r(g=>g+1)},[]),s=i.useCallback(C=>a(C,"warning"),[a]),d=i.useCallback(C=>a(C,"normal"),[a]),m=i.useCallback(()=>t(""),[]);return{toastMessage:u,toastType:n,toastKey:l,showToast:a,showWarning:s,showNormal:d,clearToast:m}}const Jo=[{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."}],Qo={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};function Zo(e){return Jo.map(u=>{const t=Qo[u.key];return t?{...u,label:e(`trainingType.${t}.title`),desc:e(`trainingType.${t}.desc`)}:u})}const Pe={blue:"#60A5FA",green:"#4ADE80",amber:"#FBBF24",purple:"#A78BFA",pink:"#F472B6"},xe=Pe.blue,tu=Pe.green,Fe=Pe.amber,nu=Pe.purple,Xo=Pe.pink,el=[{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:xe,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:xe,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:xe,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:xe,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:xe,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:tu,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:tu,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:tu,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:tu,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:nu,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:nu,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:nu,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:nu,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:Xo,subTitle:"\uC138 \uB2E8\uC5B4\uB97C \uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCE74\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694."}]}];function ul(){const{t:e}=ce.useTranslation();return i.useMemo(()=>{const u=Object.fromEntries(Zo(e).map(n=>[n.key,n.label])),t={...u};return el.flatMap(n=>n.types).forEach(n=>{t[n.key]=e(`trainingType.${n.key}.label`,{defaultValue:n.label})}),{sentence:u,all:t}},[e])}const tl="0.134.0";function nl({computeStyle:e,onScroll:u="close",onResize:t="close",ignoreOutsideClickSelector:n}){const[o,l]=i.useState(!1),[r,a]=i.useState({}),s=i.useRef(null),d=i.useRef(null),m=i.useCallback(()=>{s.current&&a(e(s.current.getBoundingClientRect()))},[e]);i.useEffect(()=>{if(!o)return;m();const g=p=>{const h=p.target;n&&h.closest?.(n)||s.current?.contains(h)||d.current?.contains(h)||l(!1)};document.addEventListener("mousedown",g);const f=p=>{d.current?.contains(p.target)||(u==="reposition"?m():u==="close"&&l(!1))};u!=="ignore"&&window.addEventListener("scroll",f,!0);const E=()=>{t==="reposition"?m():t==="close"&&l(!1)};return t!=="ignore"&&window.addEventListener("resize",E),()=>{document.removeEventListener("mousedown",g),u!=="ignore"&&window.removeEventListener("scroll",f,!0),t!=="ignore"&&window.removeEventListener("resize",E)}},[o,m,u,t,n]),i.useEffect(()=>{if(o)return It(()=>l(!1))},[o]);const C=i.useCallback(()=>l(g=>!g),[]),c=i.useCallback(()=>l(!1),[]);return{open:o,setOpen:l,toggle:C,close:c,style:r,triggerRef:s,menuRef:d}}function ol(e,{mode:u="playback",autoStart:t=!1,onPlaySpeaker:n,onComplete:o,playMs:l=1100,feedbackMs:r=1500}={}){const[a,s]=i.useState([]),[d,m]=i.useState(0),[C,c]=i.useState("idle"),[g,f]=i.useState(null),[E,p]=i.useState([]),[h,y]=i.useState(null),[w,A]=i.useState(0),D=i.useRef(0),b=i.useCallback(B=>{D.current=typeof B=="function"?B(D.current):B,A(D.current)},[]),I=i.useRef(n),k=i.useRef(o);i.useEffect(()=>{I.current=n,k.current=o},[n,o]);const M=i.useRef([]),O=()=>{M.current.forEach(clearTimeout),M.current=[]},F=(B,_)=>{M.current.push(setTimeout(_,B))};i.useEffect(()=>()=>O(),[]);const $=a[d]?.id??null,Y=i.useCallback(()=>{O(),c("playing"),p([]),y(null),b(0);let B=0;e.forEach((_,G)=>{F(B,()=>{m(G),f(_.id),I.current?.(_)}),F(B+1e3,()=>{f(null),p(H=>[...H,_.id])}),B+=1300}),F(B,()=>{c("done"),k.current?.({score:0,total:e.length})})},[e,b]),j=i.useCallback((B,_)=>{if(_>=B.length){c("done"),k.current?.({score:D.current,total:B.length});return}m(_),y(null),c("playing"),f(B[_].id),I.current?.(B[_]),F(l,()=>{f(null),c("waiting")})},[l]),v=i.useCallback(()=>{O();const B=P(e);s(B),b(0),p([]),j(B,0)},[e,j,b]),V=i.useCallback(()=>{u==="playback"?(s(e),Y()):v()},[u,e,Y,v]),U=i.useCallback(()=>{O(),c("idle"),f(null),p([]),y(null),m(0),b(0),s([])},[b]);i.useEffect(()=>{t?V():U()},[u,e.length,t]);const te=i.useCallback(B=>{C!=="waiting"||u==="playback"||(y(B),B===a[d]?.id&&b(_=>_+1),u==="exam"?(c("playing"),F(400,()=>j(a,d+1))):(c("feedback"),F(r,()=>j(a,d+1))))},[C,u,a,d,j,r,b]),me=u==="playback"?e.length:a.length;return{bind:{activeSpeakerId:g,playedIds:E,selectedId:h,answerId:$,showFeedback:C==="feedback",clickable:C==="waiting",onSelectSpeaker:te},index:d,total:me,score:w,phase:C,done:C==="done",start:V,reset:U}}exports.CACHE_GROUPS=Hu,exports.CORE_VERSION=tl,exports.DocumentTitleSuppressContext=ku,exports.EMPTY_COMPOSITION=wu,exports.MediaQueryOverrideContext=Iu,exports.NO_CODA=le,exports.SYLLABLE_MIN=re,exports.VAP_PAGE_SIZE_OPTIONS=Ye,exports.buildGradeSection=Ct,exports.buildPartOfSpeechSection=dt,exports.buildPositionSection=fo,exports.buildSelectSection=Co,exports.buildSyllableSection=co,exports.buildWordTypeSection=ft,exports.charToPronValue=Et,exports.convertComposition=wt,exports.fmtBytes=Cn,exports.lsBytes=Gu,exports.meaningKey=_u,exports.pronToCharValue=Bt,exports.syllableToFilter=yu,exports.today=Oe,exports.toggleAttributeFilter=go,exports.useAnchoredMenu=nl,exports.useCacheManagement=dn,exports.useDailyTrainingSelection=Go,exports.useDelayedHoverAnchor=Wo,exports.useDeviceManagement=Bn,exports.useDocumentTitle=Ut,exports.useEscToClose=Yo,exports.useFontScale=Ht,exports.useHoverAnchor=Ko,exports.useMediaQuery=Yt,exports.usePagedList=qo,exports.usePasswordChange=zt,exports.useRelativeDay=Kt,exports.useSoundCompassExam=ol,exports.useTablePaging=yn,exports.useTableSort=En,exports.useToastState=zo,exports.useTrainingTypeLabels=ul,exports.useVisitAllPanel=Sn,exports.useVisitHistory=hn,exports.useVisitSchedule=pn,exports.useWindowEvent=Mu,exports.useWordAttributeFilterKeys=ct,exports.useWordDataStats=fn,exports.useWordMeanings=Uo,exports.useWordTrainingDataGeneration=Mo,exports.useWordTrainingFilter=Io,exports.valueToJamos=ie;
|