@ihabdevteam/core 0.8.1 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/utils.esm.js CHANGED
@@ -17,4 +17,4 @@ function dt(e,{onEnd:n,rate:t=.9}={}){if(typeof window>"u"||typeof SpeechSynthes
17
17
  \uC124\uCE58 \uBA85\uB839\uC5B4 (\uC2A4\uD1A0\uB9AC\uC9C0 SDK \uBBF8\uC124\uCE58 \uC2DC):
18
18
  npm install @supabase/supabase-js
19
19
  pnpm add @supabase/supabase-js
20
- `),this.name="StorageNotConfiguredError"}};function Et(e){yt(e)}function At(e,n){if(!e)return null;const t=ee();return t?.resolvePath?t.resolvePath(e,n):n?`${n}/${e}.mp3`:null}async function sn(e){if(!e)return!1;const n=ee();if(!n)throw new $e("fileExists");if(n.exists)return n.exists(e);try{return await n.resolveUrl(e)!==null}catch{return!1}}async function cn(e){if(!e)return null;const n=ee();if(!n)throw new $e("getSignedOrPublicUrl");try{return await n.resolveUrl(e)}catch{return null}}async function Tt(e){const n=ee();if(!n)throw new $e("downloadSound");return n.download(e)}function wt(){return ee()?.noiseBaseUrl??"/sounds/noise"}const Ie="__ihab_core_tts_config__";function pt(e){globalThis[Ie]=e}function Bt(){return globalThis[Ie]?.urlResolver??null}function bt(){return globalThis[Ie]?.fallbackUrlResolver??null}const _t=new Map;function Lt(){_t.clear()}const ln="__ihab_core_pronunciation_resolver__";function Nt(e){globalThis[ln]=e}function jt(){return globalThis[ln]??null}let ne=null;const Cn=new WeakMap;function kt(){if(ne)return ne;try{const e=window.AudioContext||window.webkitAudioContext;return e?(ne=new e,ne):null}catch{return null}}function Rt(){try{ne?.resume()}catch{}}function Ot(e){if(!e)return null;const n=Cn.get(e);if(n)return n;const t=kt();if(!t)return null;try{const u=t.createMediaElementSource(e),r=t.createAnalyser();return r.fftSize=1024,r.smoothingTimeConstant=.6,u.connect(r),u.connect(t.destination),Cn.set(e,r),r}catch{return null}}function Mt(e,n){e.getFloatTimeDomainData(n);let t=0;for(let u=0;u<n.length;u++){const r=n[u];t+=r*r}return Math.sqrt(t/n.length)}const gn="__ihab_core_image_config__";function $t(e){globalThis[gn]=e}function dn(){return globalThis[gn]??null}const te="word_image_existence_map_v1";let M=null;const Ae=new Map;function ue(){if(M)return M;try{const e=typeof localStorage<"u"?localStorage.getItem(te):null;M=e?JSON.parse(e):{}}catch{M={}}return M}let Pe=null;function It(){Pe||(Pe=setTimeout(()=>{Pe=null;try{typeof localStorage<"u"&&M&&localStorage.setItem(te,JSON.stringify(M))}catch{}},200))}function Te(e,n){return`${e}_${n??1}`}async function fn(e,n){const t=ue(),u=Te(e,n);if(u in t)return t[u];if(Ae.has(u))return Ae.get(u);const r=dn();if(!r)return!1;const i=r(e,n);if(!i)return!1;const o=fetch(i,{method:"HEAD",signal:AbortSignal.timeout(8e3)}).then(a=>a.ok).catch(()=>!1).then(a=>(t[u]=a,It(),Ae.delete(u),a));return Ae.set(u,o),o}function Pt(e,n){const t=ue(),u=Te(e,n);return u in t?t[u]:void 0}async function vt(e,n={}){const{force:t=!1,concurrency:u=16,onProgress:r}=n,i=ue(),o=t?Array.from(new Set(e)):Array.from(new Set(e)).filter(c=>!(Te(c)in i));let a=0;if(o.length>0){let c=0;const s=Array.from({length:Math.min(u,o.length)},async()=>{for(;c<o.length;){const C=c++,l=o[C],g=Te(l);if(!t&&g in i){a++,r?.(a,o.length);continue}try{await fn(l)}catch{}a++,r?.(a,o.length)}});await Promise.all(s)}try{typeof localStorage<"u"&&M&&localStorage.setItem(te,JSON.stringify(M))}catch{}return{checked:o.length,cached:Object.keys(i).length,total:e.length}}function Gt(){const e=ue(),n=Object.values(e);return n.length===0?null:{total:n.length,exists:n.filter(Boolean).length}}function Ft(e){const n=ue();Object.assign(n,e);try{typeof localStorage<"u"&&localStorage.setItem(te,JSON.stringify(n))}catch{}}function xt(){M={};try{typeof localStorage<"u"&&localStorage.removeItem(te)}catch{}}const w=["\u3131","\u3132","\u3134","\u3137","\u3138","\u3139","\u3141","\u3142","\u3143","\u3145","\u3146","\u3147","\u3148","\u3149","\u314A","\u314B","\u314C","\u314D","\u314E"],_=["\u314F","\u3150","\u3151","\u3152","\u3153","\u3154","\u3155","\u3156","\u3157","\u3158","\u3159","\u315A","\u315B","\u315C","\u315D","\u315E","\u315F","\u3160","\u3161","\u3162","\u3163"],N=["","\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 h(e){if(!e)return null;const n=e.charCodeAt(0)-44032;return n<0||n>=11172?null:{cho:Math.floor(n/588),jung:Math.floor(n%588/28),jong:n%28}}function Wt(){const e=new Map;return n=>{let t=e.get(n);return t||(t=[...n].map(u=>h(u)),e.set(n,t)),t}}function H(e,n,t=0){return String.fromCharCode(44032+(e*21+n)*28+t)}function Ht(e,n){if(!e||!n||e===n||e.length!==n.length)return"random";let t=0,u=null;for(let r=0;r<e.length;r++){const i=h(e[r]),o=h(n[r]);if(!i||!o)return"random";if(i.cho===o.cho&&i.jung===o.jung&&i.jong===o.jong)continue;t++;const a=i.cho!==o.cho,c=i.jung!==o.jung,s=i.jong!==o.jong;(a?1:0)+(c?1:0)+(s?1:0)>1?u="multi":a?u="cho":c?u="jung":u="jong"}return t!==1?"random":u==="cho"?"cho":u==="jung"?"jung":u==="jong"?"jong":"random"}function hn(e){const n=h(e[0]||"");return n?w[n.cho]:""}function mn(e){return[...e].map(n=>{const t=h(n);return t?w[t.cho]:n}).join("")}function Sn(e){return!!e&&[...e].every(n=>w.includes(n))}function Yt(e,n){return n?Sn(n)?mn(e).includes(n):e.toLowerCase().includes(n.toLowerCase()):!0}function we(e,n){if(!n)return!0;const t=[...n],u=a=>w.includes(a),r=a=>_.includes(a),i=t.map(a=>u(a)?"cho":r(a)?"jung":h(a)?"syl":"other");if(i.includes("other"))return e.includes(n);const o=[...e];for(let a=0;a+t.length<=o.length;a++){let c=!0;for(let s=0;s<t.length;s++){const C=o[a+s],l=i[s];if(l==="cho"){if(hn(C)!==t[s]){c=!1;break}}else if(l==="jung"){const g=h(C);if(!g||_[g.jung]!==t[s]){c=!1;break}}else{const g=h(t[s]);if(g&&g.jong===0){const m=h(C);if(!m||m.cho!==g.cho||m.jung!==g.jung){c=!1;break}}else if(C!==t[s]){c=!1;break}}}if(c)return!0}return!1}const ve={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"]},Dn=Object.fromEntries(Object.entries(ve).map(([e,n])=>[n.join(""),N[Number(e)]]));function Kt(e,n){if(!e||!n)return!1;for(const t of e){const u=h(t);if(u&&w[u.cho]===n)return!0}return!1}function Ut(e,n){if(!e||!n)return!1;for(const t of e){const u=h(t);if(u&&_[u.jung]===n)return!0}return!1}function Vt(e,n){if(!e||!n)return!1;for(const t of e){const u=h(t);if(!u||u.jong<=0)continue;if(N[u.jong]===n)return!0;const r=ve[u.jong];if(r&&r.includes(n))return!0}return!1}function Jt(e){if(!e)return 0;let n=0;for(const t of e)h(t)&&n++;return n}function qt(e){if(!e)return!1;let n=!1;for(const t of e){const u=h(t);if(u&&(n=!0,u.jong>0))return!1}return n}function zt(e,n){if(e.jong<=0)return!1;if(n.includes(N[e.jong]))return!0;const t=ve[e.jong];return!!t&&t.some(u=>n.includes(u))}function Zt(e,n,t){if(!e)return!1;const u=[...e],r=i=>{const o=h(u[i]);if(!o||n.cho&&!n.cho.includes(w[o.cho])||n.jung&&!n.jung.includes(_[o.jung]))return!1;if(n.jongNone){if(o.jong>0)return!1}else if(n.jong&&!zt(o,n.jong))return!1;return!0};if(t==="head")return r(0);if(t==="tail")return r(u.length-1);if(t==="mid"){for(let i=1;i<u.length-1;i++)if(r(i))return!0;return!1}for(let i=0;i<u.length;i++)if(r(i))return!0;return!1}function yn(e){return e.includes(",")||e.includes("_")}function En(e){if(e==="")return[{kind:"any"}];if(e.includes("_")){const n=[...e];if(n.length>4)return[{kind:"invalid"}];const t=n[0]??"_",u=n[1]??"_";let r=n.slice(2).join("");if(r.length===2){const i=Dn[r];if(!i)return[{kind:"invalid"}];r=i}return[{kind:"template",cho:t,jung:u,jong:r||"_"}]}return[...e].map(n=>h(n)?{kind:"syllable",ch:n}:w.includes(n)?{kind:"cho",jamo:n}:_.includes(n)?{kind:"jung",jamo:n}:{kind:"invalid"})}function Qt(e,n){switch(n.kind){case"any":return!0;case"syllable":{const t=h(n.ch);if(!t)return e===n.ch;if(t.jong===0){const u=h(e);return!!u&&u.cho===t.cho&&u.jung===t.jung}return e===n.ch}case"cho":{const t=h(e);return!!t&&w[t.cho]===n.jamo}case"jung":{const t=h(e);return!!t&&_[t.jung]===n.jamo}case"template":{const t=h(e);return!(!t||n.cho!=="_"&&w[t.cho]!==n.cho||n.jung!=="_"&&_[t.jung]!==n.jung||n.jong!=="_"&&N[t.jong]!==n.jong)}case"invalid":return!1}}function An(e,n){const t=n.split(",").flatMap(r=>En(r.trim()));if(t.length===0)return!0;const u=[...e];if(u.length<t.length)return!1;for(let r=0;r+t.length<=u.length;r++)if(t.every((i,o)=>Qt(u[r+o],i)))return!0;return!1}function Xt(e){const n=e.split(",").flatMap(i=>En(i.trim())),t=new Set,u=new Set,r=new Set;for(const i of n)switch(i.kind){case"cho":t.add(i.jamo);break;case"jung":u.add(i.jamo);break;case"template":i.cho!=="_"&&t.add(i.cho),i.jung!=="_"&&u.add(i.jung),i.jong!=="_"&&r.add(i.jong);break;case"syllable":{const o=h(i.ch);o&&(t.add(w[o.cho]),u.add(_[o.jung]),o.jong!==0&&r.add(N[o.jong]));break}}return t.size===0&&u.size===0&&r.size===0?null:{cho:t.size?[...t]:null,jung:u.size?[...u]:null,jong:r.size?[...r]:null}}function eu(e){return!!h(e)||w.includes(e)||_.includes(e)}function nu(e){const n=e.trim();if(!n)return{ok:!0};for(const t of n.split(",")){const u=t.trim();if(u!==""){if(u.includes("_")){const r=[...u];if(r.length>4)return{ok:!1};const i=r[0],o=r[1],a=r.slice(2).join(""),c=i===void 0||i==="_"||w.includes(i),s=o===void 0||o==="_"||_.includes(o),C=a===""||a==="_"||N.filter(Boolean).includes(a)||!!Dn[a];if(c&&s&&C)continue;return{ok:!1}}if(![...u].every(eu))return{ok:!1}}}return{ok:!0}}w.length,_.length,N.length;function tu(e,n){const t=n.trim();if(!t||!/[^\s,_]/.test(t))return e;if(yn(t))return e.filter(o=>An(o.word,t));const u=e.filter(o=>we(o.word,t)||we(o.pronunciation??"",t)),r=[...t].length,i=o=>!!o&&we(o.slice(0,r),t);return u.map(o=>({w:o,rank:i(o.word)||i(o.pronunciation??"")?0:1})).sort((o,a)=>o.rank-a.rank).map(o=>o.w)}const Ge="word_pair_index_v2",Fe="word_pair_index_sig_v2";let $=null,oe=null;function Tn(){try{if(typeof localStorage>"u")return null;const e=localStorage.getItem(Ge),n=localStorage.getItem(Fe);return!e||!n?null:{index:JSON.parse(e),sig:n}}catch{return null}}function uu(e,n){try{if(typeof localStorage>"u")return;localStorage.setItem(Ge,JSON.stringify(e)),localStorage.setItem(Fe,n)}catch{}}function ou(e){const n=e.map(u=>`${u.word}|${u.pron??""}`).sort();let t=0;for(const u of n)for(let r=0;r<u.length;r++)t=(t<<5)-t+u.charCodeAt(r)|0;return`${n.length}-${t}`}async function ru(e,n){const t=new Set,u=[];for(const s of e){if(!s.word||t.has(s.word))continue;const C=s.pron||s.word,l=Array.from(C).map(h);l.some(g=>g===null)||l.length===Array.from(s.word).length&&(t.add(s.word),u.push({word:s.word,syls:l}))}const r={},i=u.length,o=new Map;for(const s of u){const C=s.syls.length;o.has(C)||o.set(C,[]),o.get(C).push(s)}let a=0;const c=["cho","jung","jong"];for(const s of o.values()){const C=s[0].syls.length;for(let l=0;l<C;l++)for(const g of c){const m=new Map;for(const S of s){let D="";for(let f=0;f<C;f++){f>0&&(D+="~");const d=S.syls[f];f===l?g==="cho"?D+=`*:${d.jung}:${d.jong}`:g==="jung"?D+=`${d.cho}:*:${d.jong}`:D+=`${d.cho}:${d.jung}:*`:D+=`${d.cho}:${d.jung}:${d.jong}`}let y=m.get(D);y||(y=[],m.set(D,y)),y.push(S)}for(const S of m.values())if(!(S.length<2))for(let D=0;D<S.length;D++){const y=S[D];for(let f=D+1;f<S.length;f++){const d=S[f];y.syls[l][g]!==d.syls[l][g]&&(r[y.word]||(r[y.word]={cho:[],jung:[],jong:[]}),r[d.word]||(r[d.word]={cho:[],jung:[],jong:[]}),r[y.word][g].push(d.word),r[d.word][g].push(y.word))}}}a+=s.length,n?.(a,i),await new Promise(l=>setTimeout(l,0))}return i>0&&n?.(i,i),r}async function iu(e,n={}){const t=ou(e);if(!n.force){if($&&oe===t)return $;const r=Tn();if(r&&r.sig===t)return $=r.index,oe=t,$}const u=await ru(e,n.onProgress);return $=u,oe=t,uu(u,t),u}function wn(){if($)return $;const e=Tn();return e?($=e.index,oe=e.sig,$):null}function au(){$=null,oe=null;try{typeof localStorage<"u"&&(localStorage.removeItem(Ge),localStorage.removeItem(Fe))}catch{}}const xe={cho:w,jung:_,jong:N},k=e=>Array.isArray(e)?e.length>0:!!e;function We(e,n){if(e.length!==n.length)return!1;for(let t=0;t<e.length;t++){const u=e[t],r=n[t];if(!(!u||!r)&&(u.cho!==r.cho&&w[u.cho]==="\u3147"!=(w[r.cho]==="\u3147")||u.jong!==r.jong&&u.jong===0!=(r.jong===0)))return!0}return!1}function pn(e,n,t){const u=t.pronOf(e),r=t.decompOf,i=t.sameStructureOnly&&r?r(u):null,o=[];for(const a of n)a!==e&&(t.okSet&&!t.okSet.has(a)||t.pronOf(a)!==u&&(i&&r&&We(i,r(t.pronOf(a)))||o.push(a)));return o}function su(e,n,t){const u=n?.[e];if(!u)return[];const r=t.kind?u[t.kind]??[]:[...u.cho??[],...u.jung??[],...u.jong??[]];return pn(e,r,t)}function cu(e,n,t,u,r,i,o){const a=["cho","jung","jong"].filter(g=>k(e[g])),c={};for(const g of a){const m=e[g];c[g]=new Set(Array.isArray(m)?m:[m])}const s=r==="pron",C=new Map;for(const g of n){const m=t(i(g));if(m.some(f=>!f))continue;let S=m;if(!s&&(S=t(g),S.length!==m.length||S.some(f=>!f)))continue;const D=m.length,y=C.get(D);y?y.push({w:g,dPron:m,dPos:S}):C.set(D,[{w:g,dPron:m,dPos:S}])}const l=new Map;for(const[g,m]of C){const S=new Map,D=(y,f)=>{const d=y.dPos[f];return d!=null&&a.every(E=>c[E].has(xe[E][d[E]]))};for(const y of m){let f;if(o==="head")f=D(y,0)?0:-1;else if(o==="tail")f=D(y,g-1)?g-1:-1;else if(o==="mid"){f=-1;for(let E=1;E<g-1;E++)if(D(y,E)){f=E;break}}else f=y.dPos.findIndex(E=>E!=null&&a.every(A=>c[A].has(xe[A][E[A]])));if(f<0)continue;const d=S.get(f);d?d.push(y):S.set(f,[y])}for(const[y,f]of S){const d=new Set(a.map(p=>y+":"+p)),E=p=>{let b="";for(let B=0;B<g;B++){const R=p[B];for(const W of["cho","jung","jong"])b+=(d.has(B+":"+W)?"*":R[W])+"."}return b},A=new Map;for(const p of m){const b=E(p.dPron),B=A.get(b);B?B.push(p):A.set(b,[p])}for(const p of f){const b=A.get(E(p.dPron))??[],B=[];for(const R of b){if(R.w===p.w)continue;let W=!0;for(const T of a){const v=p.dPron[y][T],K=R.dPron[y][T];if(K===v){W=!1;break}if(s&&c[T].has(xe[T][K])){W=!1;break}}W&&(u&&We(p.dPron,R.dPron)||B.push(R.w))}l.set(p.w,B)}}}return l}const pe=0,Bn=1,U=2,He=3,lu=4,Be=5,Ye=6,be=7,Cu=8,bn=9,re=10,gu=11,ie=12,du=13,ae=14,_e=15,Le=16,se=17,fu=18,I=0,G=1,hu=3,V=4,Ke=5,Ue=6,P=7,L=8,_n=9,Ln=10,Ne=11,Nn=12,Ve=13,je=15,ke=16,F=17,jn=18,Je=21,kn=27,mu=20,Su={1:pe,2:Bn,4:U,7:He,8:Be,16:Ye,17:be,19:bn,20:re,22:ie,23:ae,24:_e,25:Le,26:se},Du={[hu]:[G,re],[Ke]:[V,ie],[_n]:[L,pe],[Ln]:[L,Ye],[Ne]:[L,be],[Nn]:[L,re],[Ve]:[L,Le],14:[L,se],[jn]:[F,re]},yu={[Ue]:U,[je]:Be},qe={2:G,24:G,3:G,9:G,5:V,6:V,19:P,20:P,22:P,23:P,25:P,27:P,11:L,12:L,13:L,15:L,10:ke,14:F,18:F,26:F},Rn={[pe]:_e,[He]:Le,[be]:se,[ie]:ae},On={[pe]:Bn,[He]:lu,[be]:Cu,[bn]:re,[ie]:du},Eu=new Set([Ke,Ln,Ne,Nn,Ve,je,jn]),Au=new Set(["\uBC1F"]);function Tu(e){const n=(e??"").trim();if(!n)return"";const t=[...n],u=t.map(h);if(u.some(i=>i===null))return n;const r=u;for(let i=0;i<r.length;i++){const o=r[i],a=r[i+1],c=o.jong;if(!a){o.jong=qe[o.jong]??o.jong;break}if(o.jong===I)continue;if(a.cho===gu){if(a.jung===mu){if(o.jong===P){o.jong=I,a.cho=ie;continue}if(o.jong===25){o.jong=I,a.cho=ae;continue}if(o.jong===Ve){o.jong=L,a.cho=ae;continue}}if(o.jong===kn){o.jong=I;continue}const C=yu[o.jong];if(C!==void 0){o.jong=I,a.cho=C;continue}const l=Du[o.jong];if(l){o.jong=l[0],a.cho=l[1];continue}const g=Su[o.jong];g!==void 0&&(o.jong=I,a.cho=g);continue}if((o.jong===kn||o.jong===Ue||o.jong===je)&&Rn[a.cho]!==void 0){a.cho=Rn[a.cho],o.jong=o.jong===Ue?V:o.jong===je?L:I;continue}if(a.cho===fu){if(o.jong===Ke){o.jong=V,a.cho=ae;continue}if(o.jong===_n){o.jong=L,a.cho=_e;continue}if(o.jong===Ne){o.jong=L,a.cho=se;continue}const C=qe[o.jong]??o.jong;if(C===G){o.jong=I,a.cho=_e;continue}if(C===P){o.jong=I,a.cho=Le;continue}if(C===F){o.jong=I,a.cho=se;continue}}let s=qe[o.jong]??o.jong;c===Ne&&Au.has(t[i])&&(s=F),o.jong=s,On[a.cho]!==void 0&&(s===G||s===P||s===F||Eu.has(c))&&(a.cho=On[a.cho]),(a.cho===U||a.cho===Ye)&&(o.jong===G?o.jong=Je:o.jong===P?o.jong=V:o.jong===F&&(o.jong=ke)),a.cho===Be?o.jong===V?o.jong=L:o.jong===ke||o.jong===Je?a.cho=U:o.jong===G?(o.jong=Je,a.cho=U):o.jong===F&&(o.jong=ke,a.cho=U):o.jong===L&&a.cho===U&&(a.cho=Be)}return r.map(i=>H(i.cho,i.jung,i.jong)).join("")}const wu={\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"};function Mn(e){return wu[e]??e}const q=/[ㄱ-ㅎ]/,pu=/[ㅏ-ㅣ]/;function ce(e){for(let n=e.length-1;n>=0;n--){const t=e[n],u=t.charCodeAt(0);if(u>=44032&&u<=55203||q.test(t)||pu.test(t))return t}return null}function $n(e){const n=ce(e);if(!n)return"\uAC00";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uC774":"\uAC00":q.test(n)?"\uC774":"\uAC00"}function Bu(e){return`${e}${$n(e)}`}function In(e){const n=ce(e);if(!n)return"\uB97C";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uC744":"\uB97C":q.test(n)?"\uC744":"\uB97C"}function bu(e){return`${e}${In(e)}`}function Pn(e){const n=ce(e);if(!n)return"\uB294";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uC740":"\uB294":q.test(n)?"\uC740":"\uB294"}function _u(e){return`${e}${Pn(e)}`}function vn(e){const n=ce(e);if(!n)return"\uC640";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uACFC":"\uC640":q.test(n)?"\uACFC":"\uC640"}function Lu(e){return`${e}${vn(e)}`}function Gn(e){const n=ce(e);if(!n)return"\uB85C";const t=n.charCodeAt(0);if(t>=44032&&t<=55203){const u=(t-44032)%28;return u===0||u===8?"\uB85C":"\uC73C\uB85C"}return n==="\u3139"?"\uB85C":q.test(n)?"\uC73C\uB85C":"\uB85C"}function Nu(e){return`${e}${Gn(e)}`}function ju(e,n,t){const u=e.slice(),[r]=u.splice(n,1);return u.splice(t,0,r),u}function j(e,n=Math.random){const t=e.slice();for(let u=t.length-1;u>0;u--){const r=Math.floor(n()*(u+1));[t[u],t[r]]=[t[r],t[u]]}return t}function x(e,n,t=Math.random){return!Array.isArray(e)||e.length===0||n<=0?[]:n>=e.length?j(e,t):j(e,t).slice(0,n)}const Fn={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"}};function ku(e){const n=e?Fn[e]?.group:void 0;return n==="synthesis"||n==="deletion"||n==="substitution"?n:null}const Ru=w.indexOf("\u3147"),xn={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!==Ru},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}},Ou=new Set([]);function Mu(e){return e in xn}function $u(e,n){const t=xn[e];if(!t)return!0;const u=[...n];if(u.length!==t.syllables)return!1;const r=h(u[0]);return!!r&&t.syllable(r)}function Iu(e){return Ou.has(e)}function Pu(e){const n=e.charCodeAt((e.length||1)-1)||0;return n<44032||n>55203||(n-44032)%28===0?"\uC640":"\uACFC"}function ze(e){const n=e.charCodeAt((e.length||1)-1)||0;return n<44032||n>55203||(n-44032)%28===0?"\uB97C":"\uC744"}function Wn(e){const n=e.charCodeAt((e.length||1)-1)||0;if(n<44032||n>55203)return"\uB85C";const t=(n-44032)%28;return t===0||t===8?"\uB85C":"\uC73C\uB85C"}function Hn(e){const n=e.charAt((e.length||1)-1),t=n.charCodeAt(0)||0;return t>=44032&&t<=55203?(t-44032)%28===0?"\uAC00":"\uC774":/[ㄱ-ㅎ]/.test(n)?"\uC774":"\uAC00"}const Yn={\u3131:"\uAE30\uC5ED",\u3132:"\uC30D\uAE30\uC5ED",\u3134:"\uB2C8\uC740",\u3137:"\uB514\uADFF",\u3138:"\uC30D\uB514\uADFF",\u3139:"\uB9AC\uC744",\u3141:"\uBBF8\uC74C",\u3142:"\uBE44\uC74D",\u3143:"\uC30D\uBE44\uC74D",\u3145:"\uC2DC\uC637",\u3146:"\uC30D\uC2DC\uC637",\u3147:"\uC774\uC751",\u3148:"\uC9C0\uC752",\u3149:"\uC30D\uC9C0\uC752",\u314A:"\uCE58\uC753",\u314B:"\uD0A4\uC754",\u314C:"\uD2F0\uC755",\u314D:"\uD53C\uC756",\u314E:"\uD788\uC757",\u3133:"\uAE30\uC5ED\uC2DC\uC637",\u3135:"\uB2C8\uC740\uC9C0\uC752",\u3136:"\uB2C8\uC740\uD788\uC757",\u313A:"\uB9AC\uC744\uAE30\uC5ED",\u313B:"\uB9AC\uC744\uBBF8\uC74C",\u313C:"\uB9AC\uC744\uBE44\uC74D",\u313D:"\uB9AC\uC744\uC2DC\uC637",\u313E:"\uB9AC\uC744\uD2F0\uC755",\u313F:"\uB9AC\uC744\uD53C\uC756",\u3140:"\uB9AC\uC744\uD788\uC757",\u3144:"\uBE44\uC74D\uC2DC\uC637",\u314F:"\uC544",\u3150:"\uC560",\u3151:"\uC57C",\u3152:"\uC598",\u3153:"\uC5B4",\u3154:"\uC5D0",\u3155:"\uC5EC",\u3156:"\uC608",\u3157:"\uC624",\u3158:"\uC640",\u3159:"\uC65C",\u315A:"\uC678",\u315B:"\uC694",\u315C:"\uC6B0",\u315D:"\uC6CC",\u315E:"\uC6E8",\u315F:"\uC704",\u3160:"\uC720",\u3161:"\uC73C",\u3162:"\uC758",\u3163:"\uC774"};function vu(e){if([...e].length!==1)return[e];const n=h(e);if(!n)return[e];const t=[w[n.cho],_[n.jung]];return n.jong!==0&&t.push(N[n.jong]),t}function Kn(e,n=!1){const t=e.filter(Boolean);if(t.length<2)return"";const u=a=>Yn[a]??a,r=t.slice(0,-1).map(a=>`"${a}"${Pu(u(a))}`).join(" "),i=t[t.length-1],o=`"${i}"${ze(u(i))}`;return`${r} ${o} \uD569\uCE58\uBA74 \uC5B4\uB5A4 ${n?"\uC18C\uB9AC":"\uB2E8\uC5B4"}\uAC00 \uB418\uB098\uC694?`}function Gu(e,n){return Kn(n,e==="MERGE_2_PHONEMES"||e==="MERGE_3_PHONEMES")}function Fu(e,n){const t=String(n?.word??n?.original??""),u=String(n?.changedFrom??""),r=String(n?.changedTo??"");return e==="CHANGE_1_PHONEME_IN_1SYLL"?`"${t}"${ze(t)} "${r}"${Wn(r)} \uBC14\uAFB8\uBA74 \uBB34\uC5C7\uC774 \uB418\uB098\uC694?`:`"${t}"\uC5D0\uC11C "${u}"${ze(u)} "${r}"${Wn(r)} \uBC14\uAFB8\uBA74 \uBB34\uC5C7\uC774 \uB418\uB098\uC694?`}function xu(e,n){const t=String(n?.word??n?.original??n?.base??""),u=String(n?.dropped??"");if(e==="DROP_FINAL_CONSONANT_FROM_1SYLL")return`"${t}"\uC5D0\uC11C \uBC1B\uCE68\uC774 \uC5C6\uC5B4\uC9C0\uBA74 \uC5B4\uB5A4 \uB9D0\uC774 \uB418\uB098\uC694?`;if(e==="REMOVE_CONSONANT_AND_IDENTIFY_PHONEME"){const r=String(n?.missingConsonant??"");return`"${t}"\uC5D0\uC11C "${r}"${Hn(r)} \uC5C6\uC5B4\uC9C0\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB418\uB098\uC694?`}return`"${t}"\uC5D0\uC11C "${u}"${Hn(u)} \uC5C6\uC5B4\uC9C0\uBA74 \uC5B4\uB5A4 \uB9D0\uC774 \uB418\uB098\uC694?`}function Wu(e,n,t){switch(ku(e)){case"synthesis":return Gu(e,t);case"substitution":return Fu(e,n);case"deletion":return xu(e,n);default:return""}}function Hu(e){return e.replace(/"([ㄱ-ㅣ])"(으로|와|과|을|를|이|가|은|는|로)?/g,(n,t,u)=>{const r=Yn[t];if(!r)return n;if(!u)return`"${r}"`;const i=(r.charCodeAt(r.length-1)-44032)%28,o=i!==0;let a=u;return u==="\uC640"||u==="\uACFC"?a=o?"\uACFC":"\uC640":u==="\uC744"||u==="\uB97C"?a=o?"\uC744":"\uB97C":u==="\uC774"||u==="\uAC00"?a=o?"\uC774":"\uAC00":u==="\uC740"||u==="\uB294"?a=o?"\uC740":"\uB294":(u==="\uC73C\uB85C"||u==="\uB85C")&&(a=i===0||i===8?"\uB85C":"\uC73C\uB85C"),`"${r}"${a}`})}const Yu=e=>e==null?[]:Array.isArray(e)?e:[e];function Un(e){if([...e].length!==1)return"";const n=h(e);if(!n)return"";const t=Mn(N[n.jong]),u=t===""?0:N.indexOf(t);return H(n.cho,n.jung,u<0?0:u)}function Ze(e,n){return n.get(e)||Un(e)||e}function Re(e){return e?k(e.cho)?"cho":k(e.jung)?"jung":k(e.jong)?"jong":null:null}function J(e,n){const t=(u,r)=>!k(u)||Yu(u).includes(r);return t(n.cho,w[e.cho])&&t(n.jung,_[e.jung])&&t(n.jong,N[e.jong])}function z(e,n,t){const u=[...e];if(t!=="pron")return u.map(i=>h(i));const r=[...n.get(e)||e];return r.length!==u.length?u.map(i=>h(i)):r.map(i=>h(i))}function Z(e,n,t,u,r){const i=n==="cho"?w:n==="jung"?_:N,o=e[n],a=[],c=new Set([Ze(t,r)]),s=j(i.map((C,l)=>l).filter(C=>C!==o&&(n!=="cho"||i[C]!=="\u3147")&&(n!=="jong"||C!==0)));for(const C of s){if(a.length>=u)break;const l=n==="cho"?H(C,e.jung,e.jong):n==="jung"?H(e.cho,C,e.jong):H(e.cho,e.jung,C),g=Ze(l,r);c.has(g)||(c.add(g),a.push(l))}return a}function Ku(e,n,t,u,r,i=null){const o=[...e];if(o.length!==2)return null;const a=o.map(l=>h(l));if(a.some(l=>!l))return null;const c=z(e,t,u);if(c.some(l=>!l))return null;const s=Re(n);let C=s&&n?c.map((l,g)=>J(l,n)?g:-1).filter(l=>l>=0):[0,1];if(i!=null&&(C=C.filter(l=>l!==i)),!C.length)return null;for(const l of j(C)){const g=o[l];if(!r.has(g))continue;const m=Z(a[l],s??"cho",g,40,t),S=[];for(const D of m)if(D!==g&&r.has(D)&&!S.includes(D)&&S.push(D),S.length>=2)break;if(!(S.length<2))return{question:e,distractors:[g,...S]}}return null}function Uu(e,n,t,u,r,i=null){const o=[...e];if(o.length!==3)return null;const a=o.map(l=>h(l));if(a.some(l=>!l))return null;const c=z(e,t,u);if(c.some(l=>!l))return null;const s=Re(n),C=s&&n?c.map((l,g)=>J(l,n)?g:-1).filter(l=>l>=0):[0,1,2];if(!C.length)return null;for(const l of j(C))for(const g of j([0,1,2].filter(m=>m!==l&&(i==null||m===i)))){const m=[0,1,2].filter(d=>d!==g),S=m.map(d=>o[d]).join("");if(!r.has(S))continue;const D=m.indexOf(l),y=Z(a[l],s??"cho",o[l],40,t),f=[];for(const d of y){const E=m.map(p=>o[p]);E[D]=d;const A=E.join("");if(A!==S&&r.has(A)&&!f.includes(A)&&f.push(A),f.length>=2)break}if(!(f.length<2))return{question:e,distractors:[S,...f]}}return null}function Vu(e,n,t,u,r,i=null){const o=[...e],a=o.length;if(a<2)return null;const c=[];for(let C=1;C<=a-1;C++)c.push({remain:o.slice(0,C).join(""),dropped:o.slice(C).join(""),droppedEnd:1}),c.push({remain:o.slice(a-C).join(""),dropped:o.slice(0,a-C).join(""),droppedEnd:0});const s=Re(n);for(const{remain:C,dropped:l,droppedEnd:g}of j(c)){if(i!=null&&g!==i||C===e||!r.has(C)||!r.has(l))continue;const m=[...C],S=m.map(f=>h(f));if(S.some(f=>!f))continue;const D=z(C,t,u);if(D.some(f=>!f))continue;const y=s&&n?D.map((f,d)=>J(f,n)?d:-1).filter(f=>f>=0):m.map((f,d)=>d);if(y.length)for(const f of j(y)){const d=Z(S[f],s??"cho",m[f],40,t),E=[];for(const A of d){const p=[...m];p[f]=A;const b=p.join("");if(b!==C&&r.has(b)&&!E.includes(b)&&E.push(b),E.length>=2)break}if(E.length>=2)return{question:e,distractors:[C,...E]}}}return null}function Ju(e,n,t,u,r,i=null){if([...e].length!==1)return null;const o=h(t.get(e)||e);if(!o||o.jong===0)return null;const a=H(o.cho,o.jung,0),c=Z({cho:o.cho,jung:o.jung,jong:0},"cho",a,2,t);return c.length<2?null:{question:e,distractors:[a,...c]}}const Qe=w.indexOf("\u3147");function qu(e,n,t,u,r,i=null){if([...e].length!==1)return null;const o=h(t.get(e)||e);if(!o||o.jong!==0||o.cho===Qe)return null;const a=H(Qe,o.jung,0),c=Z({cho:Qe,jung:o.jung,jong:0},"jung",a,2,t);return c.length<2?null:{question:e,distractors:[a,...c]}}function zu(e){const n=new Map;for(const t of e){const u=[...t],r=u.length;if(!(r<2||r>3))for(let i=0;i<r;i++){let o=r+"|"+i+"|";for(let c=0;c<r;c++)o+=c===i?"*":u[c];const a=n.get(o);a?a.push(t):n.set(o,[t])}}return n}function Zu(e,n,t,u,r,i=null,o=null,a=2){const c=[...e],s=c.length;if(s<2||s>3)return null;const C=c.map(d=>h(d));if(C.some(d=>!d))return null;const l=z(e,t,u);if(l.some(d=>!d))return null;const g=d=>t.get(d)??d,m=g(e),S=!!n&&(k(n.cho)||k(n.jung)||k(n.jong)),D=!!o&&(k(o.cho)||k(o.jung)||k(o.jong)),y=d=>{let E=s+"|"+d+"|";for(let A=0;A<s;A++)E+=A===d?"*":c[A];return E};let f;if(i!=null){if(i>=s||S&&!J(l[i],n))return null;f=[i]}else S?f=l.map((d,E)=>J(d,n)?E:-1).filter(d=>d>=0):f=Array.from({length:s},(d,E)=>E);for(const d of j(f)){const E=r.get(y(d))??[],A=[],p=[];for(const T of E){if(T===e)continue;const v=[...T].map(Ee=>h(Ee)),K=C[d],De=v[d];if(!K||!De)continue;let ye=0;if(K.cho!==De.cho&&ye++,K.jung!==De.jung&&ye++,K.jong!==De.jong&&ye++,!(ye<a||g(T)===m))if(D){const Ee=z(T,t,u)[d];Ee&&J(Ee,o)?A.push(T):p.push(T)}else A.push(T)}if(!A.length)continue;const b=j(A)[0],B=[],R=new Set([m,g(b)]),W=D?p:A.filter(T=>T!==b);for(const T of j(W)){const v=g(T);if(!R.has(v)&&(R.add(v),B.push(T),B.length>=2))break}if(!D&&B.length<2)for(const T of j(E)){if(T===e||T===b)continue;const v=g(T);if(!R.has(v)&&(R.add(v),B.push(T),B.length>=2))break}if(!(B.length<2))return{question:e,distractors:[b,...B]}}return null}function Qu(e,n="\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"){if(e instanceof Error)return e.message||n;if(typeof e=="string")return e||n;if(e&&typeof e=="object"){const t=e;for(const u of[t.message,t.error_description,t.error])if(typeof u=="string"&&u)return u}return n}const Vn="\uB124\uD2B8\uC6CC\uD06C \uC5F0\uACB0\uC774 \uBD88\uC548\uC815\uD569\uB2C8\uB2E4. \uC5F0\uACB0 \uC0C1\uD0DC\uB97C \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.";function Jn(e){return e?/failed to fetch|load failed|networkerror|network request failed|fetcherror/i.test(e):!1}function Xu(e){return Jn(e)?Vn:e}function eo(e,n){return e==="id"?void 0:`${e}|${n?"asc":"desc"}`}function no(e){const[n,t]=e.split("|");return{key:n,asc:t==="asc"}}function to(e){let n=e==null?"":String(e);return/^[=+\-@\t\r]/.test(n)&&(n=" "+n),/[",\n\r]/.test(n)?`"${n.replaceAll('"','""')}"`:n}function uo(e,n){const t=new Blob(["\uFEFF"+n],{type:"text/csv;charset=utf-8"}),u=URL.createObjectURL(t),r=document.createElement("a");r.href=u,r.download=e,r.click(),URL.revokeObjectURL(u)}const qn="__ihab_core_word_pool__";function oo(){typeof window<"u"&&window.dispatchEvent(new CustomEvent("wordpool:update"))}function ro(e,n){const t=new Map;for(const r of e)t.set(r.word,r);const u={entries:e,pairIndex:n??null,byWord:t};globalThis[qn]=u,oo()}function zn(){return globalThis[qn]??null}const Q=globalThis;function Xe(e,n){const t=u=>{import.meta.env?.DEV&&console.warn(`[trainingLogger:${e}]`,u)};try{const u=n();u&&typeof u.catch=="function"&&u.catch(t)}catch(u){t(u)}}function io(e){Q.__ihabTrainingTimeLogger=e}function ao(e){Xe("time",()=>Q.__ihabTrainingTimeLogger?.(e))}function so(e){Q.__ihabTrainingCompletionLogger=e}function co(e){Xe("completion",()=>Q.__ihabTrainingCompletionLogger?.(e))}function lo(e){Q.__ihabCrosswordLogger=e}function Co(e){Xe("crossword",()=>Q.__ihabCrosswordLogger?.(e))}function O(e){return typeof e=="string"?e.trim()||null:typeof e=="number"?String(e):null}function Zn(e){for(const n of["correct","isCorrect","heard","judgement"])if(typeof e[n]=="boolean")return e[n];return e.score===1?!0:e.score===0?!1:null}function go(e){return Array.isArray(e)?e.map((n,t)=>{const u=n??{};return{index:t,itemId:O(u.contextCode)??O(u.itemId)??O(u.itemCode)??O(u.id),question:O(u.question)??O(u.sentence)??O(u.word)??O(u.targetSyllable),answer:O(u.answer),selected:O(u.selectedText)??O(u.selected),correct:Zn(u)}}):[]}function fo(e){return e.filter(n=>n.correct===!1)}let Qn=null,Xn=null,et=null;function ho(e){Qn=e}function mo(e){Xn=e}function So(e){et=e}async function Do(e,n){try{return await Qn?.(e,n)??null}catch{return null}}async function yo(){try{return await Xn?.()??null}catch{return null}}async function Eo(e,n){try{return await et?.(e,n)??null}catch{return null}}const en=globalThis;function Ao(e){en.__ihabNoiseSettingsStore=e}async function To(){try{return await en.__ihabNoiseSettingsStore?.load()??null}catch(e){return import.meta.env?.DEV&&console.warn("[noiseSettingsStore] load",e),null}}function wo(e){const n=t=>{import.meta.env?.DEV&&console.warn("[noiseSettingsStore] save",t)};try{const t=en.__ihabNoiseSettingsStore?.save(e);t&&typeof t.catch=="function"&&t.catch(n)}catch(t){n(t)}}function Oe(e){const n=new TextEncoder().encode(String(e));let t="";return n.forEach(u=>{t+=u.toString(16).padStart(2,"0")}),t}const po=Oe;function Bo(e,n){return`${e}/${Oe(n)}.mp3`}function bo(e={}){const n=e.storagePrefix??"audio-cache",t=e.voice??"ko-f",u=typeof e.speed=="number"?e.speed:1,r=e.filenameSanitizer??Oe;return async function(i){const o=String(i||"").trim();if(!o)return"";const a=`${r(o)}_${t}.mp3`,c=`${n}/${a}`;try{if(await sn(c)){const s=await cn(c);if(s)return s}}catch{}if(e.generator)try{const s=await e.generator(o,c,e);if(s)return s}catch{}try{const s=`/api/tts?word=${encodeURIComponent(o)}&voice=${encodeURIComponent(t)}&speed=${encodeURIComponent(String(u))}`;return await fetch(s,{method:"GET"}),`/audio-cache/${a}`}catch{return`/audio-cache/${a}`}}}async function _o(e){if(typeof document<"u")try{const n=document.createElement("textarea");n.value=e,n.setAttribute("readonly",""),n.style.position="fixed",n.style.top="0",n.style.left="0",n.style.opacity="0",n.style.pointerEvents="none",document.body.appendChild(n),n.focus(),n.select(),n.setSelectionRange(0,e.length);const t=document.execCommand("copy");if(document.body.removeChild(n),t)return!0}catch{}try{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function")return await navigator.clipboard.writeText(e),!0}catch{}return!1}const X="Asia/Seoul";function Lo(e){return new Date(e).toLocaleDateString("ko-KR",{timeZone:X,year:"numeric",month:"short",day:"numeric"})}function No(e){return new Date(e).toLocaleString("ko-KR",{timeZone:X,year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"})}function jo(e,n){const t=n.startsWith("ko")?"ko-KR":"en-US";return new Date(e).toLocaleDateString(t,{timeZone:X,year:"numeric",month:"short",day:"numeric"})}function ko(e,n){const t=n.startsWith("ko")?"ko-KR":"en-US";return new Date(e).toLocaleString(t,{timeZone:X,year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"})}function Ro(e){return new Date(e).toLocaleString("ko-KR",{timeZone:X,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function Oo(e){if(e==null||e==="")return"";const n=e instanceof Date?e:new Date(e);return isNaN(n.getTime())?"":new Intl.DateTimeFormat("en-GB",{timeZone:X,hour:"2-digit",minute:"2-digit",hour12:!1}).format(n)}function nt(){return le(new Date)}function le(e){if(e==null||e==="")return"";const n=e instanceof Date?e:new Date(e);return isNaN(n.getTime())?"":new Intl.DateTimeFormat("fr-CA",{timeZone:"Asia/Seoul"}).format(n)}function Mo(e,n){if(!e)return"";const t=new Date(e).getTime();if(Number.isNaN(t))return"";const u=Math.max(0,Math.floor((Date.now()-t)/1e3)),r=Math.floor(u/60),i=Math.floor(r/60),o=Math.floor(i/24),a=Math.floor(o/7),c=Math.floor(o/30),s=Math.floor(o/365);return r<1?n("store.time.justNow","\uBC29\uAE08 \uC804"):r<60?n("store.time.minutesAgo",{n:r}):i<24?n("store.time.hoursAgo",{n:i}):o<7?n("store.time.daysAgo",{n:o}):a<5?n("store.time.weeksAgo",{n:a}):o<365?n("store.time.monthsAgo",{n:Math.min(c,11)}):n("store.time.yearsAgo",{n:s})}function $o(e,n={}){const{sep:t=".",pad:u=!0,trailingDot:r=!1,fallback:i="\u2014"}=n;if(!e)return i;const o=le(e instanceof Date?e:String(e));if(!o)return i;const[a,c,s]=o.split("-"),C=u?c:String(Number(c)),l=u?s:String(Number(s));return`${a}${t}${C}${t}${l}${r?".":""}`}function Io(e){const n=e.replace(/\D/g,"").slice(0,11);return n.startsWith("02")?n.length<=2?n:n.length<=6?`${n.slice(0,2)}-${n.slice(2)}`:`${n.slice(0,2)}-${n.slice(2,n.length-4)}-${n.slice(n.length-4)}`:n.length<=3?n:n.length<=7?`${n.slice(0,3)}-${n.slice(3)}`:`${n.slice(0,3)}-${n.slice(3,n.length-4)}-${n.slice(n.length-4)}`}function Po(e){if(e){if(/^\d{4}\.\d{2}\.\d{2}$/.test(e))return e;if(/^\d{8}$/.test(e))return`${e.slice(0,4)}.${e.slice(4,6)}.${e.slice(6,8)}`;if(/^\d{4}-\d{2}-\d{2}$/.test(e))return e.replace(/-/g,".");if(/^\d{4}-\d{2}-\d{2}T/.test(e)){const n=new Date(e);return isNaN(n.getTime())?void 0:le(n).replace(/-/g,".")}}}function vo(e){if(e)return/^\d{4}\.\d{2}\.\d{2}$/.test(e)?e.replace(/\./g,"-"):e}function Go(e,n){if(!e)return"-";const t=/^(\d{1,2}):(\d{2})$/.exec(e.trim());if(!t)return e;const u=Number(t[1]),r=Number(t[2]),i=t[1].padStart(2,"0");return r===0?n("date.timeH",{h:u,hh:i,mm:t[2]}):n("date.timeHM",{h:u,hh:i,m:r,mm:t[2]})}function Fo(e){return(e??0).toLocaleString("ko-KR")}const xo=[{key:"FOOD",label:"\uC74C\uC2DD",icon:"salad",color:"#FF8A65",subs:[{key:"TRKRFD",label:"\uD55C\uAD6D \uC804\uD1B5\uC74C\uC2DD"},{key:"MDKRFD",label:"\uD55C\uAD6D \uD604\uB300\uC74C\uC2DD"},{key:"WRLDFD",label:"\uC138\uACC4\uC758 \uC74C\uC2DD"},{key:"MTRFRT",label:"\uC2DD\uC7AC\uB8CC\uC640 \uACFC\uC77C"},{key:"GEFDKL",label:"\uC74C\uC2DD \uC0C1\uC2DD"}]},{key:"HLTH",label:"\uAC74\uAC15",icon:"heart",color:"#66BB6A",subs:[{key:"HTETHB",label:"\uAC74\uAC15\uD55C \uC2DD\uC2B5\uAD00"},{key:"DISILL",label:"\uBCD1\uACFC \uC9C8\uD658"},{key:"EXCISE",label:"\uC6B4\uB3D9"},{key:"GEHTKL",label:"\uAC74\uAC15\uC0C1\uC2DD"}]},{key:"WETH",label:"\uB0A0\uC528",icon:"sun-medium",color:"#42A5F5",subs:[{key:"GESSKL",label:"\uACC4\uC808\uC0C1\uC2DD"},{key:"SNWRAN",label:"\uB208\uACFC \uBE44"},{key:"WTHFCT",label:"\uC77C\uAE30\uC608\uBCF4"},{key:"GEWTKL",label:"\uB0A0\uC528\uC0C1\uC2DD"}]},{key:"PRSN",label:"\uC778\uBB3C",icon:"user-round",color:"#AB47BC",subs:[{key:"JODYPS",label:"\uC870\uC120\uC2DC\uB300"},{key:"MDKRPS",label:"\uD55C\uAD6D \uADFC\uD604\uB300"},{key:"THKDPS",label:"\uC0BC\uAD6D\uC2DC\uB300"},{key:"WRLART",label:"\uC138\uACC4\uC758 \uC608\uC220\uAC00"},{key:"WRLPSN",label:"\uC138\uACC4\uC758 \uC778\uBB3C"}]},{key:"KRCT",label:"\uD55C\uAD6D\uBB38\uD654",icon:"bow-arrow",color:"#EC407A",subs:[{key:"KRLANG",label:"\uC6B0\uB9AC\uB9D0"},{key:"TRPLCT",label:"\uC804\uD1B5\uB180\uC774"},{key:"HERITG",label:"\uBB38\uD654\uC7AC"},{key:"EVTFES",label:"\uD589\uC0AC\uC640 \uCD95\uC81C"},{key:"GECTKL",label:"\uC0C1\uC2DD"}]},{key:"STRY",label:"\uC774\uC57C\uAE30",icon:"message-circle",color:"#8D6E63",subs:[{key:"FRYTAL",label:"\uB3D9\uD654"},{key:"AMZING",label:"\uC2E0\uAE30\uD55C \uC774\uC57C\uAE30"},{key:"DAYSTR",label:"\uC77C\uC0C1 \uC18D \uC774\uC57C\uAE30"}]},{key:"LOCA",label:"\uC9C0\uC5ED",icon:"map-pin",color:"#26A69A",subs:[{key:"KRLDMK",label:"\uD55C\uAD6D\uC758 \uBA85\uC18C"},{key:"SELNMK",label:"\uC11C\uC6B8\uC758 \uBA85\uC18C"},{key:"WRDTRB",label:"\uC138\uACC4\uC5EC\uD589"},{key:"NAVIGT",label:"\uAE38 \uCC3E\uAE30"}]},{key:"SOAR",label:"\uC0AC\uD68C\uC640 \uC608\uC220",icon:"landmark",color:"#5C6BC0",subs:[{key:"KRSOCI",label:"\uD55C\uAD6D"},{key:"ECONEW",label:"\uACBD\uC81C\uC640 \uB274\uC2A4"},{key:"GENART",label:"\uC608\uC220"},{key:"GELFKL",label:"\uC0DD\uD65C \uC0C1\uC2DD"}]},{key:"NTSC",label:"\uC790\uC5F0\uACFC \uACFC\uD559",icon:"leaf",color:"#9CCC65",subs:[{key:"ANIMAL",label:"\uB3D9\uBB3C"},{key:"PLANTS",label:"\uC2DD\uBB3C"},{key:"ETHPLT",label:"\uC9C0\uAD6C"},{key:"TOLELC",label:"\uB3C4\uAD6C\uC640 \uC804\uC790\uC81C\uD488"},{key:"GESCKL",label:"\uACFC\uD559\uC0C1\uC2DD"}]},{key:"SPRT",label:"\uC2A4\uD3EC\uCE20",icon:"trophy",color:"#FFCA28",subs:[{key:"INVDSP",label:"\uAC1C\uC778\uACBD\uAE30"},{key:"MARART",label:"\uACA9\uD22C\uAE30"},{key:"TEAMSP",label:"\uB2E8\uCCB4\uACBD\uAE30"},{key:"FOOTBL",label:"\uCD95\uAD6C"},{key:"GESPKL",label:"\uC2A4\uD3EC\uCE20 \uC0C1\uC2DD"}]}],Wo=[{key:"LISTEN_IN_NOISE",label:"\uC18C\uC74C \uD558 \uBB38\uC7A5 \uB4E3\uAE30",icon:"party-popper",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828"},{key:"SHORT_STORY",label:"\uC9E7\uC740 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square",desc:"\uC9E7\uC740 \uC774\uC57C\uAE30 + 4\uBB38\uC81C"},{key:"LONG_STORY",label:"\uAE34 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square-text",desc:"\uAE34 \uC774\uC57C\uAE30 \uC2EC\uD654 \uD6C8\uB828"},{key:"ORDERING_SENTENCE",label:"\uBB38\uC7A5 \uC21C\uC11C\uD654 \uD558\uAE30",icon:"align-start-vertical",desc:"\uC21C\uC11C \uBC30\uC5F4 \uD6C8\uB828"}];let nn=null;function Ho(e){nn=e}function Yo(){return nn?.topicTypes??xo}function Ko(){return nn?.trainingTypes??Wo}const tt="ihab_theme",Uo="light";function ut(){try{const e=localStorage.getItem(tt);if(e==="light"||e==="dark"||e==="auto")return e}catch{}return Uo}function ot(e){try{document.documentElement.setAttribute("data-theme",e),localStorage.setItem(tt,e)}catch{}}function Vo(){ot(ut())}const rt="ihab_font_scale",Jo="medium",qo=["medium","large1","large2","large3"];function it(){try{const e=localStorage.getItem(rt);if(qo.includes(e))return e}catch{}return Jo}function at(e){try{document.documentElement.setAttribute("data-font-scale",e),localStorage.setItem(rt,e)}catch{}}function zo(){at(it())}const Ce=[],ge=[],de=[],fe=[],he={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},me={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},Zo={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let tn=null,st=null,Y=null;function ct({counts:e,forceRefresh:n}={}){const t=Object.assign({},Zo,e||{}),u=nt(),r=le(new Date(`${u}T00:00:00+09:00`).getTime()-864e5),i=JSON.stringify(t);if(!n&&st===u&&tn===i&&Y)return Object.assign(he,Y.today),Object.assign(me,Y.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:he,yesterday:me};const o={LISTEN_IN_NOISE:x(Ce,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:x(ge,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:x(de,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:x(fe,Math.max(0,Number(t.ORDERING_SENTENCE)||0))};let a=null;return Y&&tn===i&&Y.yesterday&&Y.yesterday.date===r&&(a=Y.yesterday.selection),a||(a={LISTEN_IN_NOISE:x(Ce,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:x(ge,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:x(de,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:x(fe,Math.max(0,Number(t.ORDERING_SENTENCE)||0))}),Object.assign(he,o),Object.assign(me,a),st=u,tn=i,Y={today:o,yesterday:{date:r,countsKey:i,selection:a}},{today:he,yesterday:me}}function Qo(){return{today:he,yesterday:me}}function Xo(){return{LISTEN_IN_NOISE:Ce,SHORT_STORY:ge,LONG_STORY:de,ORDERING_SENTENCE:fe}}let un=!1,Se=null;async function er(){try{const e=import.meta&&import.meta.env&&import.meta.env.BASE_URL||"/",n=await fetch(`${e}data/allTrainingData.json`);return n.ok?await n.json():null}catch{return null}}async function lt(){if(!un)return Se||(Se=(async()=>{const e=await er();if(!e){Se=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{for(const n of Object.keys(e||{})){const t=e[n]||[];for(const u of t){const r=u,i=String(r.training_type||n),o=String(r.category_main_code||r.category_main||r.category_0||""),a=String(r.category_sub_code||r.category_sub||r.category_1||""),c=Object.assign({},r,{training_type:i,category_0:o,category_1:a});i==="LISTEN_IN_NOISE"?Ce.push(c):i==="SHORT_STORY"?ge.push(c):i==="LONG_STORY"?de.push(c):i==="ORDERING_SENTENCE"&&fe.push(c)}}}catch{Se=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}try{ct()}catch{}un=!0})(),Se)}function nr(){return un}async function tr(e=3e3){const n=lt();return Promise.race([n,new Promise(t=>setTimeout(t,e))])}const ur=[{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."}],or=[{key:"FOOD",label:"\uC74C\uC2DD",icon:"salad",color:"#FF8A65",subs:[{key:"TRKRFD",label:" \uD55C\uAD6D \uC804\uD1B5\uC74C\uC2DD"},{key:"MDKRFD",label:"\uD55C\uAD6D \uD604\uB300\uC74C\uC2DD"},{key:"WRLDFD",label:"\uC138\uACC4\uC758 \uC74C\uC2DD"},{key:"MTRFRT",label:"\uC2DD\uC7AC\uB8CC\uC640 \uACFC\uC77C"},{key:"GEFDKL",label:"\uC74C\uC2DD \uC0C1\uC2DD"}]},{key:"HLTH",label:"\uAC74\uAC15",icon:"heart",color:"#66BB6A",subs:[{key:"HTETHB",label:"\uAC74\uAC15\uD55C \uC2DD\uC2B5\uAD00"},{key:"DISILL",label:"\uBCD1\uACFC \uC9C8\uD658"},{key:"EXCISE",label:"\uC6B4\uB3D9"},{key:"GEHTKL",label:"\uAC74\uC0C1\uC0C1\uC2DD"}]},{key:"WETH",label:"\uB0A0\uC528",icon:"sun-medium",color:"#42A5F5",subs:[{key:"GESSKL",label:"\uACC4\uC808\uC0C1\uC2DD"},{key:"SNWRAN",label:"\uB208\uACFC \uBE44"},{key:"WTHFCT",label:"\uC77C\uAE30\uC608\uBCF4"},{key:"GEWTKL",label:"\uB0A0\uC528\uC0C1\uC2DD"}]},{key:"PRSN",label:"\uC778\uBB3C",icon:"user-round",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#AB47BC",subs:[{key:"JODYPS",label:"\uC870\uC120\uC2DC\uB300"},{key:"MDKRPS",label:"\uD55C\uAD6D \uADFC\uD604\uB300"},{key:"THKDPS",label:"\uC0BC\uAD6D\uC2DC\uB300"},{key:"WRLART",label:"\uC138\uACC4\uC758 \uC608\uC220\uAC00"},{key:"WRLPSN",label:"\uC138\uACC4\uC758 \uC778\uBB3C"}]},{key:"KRCT",label:"\uD55C\uAD6D\uBB38\uD654",icon:"bow-arrow",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#EC407A",subs:[{key:"KRLANG",label:"\uC6B0\uB9AC\uB9D0"},{key:"TRPLCT",label:"\uC804\uD1B5\uB180\uC774"},{key:"HERITG",label:"\uBB38\uD654\uC7AC"},{key:"EVTFES",label:"\uD589\uC0AC\uC640 \uCD95\uC81C"},{key:"GECTKL",label:"\uC0C1\uC2DD"}]},{key:"STRY",label:"\uC774\uC57C\uAE30",icon:"message-circle",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#8D6E63",subs:[{key:"FRYTAL",label:"\uB3D9\uD654"},{key:"AMZING",label:"\uC2E0\uAE30\uD55C \uC774\uC57C\uAE30"},{key:"DAYSTR",label:"\uC77C\uC0C1 \uC18D \uC774\uC57C\uAE30"}]},{key:"LOCA",label:"\uC9C0\uC5ED",icon:"map-pin",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#26A69A",subs:[{key:"KRLDMK",label:"\uD55C\uAD6D\uC758 \uBA85\uC18C"},{key:"SELNMK",label:"\uC11C\uC6B8\uC758 \uBA85\uC18C"},{key:"WRDTRB",label:"\uC138\uACC4\uC5EC\uD589"},{key:"NAVIGT",label:"\uAE38 \uCC3E\uAE30"}]},{key:"SOAR",label:"\uC0AC\uD68C\uC640 \uC608\uC220",icon:"landmark",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#5C6BC0",subs:[{key:"KRSOCI",label:"\uD55C\uAD6D"},{key:"ECONEW",label:"\uACBD\uC81C\uC640 \uB274\uC2A4"},{key:"GENART",label:"\uC608\uC220"},{key:"GELFKL",label:"\uC0DD\uD65C \uC0C1\uC2DD"}]},{key:"NTSC",label:"\uC790\uC5F0\uACFC \uACFC\uD559",icon:"leaf",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#9CCC65",subs:[{key:"ANIMAL",label:"\uB3D9\uBB3C"},{key:"PLANTS",label:"\uC2DD\uBB3C"},{key:"ETHPLT",label:"\uC9C0\uAD6C"},{key:"TOLELC",label:"\uB3C4\uAD6C\uC640 \uC804\uC790\uC81C\uD488"},{key:"GESCKL",label:"\uACFC\uD559\uC0C1\uC2DD"}]},{key:"SPRT",label:"\uC2A4\uD3EC\uCE20",icon:"trophy",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#FFCA28",subs:[{key:"INVDSP",label:"\uAC1C\uC778\uACBD\uAE30"},{key:"MARART",label:"\uACA9\uD22C\uAE30"},{key:"TEAMSP",label:"\uB2E8\uCCB4\uACBD\uAE30"},{key:"FOOTBL",label:"\uCD95\uAD6C"},{key:"GESPKL",label:"\uC2A4\uD3EC\uCE20 \uC0C1\uC2DD"}]}],rr={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};let Me=null,Ct=null,gt=null;function ir(){const e=zn();if(e&&e.entries.length>0){const n=wn();if(Me&&Ct===e&&gt===n)return Me;const t=new Set,u=[];for(const r of e.entries)!r.word||t.has(r.word)||(t.add(r.word),u.push({w:r.word,s:r.syllables,p:n?.[r.word]?[...n[r.word].cho??[],...n[r.word].jung??[],...n[r.word].jong??[]]:[],pron:r.pronunciation||r.word,grade:r.grade}));return Me=u,Ct=e,gt=n,Me}return[]}new Proxy([],{get(e,n){const t=ir(),u=t[n];return typeof u=="function"?u.bind(t):u}});const ar={free:{maxCustomers:0,visitWord:!1,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!1,wordTablePrint:!1,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!1,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:0,crossword:!1,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!1},personal_standard:{maxCustomers:0,visitWord:!1,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!1,wordDataLevel:2,sentenceDataLevel:2,crossword:!0,crosswordMid:!0,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!0},mgr_free:{maxCustomers:5,visitWord:!0,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!1,wordTablePrint:!1,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!1,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:1,crossword:!1,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!1},none:{maxCustomers:0,visitWord:!1,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!1,wordTableSetting:!1,wordTablePrint:!1,addToMyList:!1,addToGroupList:!1,wordSearch:!1,wordSearchPrint:!1,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:0,sentenceDataLevel:0,crossword:!1,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!1},lite_word:{maxCustomers:10,visitWord:!0,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:0,crossword:!0,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!1},lite_sentence:{maxCustomers:10,visitWord:!1,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!1,wordTableSetting:!1,wordTablePrint:!0,addToMyList:!1,addToGroupList:!1,wordSearch:!1,wordSearchPrint:!0,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:0,sentenceDataLevel:1,crossword:!0,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!0},lite:{maxCustomers:10,visitWord:!0,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:1,crossword:!0,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!0},standard:{maxCustomers:30,visitWord:!0,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!1,wordDataLevel:2,sentenceDataLevel:2,crossword:!0,crosswordMid:!0,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!0},pro:{maxCustomers:50,visitWord:!0,visitSentence:!0,homework:!0,customerStats:!0,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!1,wordDataLevel:3,sentenceDataLevel:3,crossword:!0,crosswordMid:!0,crosswordHigh:!0,wordTrainingView:!0,sentenceTrainingView:!0},enterprise:{maxCustomers:1/0,visitWord:!0,visitSentence:!0,homework:!0,customerStats:!0,managerCustomerSplit:!0,managerManagement:!0,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!0,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!0,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!0,wordDataLevel:3,sentenceDataLevel:3,crossword:!0,crosswordMid:!0,crosswordHigh:!0,wordTrainingView:!0,sentenceTrainingView:!0}},sr={none:0,free:1,personal_standard:3,mgr_free:4,lite_word:5,lite_sentence:5,lite:6,standard:7,pro:8,enterprise:9},cr={free:{sentenceTrainingDaily:2,wordTrainingDaily:2,gameDaily:1},personal_standard:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null},mgr_free:{sentenceTrainingDaily:2,wordTrainingDaily:2,gameDaily:1,trainingItemMax:5,customerMax:5,homeworkSendDaily:1},lite:{sentenceTrainingDaily:5,wordTrainingDaily:5,gameDaily:5,trainingItemMax:10,customerMax:10,homeworkSendDaily:10},standard:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null,trainingItemMax:30,customerMax:30,homeworkSendDaily:30},pro:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null,trainingItemMax:null,customerMax:50,homeworkSendDaily:50},enterprise:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null,trainingItemMax:null,customerMax:null,homeworkSendDaily:null}};function lr(e){const n=e.toLowerCase();return n.startsWith("manager_enterprise")?"enterprise":n.startsWith("manager_pro")?"pro":n.startsWith("manager_standard")?"standard":n.startsWith("manager_lite_word")?"lite_word":n.startsWith("manager_lite_sentence")?"lite_sentence":n.startsWith("manager_lite")||n.startsWith("mgr_lite")?"lite":n.startsWith("mgr_standard")?"standard":n.startsWith("mgr_pro")?"pro":n.startsWith("content_")||n.startsWith("speechear_")||n.startsWith("light_")||n==="light"?"personal_standard":"none"}const Cr=5,gr=5;function dr({rank:e,voteCount:n,quota:t=5}){return e<t&&n>0}const fr={selected:"ALREADY_SELECTED",added:"ALREADY_ADDED",rejected:"ALREADY_REJECTED"};export{Fn as CAPABILITY,w as CHOSEONG,N as JONGSEONG,_ as JUNGSEONG,de as LONG_STORIES,Vn as NETWORK_ERROR_MESSAGE,Ce as NOISE_DATAS,fe as ORDER_SETS,ar as PLAN_FEATURES,cr as PLAN_LIMITS,ge as SHORT_STORIES,sr as TIER_RANK,or as TOPIC_TYPES,ur as TRAINING_TYPES,rr as TRAINING_TYPE_I18N_KEY,gr as WORD_SUGGESTION_ACCOUNT_LIMIT,fr as WORD_SUGGESTION_EXISTING_ERROR,Cr as WORD_SUGGESTION_WEEKLY_QUOTA,at as applyFontScale,ot as applyTheme,Zu as buildChangeWholeSyllableProblem,Vu as buildDropCompoundProblem,Uu as buildDropContrast3Problem,Ku as buildDropContrastProblem,Ju as buildDropFinalConsonantProblem,cu as buildMultiPartPosContrast,iu as buildPairIndex,qu as buildRemoveConsonantProblem,zu as buildSyllableMaskIndex,Ft as bulkSetImageExistence,Wu as cardQuestionTitle,fn as checkImageExists,Ht as classifyPairDifficulty,Lt as clearAudioExistsCache,xt as clearImageExistenceCache,au as clearPairIndexCache,H as composeSyllable,ct as computeDailySelection,$t as configureImageResolver,Ao as configureNoiseSettingsStore,Nt as configurePronunciationResolver,Et as configureStorage,pt as configureTTS,Ho as configureTrainingCategories,_o as copyText,Wt as createDecompCache,bo as createTTSUrlResolver,vo as dateToDb,uo as downloadCsvText,Tt as downloadSound,tr as ensureTrainingDataLoaded,to as escapeCsvField,sn as fileExists,pn as filterContrastCandidates,Mn as finalToPhoneme,hn as firstChoseongOf,Fo as formatCount,Lo as formatDateKo,jo as formatDateLocale,No as formatDateLongKo,ko as formatDateLongLocale,Ro as formatDatetimeKo,Io as formatPhone,Mo as formatRelativeTime,Go as formatTimeHM,$o as formatYmd,rn as getAssetBaseUrl,Qo as getDailySelection,Ot as getElementAnalyser,Qu as getErrorMessage,Gt as getImageExistenceStats,Pt as getImageExistsCached,dn as getImageResolver,wt as getNoiseBaseUrl,wn as getPairIndex,lr as getPlanTier,jt as getPronunciationResolver,it as getSavedFontScale,ut as getSavedTheme,cn as getSignedOrPublicUrl,bt as getTTSFallbackUrlResolver,Bt as getTTSUrlResolver,nt as getTodayKst,Yo as getTopicTypes,Xo as getTrainingPools,Ko as getTrainingTypes,zn as getWordPool,Mu as hasQuestionWordConstraint,k as hasSel,We as hasStructureContrast,zo as initFontScale,Vo as initTheme,Sn as isAllChoseong,Iu as isManualOnlyType,Jn as isNetworkErrorMessage,yn as isSyllablePattern,dr as isThisWeekPick,nr as isTrainingDataLoaded,$u as isValidQuestionWord,Zn as itemCorrectness,Hu as jamoToNamesForSpeech,Eo as loadGameLeaderboard,yo as loadMyGameRanks,To as loadNoiseSettings,lt as loadTrainingData,Co as logCrossword,co as logTrainingCompletion,ao as logTrainingTime,z as matchSyllables,Yt as matchesChoseongSearch,An as matchesSyllablePattern,we as matchesWordQuery,Kn as mergeQuestionText,su as minimalPairDistractors,Po as normalizeDate,Bo as officialSoundPath,no as parseSortValue,h as parseSyllable,Xt as patternToComposition,vu as phonemePartsOf,Gn as pickEuRo,In as pickEulReul,Pn as pickEunNeun,$n as pickIga,vn as pickWaGwa,vt as prewarmImageCache,Re as primarySelPart,Mt as readLevel,ju as reorderArray,Dt as resolveAssetUrl,At as resolveSoundPath,Rt as resumeAudioMeter,x as sample,wo as saveNoiseSettings,tu as searchAndRankWords,St as setAssetBaseUrl,lo as setCrosswordLogger,So as setGameLeaderboardLoader,mo as setGameRanksLoader,ho as setGameScoreSubmitter,so as setTrainingCompletionLogger,io as setTrainingTimeLogger,ro as setWordPool,j as shuffle,eo as sortToValue,Ze as soundOf,dt as speak,ft as stopSpeaking,Do as submitGameScore,J as syllMatchesComp,Z as syllableContrasts,Jt as syllableLength,Un as syllablePron,po as toBase64UrlSafe,mn as toChoseong,go as toItemResults,Oo as toKstHm,le as toKstYmd,Tu as toStandardPronunciation,Oe as toStorageName,Xu as toUserErrorMessage,nu as validateSyllableSearchInput,Nu as withEuRo,bu as withEulReul,_u as withEunNeun,Bu as withIga,Lu as withWaGwa,Kt as wordContainsChoseong,Vt as wordContainsJongseong,Ut as wordContainsJungseong,qt as wordHasNoCoda,Zt as wordHasSyllableMatching,fo as wrongItems};
20
+ `),this.name="StorageNotConfiguredError"}};function Et(e){yt(e)}function At(e,n){if(!e)return null;const t=ee();return t?.resolvePath?t.resolvePath(e,n):n?`${n}/${e}.mp3`:null}async function sn(e){if(!e)return!1;const n=ee();if(!n)throw new $e("fileExists");if(n.exists)return n.exists(e);try{return await n.resolveUrl(e)!==null}catch{return!1}}async function cn(e){if(!e)return null;const n=ee();if(!n)throw new $e("getSignedOrPublicUrl");try{return await n.resolveUrl(e)}catch{return null}}async function Tt(e){const n=ee();if(!n)throw new $e("downloadSound");return n.download(e)}function wt(){return ee()?.noiseBaseUrl??"/sounds/noise"}const Ie="__ihab_core_tts_config__";function pt(e){globalThis[Ie]=e}function Bt(){return globalThis[Ie]?.urlResolver??null}function bt(){return globalThis[Ie]?.fallbackUrlResolver??null}const _t=new Map;function Lt(){_t.clear()}const ln="__ihab_core_pronunciation_resolver__";function Nt(e){globalThis[ln]=e}function jt(){return globalThis[ln]??null}let ne=null;const Cn=new WeakMap;function kt(){if(ne)return ne;try{const e=window.AudioContext||window.webkitAudioContext;return e?(ne=new e,ne):null}catch{return null}}function Rt(){try{ne?.resume()}catch{}}function Ot(e){if(!e)return null;const n=Cn.get(e);if(n)return n;const t=kt();if(!t)return null;try{const u=t.createMediaElementSource(e),r=t.createAnalyser();return r.fftSize=1024,r.smoothingTimeConstant=.6,u.connect(r),u.connect(t.destination),Cn.set(e,r),r}catch{return null}}function Mt(e,n){e.getFloatTimeDomainData(n);let t=0;for(let u=0;u<n.length;u++){const r=n[u];t+=r*r}return Math.sqrt(t/n.length)}const gn="__ihab_core_image_config__";function $t(e){globalThis[gn]=e}function dn(){return globalThis[gn]??null}const te="word_image_existence_map_v1";let M=null;const Ae=new Map;function ue(){if(M)return M;try{const e=typeof localStorage<"u"?localStorage.getItem(te):null;M=e?JSON.parse(e):{}}catch{M={}}return M}let Pe=null;function It(){Pe||(Pe=setTimeout(()=>{Pe=null;try{typeof localStorage<"u"&&M&&localStorage.setItem(te,JSON.stringify(M))}catch{}},200))}function Te(e,n){return`${e}_${n??1}`}async function fn(e,n){const t=ue(),u=Te(e,n);if(u in t)return t[u];if(Ae.has(u))return Ae.get(u);const r=dn();if(!r)return!1;const i=r(e,n);if(!i)return!1;const o=fetch(i,{method:"HEAD",signal:AbortSignal.timeout(8e3)}).then(a=>a.ok).catch(()=>!1).then(a=>(t[u]=a,It(),Ae.delete(u),a));return Ae.set(u,o),o}function Pt(e,n){const t=ue(),u=Te(e,n);return u in t?t[u]:void 0}async function vt(e,n={}){const{force:t=!1,concurrency:u=16,onProgress:r}=n,i=ue(),o=t?Array.from(new Set(e)):Array.from(new Set(e)).filter(c=>!(Te(c)in i));let a=0;if(o.length>0){let c=0;const s=Array.from({length:Math.min(u,o.length)},async()=>{for(;c<o.length;){const C=c++,l=o[C],g=Te(l);if(!t&&g in i){a++,r?.(a,o.length);continue}try{await fn(l)}catch{}a++,r?.(a,o.length)}});await Promise.all(s)}try{typeof localStorage<"u"&&M&&localStorage.setItem(te,JSON.stringify(M))}catch{}return{checked:o.length,cached:Object.keys(i).length,total:e.length}}function Gt(){const e=ue(),n=Object.values(e);return n.length===0?null:{total:n.length,exists:n.filter(Boolean).length}}function Ft(e){const n=ue();Object.assign(n,e);try{typeof localStorage<"u"&&localStorage.setItem(te,JSON.stringify(n))}catch{}}function xt(){M={};try{typeof localStorage<"u"&&localStorage.removeItem(te)}catch{}}const w=["\u3131","\u3132","\u3134","\u3137","\u3138","\u3139","\u3141","\u3142","\u3143","\u3145","\u3146","\u3147","\u3148","\u3149","\u314A","\u314B","\u314C","\u314D","\u314E"],_=["\u314F","\u3150","\u3151","\u3152","\u3153","\u3154","\u3155","\u3156","\u3157","\u3158","\u3159","\u315A","\u315B","\u315C","\u315D","\u315E","\u315F","\u3160","\u3161","\u3162","\u3163"],N=["","\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 h(e){if(!e)return null;const n=e.charCodeAt(0)-44032;return n<0||n>=11172?null:{cho:Math.floor(n/588),jung:Math.floor(n%588/28),jong:n%28}}function Wt(){const e=new Map;return n=>{let t=e.get(n);return t||(t=[...n].map(u=>h(u)),e.set(n,t)),t}}function H(e,n,t=0){return String.fromCharCode(44032+(e*21+n)*28+t)}function Ht(e,n){if(!e||!n||e===n||e.length!==n.length)return"random";let t=0,u=null;for(let r=0;r<e.length;r++){const i=h(e[r]),o=h(n[r]);if(!i||!o)return"random";if(i.cho===o.cho&&i.jung===o.jung&&i.jong===o.jong)continue;t++;const a=i.cho!==o.cho,c=i.jung!==o.jung,s=i.jong!==o.jong;(a?1:0)+(c?1:0)+(s?1:0)>1?u="multi":a?u="cho":c?u="jung":u="jong"}return t!==1?"random":u==="cho"?"cho":u==="jung"?"jung":u==="jong"?"jong":"random"}function hn(e){const n=h(e[0]||"");return n?w[n.cho]:""}function mn(e){return[...e].map(n=>{const t=h(n);return t?w[t.cho]:n}).join("")}function Sn(e){return!!e&&[...e].every(n=>w.includes(n))}function Yt(e,n){return n?Sn(n)?mn(e).includes(n):e.toLowerCase().includes(n.toLowerCase()):!0}function we(e,n){if(!n)return!0;const t=[...n],u=a=>w.includes(a),r=a=>_.includes(a),i=t.map(a=>u(a)?"cho":r(a)?"jung":h(a)?"syl":"other");if(i.includes("other"))return e.includes(n);const o=[...e];for(let a=0;a+t.length<=o.length;a++){let c=!0;for(let s=0;s<t.length;s++){const C=o[a+s],l=i[s];if(l==="cho"){if(hn(C)!==t[s]){c=!1;break}}else if(l==="jung"){const g=h(C);if(!g||_[g.jung]!==t[s]){c=!1;break}}else{const g=h(t[s]);if(g&&g.jong===0){const m=h(C);if(!m||m.cho!==g.cho||m.jung!==g.jung){c=!1;break}}else if(C!==t[s]){c=!1;break}}}if(c)return!0}return!1}const ve={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"]},Dn=Object.fromEntries(Object.entries(ve).map(([e,n])=>[n.join(""),N[Number(e)]]));function Kt(e,n){if(!e||!n)return!1;for(const t of e){const u=h(t);if(u&&w[u.cho]===n)return!0}return!1}function Ut(e,n){if(!e||!n)return!1;for(const t of e){const u=h(t);if(u&&_[u.jung]===n)return!0}return!1}function Vt(e,n){if(!e||!n)return!1;for(const t of e){const u=h(t);if(!u||u.jong<=0)continue;if(N[u.jong]===n)return!0;const r=ve[u.jong];if(r&&r.includes(n))return!0}return!1}function Jt(e){if(!e)return 0;let n=0;for(const t of e)h(t)&&n++;return n}function qt(e){if(!e)return!1;let n=!1;for(const t of e){const u=h(t);if(u&&(n=!0,u.jong>0))return!1}return n}function zt(e,n){if(e.jong<=0)return!1;if(n.includes(N[e.jong]))return!0;const t=ve[e.jong];return!!t&&t.some(u=>n.includes(u))}function Zt(e,n,t){if(!e)return!1;const u=[...e],r=i=>{const o=h(u[i]);if(!o||n.cho&&!n.cho.includes(w[o.cho])||n.jung&&!n.jung.includes(_[o.jung]))return!1;if(n.jongNone){if(o.jong>0)return!1}else if(n.jong&&!zt(o,n.jong))return!1;return!0};if(t==="head")return r(0);if(t==="tail")return r(u.length-1);if(t==="mid"){for(let i=1;i<u.length-1;i++)if(r(i))return!0;return!1}for(let i=0;i<u.length;i++)if(r(i))return!0;return!1}function yn(e){return e.includes(",")||e.includes("_")}function En(e){if(e==="")return[{kind:"any"}];if(e.includes("_")){const n=[...e];if(n.length>4)return[{kind:"invalid"}];const t=n[0]??"_",u=n[1]??"_";let r=n.slice(2).join("");if(r.length===2){const i=Dn[r];if(!i)return[{kind:"invalid"}];r=i}return[{kind:"template",cho:t,jung:u,jong:r||"_"}]}return[...e].map(n=>h(n)?{kind:"syllable",ch:n}:w.includes(n)?{kind:"cho",jamo:n}:_.includes(n)?{kind:"jung",jamo:n}:{kind:"invalid"})}function Qt(e,n){switch(n.kind){case"any":return!0;case"syllable":{const t=h(n.ch);if(!t)return e===n.ch;if(t.jong===0){const u=h(e);return!!u&&u.cho===t.cho&&u.jung===t.jung}return e===n.ch}case"cho":{const t=h(e);return!!t&&w[t.cho]===n.jamo}case"jung":{const t=h(e);return!!t&&_[t.jung]===n.jamo}case"template":{const t=h(e);return!(!t||n.cho!=="_"&&w[t.cho]!==n.cho||n.jung!=="_"&&_[t.jung]!==n.jung||n.jong!=="_"&&N[t.jong]!==n.jong)}case"invalid":return!1}}function An(e,n){const t=n.split(",").flatMap(r=>En(r.trim()));if(t.length===0)return!0;const u=[...e];if(u.length<t.length)return!1;for(let r=0;r+t.length<=u.length;r++)if(t.every((i,o)=>Qt(u[r+o],i)))return!0;return!1}function Xt(e){const n=e.split(",").flatMap(i=>En(i.trim())),t=new Set,u=new Set,r=new Set;for(const i of n)switch(i.kind){case"cho":t.add(i.jamo);break;case"jung":u.add(i.jamo);break;case"template":i.cho!=="_"&&t.add(i.cho),i.jung!=="_"&&u.add(i.jung),i.jong!=="_"&&r.add(i.jong);break;case"syllable":{const o=h(i.ch);o&&(t.add(w[o.cho]),u.add(_[o.jung]),o.jong!==0&&r.add(N[o.jong]));break}}return t.size===0&&u.size===0&&r.size===0?null:{cho:t.size?[...t]:null,jung:u.size?[...u]:null,jong:r.size?[...r]:null}}function eu(e){return!!h(e)||w.includes(e)||_.includes(e)}function nu(e){const n=e.trim();if(!n)return{ok:!0};for(const t of n.split(",")){const u=t.trim();if(u!==""){if(u.includes("_")){const r=[...u];if(r.length>4)return{ok:!1};const i=r[0],o=r[1],a=r.slice(2).join(""),c=i===void 0||i==="_"||w.includes(i),s=o===void 0||o==="_"||_.includes(o),C=a===""||a==="_"||N.filter(Boolean).includes(a)||!!Dn[a];if(c&&s&&C)continue;return{ok:!1}}if(![...u].every(eu))return{ok:!1}}}return{ok:!0}}w.length,_.length,N.length;function tu(e,n){const t=n.trim();if(!t||!/[^\s,_]/.test(t))return e;if(yn(t))return e.filter(o=>An(o.word,t));const u=e.filter(o=>we(o.word,t)||we(o.pronunciation??"",t)),r=[...t].length,i=o=>!!o&&we(o.slice(0,r),t);return u.map(o=>({w:o,rank:i(o.word)||i(o.pronunciation??"")?0:1})).sort((o,a)=>o.rank-a.rank).map(o=>o.w)}const Ge="word_pair_index_v2",Fe="word_pair_index_sig_v2";let $=null,oe=null;function Tn(){try{if(typeof localStorage>"u")return null;const e=localStorage.getItem(Ge),n=localStorage.getItem(Fe);return!e||!n?null:{index:JSON.parse(e),sig:n}}catch{return null}}function uu(e,n){try{if(typeof localStorage>"u")return;localStorage.setItem(Ge,JSON.stringify(e)),localStorage.setItem(Fe,n)}catch{}}function ou(e){const n=e.map(u=>`${u.word}|${u.pron??""}`).sort();let t=0;for(const u of n)for(let r=0;r<u.length;r++)t=(t<<5)-t+u.charCodeAt(r)|0;return`${n.length}-${t}`}async function ru(e,n){const t=new Set,u=[];for(const s of e){if(!s.word||t.has(s.word))continue;const C=s.pron||s.word,l=Array.from(C).map(h);l.some(g=>g===null)||l.length===Array.from(s.word).length&&(t.add(s.word),u.push({word:s.word,syls:l}))}const r={},i=u.length,o=new Map;for(const s of u){const C=s.syls.length;o.has(C)||o.set(C,[]),o.get(C).push(s)}let a=0;const c=["cho","jung","jong"];for(const s of o.values()){const C=s[0].syls.length;for(let l=0;l<C;l++)for(const g of c){const m=new Map;for(const S of s){let D="";for(let f=0;f<C;f++){f>0&&(D+="~");const d=S.syls[f];f===l?g==="cho"?D+=`*:${d.jung}:${d.jong}`:g==="jung"?D+=`${d.cho}:*:${d.jong}`:D+=`${d.cho}:${d.jung}:*`:D+=`${d.cho}:${d.jung}:${d.jong}`}let y=m.get(D);y||(y=[],m.set(D,y)),y.push(S)}for(const S of m.values())if(!(S.length<2))for(let D=0;D<S.length;D++){const y=S[D];for(let f=D+1;f<S.length;f++){const d=S[f];y.syls[l][g]!==d.syls[l][g]&&(r[y.word]||(r[y.word]={cho:[],jung:[],jong:[]}),r[d.word]||(r[d.word]={cho:[],jung:[],jong:[]}),r[y.word][g].push(d.word),r[d.word][g].push(y.word))}}}a+=s.length,n?.(a,i),await new Promise(l=>setTimeout(l,0))}return i>0&&n?.(i,i),r}async function iu(e,n={}){const t=ou(e);if(!n.force){if($&&oe===t)return $;const r=Tn();if(r&&r.sig===t)return $=r.index,oe=t,$}const u=await ru(e,n.onProgress);return $=u,oe=t,uu(u,t),u}function wn(){if($)return $;const e=Tn();return e?($=e.index,oe=e.sig,$):null}function au(){$=null,oe=null;try{typeof localStorage<"u"&&(localStorage.removeItem(Ge),localStorage.removeItem(Fe))}catch{}}const xe={cho:w,jung:_,jong:N},k=e=>Array.isArray(e)?e.length>0:!!e;function We(e,n){if(e.length!==n.length)return!1;for(let t=0;t<e.length;t++){const u=e[t],r=n[t];if(!(!u||!r)&&(u.cho!==r.cho&&w[u.cho]==="\u3147"!=(w[r.cho]==="\u3147")||u.jong!==r.jong&&u.jong===0!=(r.jong===0)))return!0}return!1}function pn(e,n,t){const u=t.pronOf(e),r=t.decompOf,i=t.sameStructureOnly&&r?r(u):null,o=[];for(const a of n)a!==e&&(t.okSet&&!t.okSet.has(a)||t.pronOf(a)!==u&&(i&&r&&We(i,r(t.pronOf(a)))||o.push(a)));return o}function su(e,n,t){const u=n?.[e];if(!u)return[];const r=t.kind?u[t.kind]??[]:[...u.cho??[],...u.jung??[],...u.jong??[]];return pn(e,r,t)}function cu(e,n,t,u,r,i,o){const a=["cho","jung","jong"].filter(g=>k(e[g])),c={};for(const g of a){const m=e[g];c[g]=new Set(Array.isArray(m)?m:[m])}const s=r==="pron",C=new Map;for(const g of n){const m=t(i(g));if(m.some(f=>!f))continue;let S=m;if(!s&&(S=t(g),S.length!==m.length||S.some(f=>!f)))continue;const D=m.length,y=C.get(D);y?y.push({w:g,dPron:m,dPos:S}):C.set(D,[{w:g,dPron:m,dPos:S}])}const l=new Map;for(const[g,m]of C){const S=new Map,D=(y,f)=>{const d=y.dPos[f];return d!=null&&a.every(E=>c[E].has(xe[E][d[E]]))};for(const y of m){let f;if(o==="head")f=D(y,0)?0:-1;else if(o==="tail")f=D(y,g-1)?g-1:-1;else if(o==="mid"){f=-1;for(let E=1;E<g-1;E++)if(D(y,E)){f=E;break}}else f=y.dPos.findIndex(E=>E!=null&&a.every(A=>c[A].has(xe[A][E[A]])));if(f<0)continue;const d=S.get(f);d?d.push(y):S.set(f,[y])}for(const[y,f]of S){const d=new Set(a.map(p=>y+":"+p)),E=p=>{let b="";for(let B=0;B<g;B++){const R=p[B];for(const W of["cho","jung","jong"])b+=(d.has(B+":"+W)?"*":R[W])+"."}return b},A=new Map;for(const p of m){const b=E(p.dPron),B=A.get(b);B?B.push(p):A.set(b,[p])}for(const p of f){const b=A.get(E(p.dPron))??[],B=[];for(const R of b){if(R.w===p.w)continue;let W=!0;for(const T of a){const v=p.dPron[y][T],K=R.dPron[y][T];if(K===v){W=!1;break}if(s&&c[T].has(xe[T][K])){W=!1;break}}W&&(u&&We(p.dPron,R.dPron)||B.push(R.w))}l.set(p.w,B)}}}return l}const pe=0,Bn=1,U=2,He=3,lu=4,Be=5,Ye=6,be=7,Cu=8,bn=9,re=10,gu=11,ie=12,du=13,ae=14,_e=15,Le=16,se=17,fu=18,I=0,G=1,hu=3,V=4,Ke=5,Ue=6,P=7,L=8,_n=9,Ln=10,Ne=11,Nn=12,Ve=13,je=15,ke=16,F=17,jn=18,Je=21,kn=27,mu=20,Su={1:pe,2:Bn,4:U,7:He,8:Be,16:Ye,17:be,19:bn,20:re,22:ie,23:ae,24:_e,25:Le,26:se},Du={[hu]:[G,re],[Ke]:[V,ie],[_n]:[L,pe],[Ln]:[L,Ye],[Ne]:[L,be],[Nn]:[L,re],[Ve]:[L,Le],14:[L,se],[jn]:[F,re]},yu={[Ue]:U,[je]:Be},qe={2:G,24:G,3:G,9:G,5:V,6:V,19:P,20:P,22:P,23:P,25:P,27:P,11:L,12:L,13:L,15:L,10:ke,14:F,18:F,26:F},Rn={[pe]:_e,[He]:Le,[be]:se,[ie]:ae},On={[pe]:Bn,[He]:lu,[be]:Cu,[bn]:re,[ie]:du},Eu=new Set([Ke,Ln,Ne,Nn,Ve,je,jn]),Au=new Set(["\uBC1F"]);function Tu(e){const n=(e??"").trim();if(!n)return"";const t=[...n],u=t.map(h);if(u.some(i=>i===null))return n;const r=u;for(let i=0;i<r.length;i++){const o=r[i],a=r[i+1],c=o.jong;if(!a){o.jong=qe[o.jong]??o.jong;break}if(o.jong===I)continue;if(a.cho===gu){if(a.jung===mu){if(o.jong===P){o.jong=I,a.cho=ie;continue}if(o.jong===25){o.jong=I,a.cho=ae;continue}if(o.jong===Ve){o.jong=L,a.cho=ae;continue}}if(o.jong===kn){o.jong=I;continue}const C=yu[o.jong];if(C!==void 0){o.jong=I,a.cho=C;continue}const l=Du[o.jong];if(l){o.jong=l[0],a.cho=l[1];continue}const g=Su[o.jong];g!==void 0&&(o.jong=I,a.cho=g);continue}if((o.jong===kn||o.jong===Ue||o.jong===je)&&Rn[a.cho]!==void 0){a.cho=Rn[a.cho],o.jong=o.jong===Ue?V:o.jong===je?L:I;continue}if(a.cho===fu){if(o.jong===Ke){o.jong=V,a.cho=ae;continue}if(o.jong===_n){o.jong=L,a.cho=_e;continue}if(o.jong===Ne){o.jong=L,a.cho=se;continue}const C=qe[o.jong]??o.jong;if(C===G){o.jong=I,a.cho=_e;continue}if(C===P){o.jong=I,a.cho=Le;continue}if(C===F){o.jong=I,a.cho=se;continue}}let s=qe[o.jong]??o.jong;c===Ne&&Au.has(t[i])&&(s=F),o.jong=s,On[a.cho]!==void 0&&(s===G||s===P||s===F||Eu.has(c))&&(a.cho=On[a.cho]),(a.cho===U||a.cho===Ye)&&(o.jong===G?o.jong=Je:o.jong===P?o.jong=V:o.jong===F&&(o.jong=ke)),a.cho===Be?o.jong===V?o.jong=L:o.jong===ke||o.jong===Je?a.cho=U:o.jong===G?(o.jong=Je,a.cho=U):o.jong===F&&(o.jong=ke,a.cho=U):o.jong===L&&a.cho===U&&(a.cho=Be)}return r.map(i=>H(i.cho,i.jung,i.jong)).join("")}const wu={\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"};function Mn(e){return wu[e]??e}const q=/[ㄱ-ㅎ]/,pu=/[ㅏ-ㅣ]/;function ce(e){for(let n=e.length-1;n>=0;n--){const t=e[n],u=t.charCodeAt(0);if(u>=44032&&u<=55203||q.test(t)||pu.test(t))return t}return null}function $n(e){const n=ce(e);if(!n)return"\uAC00";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uC774":"\uAC00":q.test(n)?"\uC774":"\uAC00"}function Bu(e){return`${e}${$n(e)}`}function In(e){const n=ce(e);if(!n)return"\uB97C";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uC744":"\uB97C":q.test(n)?"\uC744":"\uB97C"}function bu(e){return`${e}${In(e)}`}function Pn(e){const n=ce(e);if(!n)return"\uB294";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uC740":"\uB294":q.test(n)?"\uC740":"\uB294"}function _u(e){return`${e}${Pn(e)}`}function vn(e){const n=ce(e);if(!n)return"\uC640";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uACFC":"\uC640":q.test(n)?"\uACFC":"\uC640"}function Lu(e){return`${e}${vn(e)}`}function Gn(e){const n=ce(e);if(!n)return"\uB85C";const t=n.charCodeAt(0);if(t>=44032&&t<=55203){const u=(t-44032)%28;return u===0||u===8?"\uB85C":"\uC73C\uB85C"}return n==="\u3139"?"\uB85C":q.test(n)?"\uC73C\uB85C":"\uB85C"}function Nu(e){return`${e}${Gn(e)}`}function ju(e,n,t){const u=e.slice(),[r]=u.splice(n,1);return u.splice(t,0,r),u}function j(e,n=Math.random){const t=e.slice();for(let u=t.length-1;u>0;u--){const r=Math.floor(n()*(u+1));[t[u],t[r]]=[t[r],t[u]]}return t}function x(e,n,t=Math.random){return!Array.isArray(e)||e.length===0||n<=0?[]:n>=e.length?j(e,t):j(e,t).slice(0,n)}const Fn={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"}};function ku(e){const n=e?Fn[e]?.group:void 0;return n==="synthesis"||n==="deletion"||n==="substitution"?n:null}const Ru=w.indexOf("\u3147"),xn={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!==Ru},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}},Ou=new Set([]);function Mu(e){return e in xn}function $u(e,n){const t=xn[e];if(!t)return!0;const u=[...n];if(u.length!==t.syllables)return!1;const r=h(u[0]);return!!r&&t.syllable(r)}function Iu(e){return Ou.has(e)}function Pu(e){const n=e.charCodeAt((e.length||1)-1)||0;return n<44032||n>55203||(n-44032)%28===0?"\uC640":"\uACFC"}function ze(e){const n=e.charCodeAt((e.length||1)-1)||0;return n<44032||n>55203||(n-44032)%28===0?"\uB97C":"\uC744"}function Wn(e){const n=e.charCodeAt((e.length||1)-1)||0;if(n<44032||n>55203)return"\uB85C";const t=(n-44032)%28;return t===0||t===8?"\uB85C":"\uC73C\uB85C"}function Hn(e){const n=e.charAt((e.length||1)-1),t=n.charCodeAt(0)||0;return t>=44032&&t<=55203?(t-44032)%28===0?"\uAC00":"\uC774":/[ㄱ-ㅎ]/.test(n)?"\uC774":"\uAC00"}const Yn={\u3131:"\uAE30\uC5ED",\u3132:"\uC30D\uAE30\uC5ED",\u3134:"\uB2C8\uC740",\u3137:"\uB514\uADFF",\u3138:"\uC30D\uB514\uADFF",\u3139:"\uB9AC\uC744",\u3141:"\uBBF8\uC74C",\u3142:"\uBE44\uC74D",\u3143:"\uC30D\uBE44\uC74D",\u3145:"\uC2DC\uC637",\u3146:"\uC30D\uC2DC\uC637",\u3147:"\uC774\uC751",\u3148:"\uC9C0\uC752",\u3149:"\uC30D\uC9C0\uC752",\u314A:"\uCE58\uC753",\u314B:"\uD0A4\uC754",\u314C:"\uD2F0\uC755",\u314D:"\uD53C\uC756",\u314E:"\uD788\uC757",\u3133:"\uAE30\uC5ED\uC2DC\uC637",\u3135:"\uB2C8\uC740\uC9C0\uC752",\u3136:"\uB2C8\uC740\uD788\uC757",\u313A:"\uB9AC\uC744\uAE30\uC5ED",\u313B:"\uB9AC\uC744\uBBF8\uC74C",\u313C:"\uB9AC\uC744\uBE44\uC74D",\u313D:"\uB9AC\uC744\uC2DC\uC637",\u313E:"\uB9AC\uC744\uD2F0\uC755",\u313F:"\uB9AC\uC744\uD53C\uC756",\u3140:"\uB9AC\uC744\uD788\uC757",\u3144:"\uBE44\uC74D\uC2DC\uC637",\u314F:"\uC544",\u3150:"\uC560",\u3151:"\uC57C",\u3152:"\uC598",\u3153:"\uC5B4",\u3154:"\uC5D0",\u3155:"\uC5EC",\u3156:"\uC608",\u3157:"\uC624",\u3158:"\uC640",\u3159:"\uC65C",\u315A:"\uC678",\u315B:"\uC694",\u315C:"\uC6B0",\u315D:"\uC6CC",\u315E:"\uC6E8",\u315F:"\uC704",\u3160:"\uC720",\u3161:"\uC73C",\u3162:"\uC758",\u3163:"\uC774"};function vu(e){if([...e].length!==1)return[e];const n=h(e);if(!n)return[e];const t=[w[n.cho],_[n.jung]];return n.jong!==0&&t.push(N[n.jong]),t}function Kn(e,n=!1){const t=e.filter(Boolean);if(t.length<2)return"";const u=a=>Yn[a]??a,r=t.slice(0,-1).map(a=>`"${a}"${Pu(u(a))}`).join(" "),i=t[t.length-1],o=`"${i}"${ze(u(i))}`;return`${r} ${o} \uD569\uCE58\uBA74 \uC5B4\uB5A4 ${n?"\uC18C\uB9AC":"\uB2E8\uC5B4"}\uAC00 \uB418\uB098\uC694?`}function Gu(e,n){return Kn(n,e==="MERGE_2_PHONEMES"||e==="MERGE_3_PHONEMES")}function Fu(e,n){const t=String(n?.word??n?.original??""),u=String(n?.changedFrom??""),r=String(n?.changedTo??"");return e==="CHANGE_1_PHONEME_IN_1SYLL"?`"${t}"${ze(t)} "${r}"${Wn(r)} \uBC14\uAFB8\uBA74 \uBB34\uC5C7\uC774 \uB418\uB098\uC694?`:`"${t}"\uC5D0\uC11C "${u}"${ze(u)} "${r}"${Wn(r)} \uBC14\uAFB8\uBA74 \uBB34\uC5C7\uC774 \uB418\uB098\uC694?`}function xu(e,n){const t=String(n?.word??n?.original??n?.base??""),u=String(n?.dropped??"");if(e==="DROP_FINAL_CONSONANT_FROM_1SYLL")return`"${t}"\uC5D0\uC11C \uBC1B\uCE68\uC774 \uC5C6\uC5B4\uC9C0\uBA74 \uC5B4\uB5A4 \uB9D0\uC774 \uB418\uB098\uC694?`;if(e==="REMOVE_CONSONANT_AND_IDENTIFY_PHONEME"){const r=String(n?.missingConsonant??"");return`"${t}"\uC5D0\uC11C "${r}"${Hn(r)} \uC5C6\uC5B4\uC9C0\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB418\uB098\uC694?`}return`"${t}"\uC5D0\uC11C "${u}"${Hn(u)} \uC5C6\uC5B4\uC9C0\uBA74 \uC5B4\uB5A4 \uB9D0\uC774 \uB418\uB098\uC694?`}function Wu(e,n,t){switch(ku(e)){case"synthesis":return Gu(e,t);case"substitution":return Fu(e,n);case"deletion":return xu(e,n);default:return""}}function Hu(e){return e.replace(/"([ㄱ-ㅣ])"(으로|와|과|을|를|이|가|은|는|로)?/g,(n,t,u)=>{const r=Yn[t];if(!r)return n;if(!u)return`"${r}"`;const i=(r.charCodeAt(r.length-1)-44032)%28,o=i!==0;let a=u;return u==="\uC640"||u==="\uACFC"?a=o?"\uACFC":"\uC640":u==="\uC744"||u==="\uB97C"?a=o?"\uC744":"\uB97C":u==="\uC774"||u==="\uAC00"?a=o?"\uC774":"\uAC00":u==="\uC740"||u==="\uB294"?a=o?"\uC740":"\uB294":(u==="\uC73C\uB85C"||u==="\uB85C")&&(a=i===0||i===8?"\uB85C":"\uC73C\uB85C"),`"${r}"${a}`})}const Yu=e=>e==null?[]:Array.isArray(e)?e:[e];function Un(e){if([...e].length!==1)return"";const n=h(e);if(!n)return"";const t=Mn(N[n.jong]),u=t===""?0:N.indexOf(t);return H(n.cho,n.jung,u<0?0:u)}function Ze(e,n){return n.get(e)||Un(e)||e}function Re(e){return e?k(e.cho)?"cho":k(e.jung)?"jung":k(e.jong)?"jong":null:null}function J(e,n){const t=(u,r)=>!k(u)||Yu(u).includes(r);return t(n.cho,w[e.cho])&&t(n.jung,_[e.jung])&&t(n.jong,N[e.jong])}function z(e,n,t){const u=[...e];if(t!=="pron")return u.map(i=>h(i));const r=[...n.get(e)||e];return r.length!==u.length?u.map(i=>h(i)):r.map(i=>h(i))}function Z(e,n,t,u,r){const i=n==="cho"?w:n==="jung"?_:N,o=e[n],a=[],c=new Set([Ze(t,r)]),s=j(i.map((C,l)=>l).filter(C=>C!==o&&(n!=="cho"||i[C]!=="\u3147")&&(n!=="jong"||C!==0)));for(const C of s){if(a.length>=u)break;const l=n==="cho"?H(C,e.jung,e.jong):n==="jung"?H(e.cho,C,e.jong):H(e.cho,e.jung,C),g=Ze(l,r);c.has(g)||(c.add(g),a.push(l))}return a}function Ku(e,n,t,u,r,i=null){const o=[...e];if(o.length!==2)return null;const a=o.map(l=>h(l));if(a.some(l=>!l))return null;const c=z(e,t,u);if(c.some(l=>!l))return null;const s=Re(n);let C=s&&n?c.map((l,g)=>J(l,n)?g:-1).filter(l=>l>=0):[0,1];if(i!=null&&(C=C.filter(l=>l!==i)),!C.length)return null;for(const l of j(C)){const g=o[l];if(!r.has(g))continue;const m=Z(a[l],s??"cho",g,40,t),S=[];for(const D of m)if(D!==g&&r.has(D)&&!S.includes(D)&&S.push(D),S.length>=2)break;if(!(S.length<2))return{question:e,distractors:[g,...S]}}return null}function Uu(e,n,t,u,r,i=null){const o=[...e];if(o.length!==3)return null;const a=o.map(l=>h(l));if(a.some(l=>!l))return null;const c=z(e,t,u);if(c.some(l=>!l))return null;const s=Re(n),C=s&&n?c.map((l,g)=>J(l,n)?g:-1).filter(l=>l>=0):[0,1,2];if(!C.length)return null;for(const l of j(C))for(const g of j([0,1,2].filter(m=>m!==l&&(i==null||m===i)))){const m=[0,1,2].filter(d=>d!==g),S=m.map(d=>o[d]).join("");if(!r.has(S))continue;const D=m.indexOf(l),y=Z(a[l],s??"cho",o[l],40,t),f=[];for(const d of y){const E=m.map(p=>o[p]);E[D]=d;const A=E.join("");if(A!==S&&r.has(A)&&!f.includes(A)&&f.push(A),f.length>=2)break}if(!(f.length<2))return{question:e,distractors:[S,...f]}}return null}function Vu(e,n,t,u,r,i=null){const o=[...e],a=o.length;if(a<2)return null;const c=[];for(let C=1;C<=a-1;C++)c.push({remain:o.slice(0,C).join(""),dropped:o.slice(C).join(""),droppedEnd:1}),c.push({remain:o.slice(a-C).join(""),dropped:o.slice(0,a-C).join(""),droppedEnd:0});const s=Re(n);for(const{remain:C,dropped:l,droppedEnd:g}of j(c)){if(i!=null&&g!==i||C===e||!r.has(C)||!r.has(l))continue;const m=[...C],S=m.map(f=>h(f));if(S.some(f=>!f))continue;const D=z(C,t,u);if(D.some(f=>!f))continue;const y=s&&n?D.map((f,d)=>J(f,n)?d:-1).filter(f=>f>=0):m.map((f,d)=>d);if(y.length)for(const f of j(y)){const d=Z(S[f],s??"cho",m[f],40,t),E=[];for(const A of d){const p=[...m];p[f]=A;const b=p.join("");if(b!==C&&r.has(b)&&!E.includes(b)&&E.push(b),E.length>=2)break}if(E.length>=2)return{question:e,distractors:[C,...E]}}}return null}function Ju(e,n,t,u,r,i=null){if([...e].length!==1)return null;const o=h(t.get(e)||e);if(!o||o.jong===0)return null;const a=H(o.cho,o.jung,0),c=Z({cho:o.cho,jung:o.jung,jong:0},"cho",a,2,t);return c.length<2?null:{question:e,distractors:[a,...c]}}const Qe=w.indexOf("\u3147");function qu(e,n,t,u,r,i=null){if([...e].length!==1)return null;const o=h(t.get(e)||e);if(!o||o.jong!==0||o.cho===Qe)return null;const a=H(Qe,o.jung,0),c=Z({cho:Qe,jung:o.jung,jong:0},"jung",a,2,t);return c.length<2?null:{question:e,distractors:[a,...c]}}function zu(e){const n=new Map;for(const t of e){const u=[...t],r=u.length;if(!(r<2||r>3))for(let i=0;i<r;i++){let o=r+"|"+i+"|";for(let c=0;c<r;c++)o+=c===i?"*":u[c];const a=n.get(o);a?a.push(t):n.set(o,[t])}}return n}function Zu(e,n,t,u,r,i=null,o=null,a=2){const c=[...e],s=c.length;if(s<2||s>3)return null;const C=c.map(d=>h(d));if(C.some(d=>!d))return null;const l=z(e,t,u);if(l.some(d=>!d))return null;const g=d=>t.get(d)??d,m=g(e),S=!!n&&(k(n.cho)||k(n.jung)||k(n.jong)),D=!!o&&(k(o.cho)||k(o.jung)||k(o.jong)),y=d=>{let E=s+"|"+d+"|";for(let A=0;A<s;A++)E+=A===d?"*":c[A];return E};let f;if(i!=null){if(i>=s||S&&!J(l[i],n))return null;f=[i]}else S?f=l.map((d,E)=>J(d,n)?E:-1).filter(d=>d>=0):f=Array.from({length:s},(d,E)=>E);for(const d of j(f)){const E=r.get(y(d))??[],A=[],p=[];for(const T of E){if(T===e)continue;const v=[...T].map(Ee=>h(Ee)),K=C[d],De=v[d];if(!K||!De)continue;let ye=0;if(K.cho!==De.cho&&ye++,K.jung!==De.jung&&ye++,K.jong!==De.jong&&ye++,!(ye<a||g(T)===m))if(D){const Ee=z(T,t,u)[d];Ee&&J(Ee,o)?A.push(T):p.push(T)}else A.push(T)}if(!A.length)continue;const b=j(A)[0],B=[],R=new Set([m,g(b)]),W=D?p:A.filter(T=>T!==b);for(const T of j(W)){const v=g(T);if(!R.has(v)&&(R.add(v),B.push(T),B.length>=2))break}if(!D&&B.length<2)for(const T of j(E)){if(T===e||T===b)continue;const v=g(T);if(!R.has(v)&&(R.add(v),B.push(T),B.length>=2))break}if(!(B.length<2))return{question:e,distractors:[b,...B]}}return null}function Qu(e,n="\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"){if(e instanceof Error)return e.message||n;if(typeof e=="string")return e||n;if(e&&typeof e=="object"){const t=e;for(const u of[t.message,t.error_description,t.error])if(typeof u=="string"&&u)return u}return n}const Vn="\uB124\uD2B8\uC6CC\uD06C \uC5F0\uACB0\uC774 \uBD88\uC548\uC815\uD569\uB2C8\uB2E4. \uC5F0\uACB0 \uC0C1\uD0DC\uB97C \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.";function Jn(e){return e?/failed to fetch|load failed|networkerror|network request failed|fetcherror/i.test(e):!1}function Xu(e){return Jn(e)?Vn:e}function eo(e,n){return e==="id"?void 0:`${e}|${n?"asc":"desc"}`}function no(e){const[n,t]=e.split("|");return{key:n,asc:t==="asc"}}function to(e){let n=e==null?"":String(e);return/^[=+\-@\t\r]/.test(n)&&(n=" "+n),/[",\n\r]/.test(n)?`"${n.replaceAll('"','""')}"`:n}function uo(e,n){const t=new Blob(["\uFEFF"+n],{type:"text/csv;charset=utf-8"}),u=URL.createObjectURL(t),r=document.createElement("a");r.href=u,r.download=e,r.click(),URL.revokeObjectURL(u)}const qn="__ihab_core_word_pool__";function oo(){typeof window<"u"&&window.dispatchEvent(new CustomEvent("wordpool:update"))}function ro(e,n){const t=new Map;for(const r of e)t.set(r.word,r);const u={entries:e,pairIndex:n??null,byWord:t};globalThis[qn]=u,oo()}function zn(){return globalThis[qn]??null}const Q=globalThis;function Xe(e,n){const t=u=>{import.meta.env?.DEV&&console.warn(`[trainingLogger:${e}]`,u)};try{const u=n();u&&typeof u.catch=="function"&&u.catch(t)}catch(u){t(u)}}function io(e){Q.__ihabTrainingTimeLogger=e}function ao(e){Xe("time",()=>Q.__ihabTrainingTimeLogger?.(e))}function so(e){Q.__ihabTrainingCompletionLogger=e}function co(e){Xe("completion",()=>Q.__ihabTrainingCompletionLogger?.(e))}function lo(e){Q.__ihabCrosswordLogger=e}function Co(e){Xe("crossword",()=>Q.__ihabCrosswordLogger?.(e))}function O(e){return typeof e=="string"?e.trim()||null:typeof e=="number"?String(e):null}function Zn(e){for(const n of["correct","isCorrect","heard","judgement"])if(typeof e[n]=="boolean")return e[n];return e.score===1?!0:e.score===0?!1:null}function go(e){return Array.isArray(e)?e.map((n,t)=>{const u=n??{};return{index:t,itemId:O(u.contextCode)??O(u.itemId)??O(u.itemCode)??O(u.id),question:O(u.question)??O(u.sentence)??O(u.word)??O(u.targetSyllable),answer:O(u.answer),selected:O(u.selectedText)??O(u.selected),correct:Zn(u)}}):[]}function fo(e){return e.filter(n=>n.correct===!1)}let Qn=null,Xn=null,et=null;function ho(e){Qn=e}function mo(e){Xn=e}function So(e){et=e}async function Do(e,n){try{return await Qn?.(e,n)??null}catch{return null}}async function yo(){try{return await Xn?.()??null}catch{return null}}async function Eo(e,n){try{return await et?.(e,n)??null}catch{return null}}const en=globalThis;function Ao(e){en.__ihabNoiseSettingsStore=e}async function To(){try{return await en.__ihabNoiseSettingsStore?.load()??null}catch(e){return import.meta.env?.DEV&&console.warn("[noiseSettingsStore] load",e),null}}function wo(e){const n=t=>{import.meta.env?.DEV&&console.warn("[noiseSettingsStore] save",t)};try{const t=en.__ihabNoiseSettingsStore?.save(e);t&&typeof t.catch=="function"&&t.catch(n)}catch(t){n(t)}}function Oe(e){const n=new TextEncoder().encode(String(e).normalize("NFC"));let t="";return n.forEach(u=>{t+=u.toString(16).padStart(2,"0")}),t}const po=Oe;function Bo(e,n){return`${e}/${Oe(n)}.mp3`}function bo(e={}){const n=e.storagePrefix??"audio-cache",t=e.voice??"ko-f",u=typeof e.speed=="number"?e.speed:1,r=e.filenameSanitizer??Oe;return async function(i){const o=String(i||"").trim();if(!o)return"";const a=`${r(o)}_${t}.mp3`,c=`${n}/${a}`;try{if(await sn(c)){const s=await cn(c);if(s)return s}}catch{}if(e.generator)try{const s=await e.generator(o,c,e);if(s)return s}catch{}try{const s=`/api/tts?word=${encodeURIComponent(o)}&voice=${encodeURIComponent(t)}&speed=${encodeURIComponent(String(u))}`;return await fetch(s,{method:"GET"}),`/audio-cache/${a}`}catch{return`/audio-cache/${a}`}}}async function _o(e){if(typeof document<"u")try{const n=document.createElement("textarea");n.value=e,n.setAttribute("readonly",""),n.style.position="fixed",n.style.top="0",n.style.left="0",n.style.opacity="0",n.style.pointerEvents="none",document.body.appendChild(n),n.focus(),n.select(),n.setSelectionRange(0,e.length);const t=document.execCommand("copy");if(document.body.removeChild(n),t)return!0}catch{}try{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function")return await navigator.clipboard.writeText(e),!0}catch{}return!1}const X="Asia/Seoul";function Lo(e){return new Date(e).toLocaleDateString("ko-KR",{timeZone:X,year:"numeric",month:"short",day:"numeric"})}function No(e){return new Date(e).toLocaleString("ko-KR",{timeZone:X,year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"})}function jo(e,n){const t=n.startsWith("ko")?"ko-KR":"en-US";return new Date(e).toLocaleDateString(t,{timeZone:X,year:"numeric",month:"short",day:"numeric"})}function ko(e,n){const t=n.startsWith("ko")?"ko-KR":"en-US";return new Date(e).toLocaleString(t,{timeZone:X,year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"})}function Ro(e){return new Date(e).toLocaleString("ko-KR",{timeZone:X,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function Oo(e){if(e==null||e==="")return"";const n=e instanceof Date?e:new Date(e);return isNaN(n.getTime())?"":new Intl.DateTimeFormat("en-GB",{timeZone:X,hour:"2-digit",minute:"2-digit",hour12:!1}).format(n)}function nt(){return le(new Date)}function le(e){if(e==null||e==="")return"";const n=e instanceof Date?e:new Date(e);return isNaN(n.getTime())?"":new Intl.DateTimeFormat("fr-CA",{timeZone:"Asia/Seoul"}).format(n)}function Mo(e,n){if(!e)return"";const t=new Date(e).getTime();if(Number.isNaN(t))return"";const u=Math.max(0,Math.floor((Date.now()-t)/1e3)),r=Math.floor(u/60),i=Math.floor(r/60),o=Math.floor(i/24),a=Math.floor(o/7),c=Math.floor(o/30),s=Math.floor(o/365);return r<1?n("store.time.justNow","\uBC29\uAE08 \uC804"):r<60?n("store.time.minutesAgo",{n:r}):i<24?n("store.time.hoursAgo",{n:i}):o<7?n("store.time.daysAgo",{n:o}):a<5?n("store.time.weeksAgo",{n:a}):o<365?n("store.time.monthsAgo",{n:Math.min(c,11)}):n("store.time.yearsAgo",{n:s})}function $o(e,n={}){const{sep:t=".",pad:u=!0,trailingDot:r=!1,fallback:i="\u2014"}=n;if(!e)return i;const o=le(e instanceof Date?e:String(e));if(!o)return i;const[a,c,s]=o.split("-"),C=u?c:String(Number(c)),l=u?s:String(Number(s));return`${a}${t}${C}${t}${l}${r?".":""}`}function Io(e){const n=e.replace(/\D/g,"").slice(0,11);return n.startsWith("02")?n.length<=2?n:n.length<=6?`${n.slice(0,2)}-${n.slice(2)}`:`${n.slice(0,2)}-${n.slice(2,n.length-4)}-${n.slice(n.length-4)}`:n.length<=3?n:n.length<=7?`${n.slice(0,3)}-${n.slice(3)}`:`${n.slice(0,3)}-${n.slice(3,n.length-4)}-${n.slice(n.length-4)}`}function Po(e){if(e){if(/^\d{4}\.\d{2}\.\d{2}$/.test(e))return e;if(/^\d{8}$/.test(e))return`${e.slice(0,4)}.${e.slice(4,6)}.${e.slice(6,8)}`;if(/^\d{4}-\d{2}-\d{2}$/.test(e))return e.replace(/-/g,".");if(/^\d{4}-\d{2}-\d{2}T/.test(e)){const n=new Date(e);return isNaN(n.getTime())?void 0:le(n).replace(/-/g,".")}}}function vo(e){if(e)return/^\d{4}\.\d{2}\.\d{2}$/.test(e)?e.replace(/\./g,"-"):e}function Go(e,n){if(!e)return"-";const t=/^(\d{1,2}):(\d{2})$/.exec(e.trim());if(!t)return e;const u=Number(t[1]),r=Number(t[2]),i=t[1].padStart(2,"0");return r===0?n("date.timeH",{h:u,hh:i,mm:t[2]}):n("date.timeHM",{h:u,hh:i,m:r,mm:t[2]})}function Fo(e){return(e??0).toLocaleString("ko-KR")}const xo=[{key:"FOOD",label:"\uC74C\uC2DD",icon:"salad",color:"#FF8A65",subs:[{key:"TRKRFD",label:"\uD55C\uAD6D \uC804\uD1B5\uC74C\uC2DD"},{key:"MDKRFD",label:"\uD55C\uAD6D \uD604\uB300\uC74C\uC2DD"},{key:"WRLDFD",label:"\uC138\uACC4\uC758 \uC74C\uC2DD"},{key:"MTRFRT",label:"\uC2DD\uC7AC\uB8CC\uC640 \uACFC\uC77C"},{key:"GEFDKL",label:"\uC74C\uC2DD \uC0C1\uC2DD"}]},{key:"HLTH",label:"\uAC74\uAC15",icon:"heart",color:"#66BB6A",subs:[{key:"HTETHB",label:"\uAC74\uAC15\uD55C \uC2DD\uC2B5\uAD00"},{key:"DISILL",label:"\uBCD1\uACFC \uC9C8\uD658"},{key:"EXCISE",label:"\uC6B4\uB3D9"},{key:"GEHTKL",label:"\uAC74\uAC15\uC0C1\uC2DD"}]},{key:"WETH",label:"\uB0A0\uC528",icon:"sun-medium",color:"#42A5F5",subs:[{key:"GESSKL",label:"\uACC4\uC808\uC0C1\uC2DD"},{key:"SNWRAN",label:"\uB208\uACFC \uBE44"},{key:"WTHFCT",label:"\uC77C\uAE30\uC608\uBCF4"},{key:"GEWTKL",label:"\uB0A0\uC528\uC0C1\uC2DD"}]},{key:"PRSN",label:"\uC778\uBB3C",icon:"user-round",color:"#AB47BC",subs:[{key:"JODYPS",label:"\uC870\uC120\uC2DC\uB300"},{key:"MDKRPS",label:"\uD55C\uAD6D \uADFC\uD604\uB300"},{key:"THKDPS",label:"\uC0BC\uAD6D\uC2DC\uB300"},{key:"WRLART",label:"\uC138\uACC4\uC758 \uC608\uC220\uAC00"},{key:"WRLPSN",label:"\uC138\uACC4\uC758 \uC778\uBB3C"}]},{key:"KRCT",label:"\uD55C\uAD6D\uBB38\uD654",icon:"bow-arrow",color:"#EC407A",subs:[{key:"KRLANG",label:"\uC6B0\uB9AC\uB9D0"},{key:"TRPLCT",label:"\uC804\uD1B5\uB180\uC774"},{key:"HERITG",label:"\uBB38\uD654\uC7AC"},{key:"EVTFES",label:"\uD589\uC0AC\uC640 \uCD95\uC81C"},{key:"GECTKL",label:"\uC0C1\uC2DD"}]},{key:"STRY",label:"\uC774\uC57C\uAE30",icon:"message-circle",color:"#8D6E63",subs:[{key:"FRYTAL",label:"\uB3D9\uD654"},{key:"AMZING",label:"\uC2E0\uAE30\uD55C \uC774\uC57C\uAE30"},{key:"DAYSTR",label:"\uC77C\uC0C1 \uC18D \uC774\uC57C\uAE30"}]},{key:"LOCA",label:"\uC9C0\uC5ED",icon:"map-pin",color:"#26A69A",subs:[{key:"KRLDMK",label:"\uD55C\uAD6D\uC758 \uBA85\uC18C"},{key:"SELNMK",label:"\uC11C\uC6B8\uC758 \uBA85\uC18C"},{key:"WRDTRB",label:"\uC138\uACC4\uC5EC\uD589"},{key:"NAVIGT",label:"\uAE38 \uCC3E\uAE30"}]},{key:"SOAR",label:"\uC0AC\uD68C\uC640 \uC608\uC220",icon:"landmark",color:"#5C6BC0",subs:[{key:"KRSOCI",label:"\uD55C\uAD6D"},{key:"ECONEW",label:"\uACBD\uC81C\uC640 \uB274\uC2A4"},{key:"GENART",label:"\uC608\uC220"},{key:"GELFKL",label:"\uC0DD\uD65C \uC0C1\uC2DD"}]},{key:"NTSC",label:"\uC790\uC5F0\uACFC \uACFC\uD559",icon:"leaf",color:"#9CCC65",subs:[{key:"ANIMAL",label:"\uB3D9\uBB3C"},{key:"PLANTS",label:"\uC2DD\uBB3C"},{key:"ETHPLT",label:"\uC9C0\uAD6C"},{key:"TOLELC",label:"\uB3C4\uAD6C\uC640 \uC804\uC790\uC81C\uD488"},{key:"GESCKL",label:"\uACFC\uD559\uC0C1\uC2DD"}]},{key:"SPRT",label:"\uC2A4\uD3EC\uCE20",icon:"trophy",color:"#FFCA28",subs:[{key:"INVDSP",label:"\uAC1C\uC778\uACBD\uAE30"},{key:"MARART",label:"\uACA9\uD22C\uAE30"},{key:"TEAMSP",label:"\uB2E8\uCCB4\uACBD\uAE30"},{key:"FOOTBL",label:"\uCD95\uAD6C"},{key:"GESPKL",label:"\uC2A4\uD3EC\uCE20 \uC0C1\uC2DD"}]}],Wo=[{key:"LISTEN_IN_NOISE",label:"\uC18C\uC74C \uD558 \uBB38\uC7A5 \uB4E3\uAE30",icon:"party-popper",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828"},{key:"SHORT_STORY",label:"\uC9E7\uC740 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square",desc:"\uC9E7\uC740 \uC774\uC57C\uAE30 + 4\uBB38\uC81C"},{key:"LONG_STORY",label:"\uAE34 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square-text",desc:"\uAE34 \uC774\uC57C\uAE30 \uC2EC\uD654 \uD6C8\uB828"},{key:"ORDERING_SENTENCE",label:"\uBB38\uC7A5 \uC21C\uC11C\uD654 \uD558\uAE30",icon:"align-start-vertical",desc:"\uC21C\uC11C \uBC30\uC5F4 \uD6C8\uB828"}];let nn=null;function Ho(e){nn=e}function Yo(){return nn?.topicTypes??xo}function Ko(){return nn?.trainingTypes??Wo}const tt="ihab_theme",Uo="light";function ut(){try{const e=localStorage.getItem(tt);if(e==="light"||e==="dark"||e==="auto")return e}catch{}return Uo}function ot(e){try{document.documentElement.setAttribute("data-theme",e),localStorage.setItem(tt,e)}catch{}}function Vo(){ot(ut())}const rt="ihab_font_scale",Jo="medium",qo=["medium","large1","large2","large3"];function it(){try{const e=localStorage.getItem(rt);if(qo.includes(e))return e}catch{}return Jo}function at(e){try{document.documentElement.setAttribute("data-font-scale",e),localStorage.setItem(rt,e)}catch{}}function zo(){at(it())}const Ce=[],ge=[],de=[],fe=[],he={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},me={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},Zo={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let tn=null,st=null,Y=null;function ct({counts:e,forceRefresh:n}={}){const t=Object.assign({},Zo,e||{}),u=nt(),r=le(new Date(`${u}T00:00:00+09:00`).getTime()-864e5),i=JSON.stringify(t);if(!n&&st===u&&tn===i&&Y)return Object.assign(he,Y.today),Object.assign(me,Y.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:he,yesterday:me};const o={LISTEN_IN_NOISE:x(Ce,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:x(ge,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:x(de,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:x(fe,Math.max(0,Number(t.ORDERING_SENTENCE)||0))};let a=null;return Y&&tn===i&&Y.yesterday&&Y.yesterday.date===r&&(a=Y.yesterday.selection),a||(a={LISTEN_IN_NOISE:x(Ce,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:x(ge,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:x(de,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:x(fe,Math.max(0,Number(t.ORDERING_SENTENCE)||0))}),Object.assign(he,o),Object.assign(me,a),st=u,tn=i,Y={today:o,yesterday:{date:r,countsKey:i,selection:a}},{today:he,yesterday:me}}function Qo(){return{today:he,yesterday:me}}function Xo(){return{LISTEN_IN_NOISE:Ce,SHORT_STORY:ge,LONG_STORY:de,ORDERING_SENTENCE:fe}}let un=!1,Se=null;async function er(){try{const e=import.meta&&import.meta.env&&import.meta.env.BASE_URL||"/",n=await fetch(`${e}data/allTrainingData.json`);return n.ok?await n.json():null}catch{return null}}async function lt(){if(!un)return Se||(Se=(async()=>{const e=await er();if(!e){Se=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{for(const n of Object.keys(e||{})){const t=e[n]||[];for(const u of t){const r=u,i=String(r.training_type||n),o=String(r.category_main_code||r.category_main||r.category_0||""),a=String(r.category_sub_code||r.category_sub||r.category_1||""),c=Object.assign({},r,{training_type:i,category_0:o,category_1:a});i==="LISTEN_IN_NOISE"?Ce.push(c):i==="SHORT_STORY"?ge.push(c):i==="LONG_STORY"?de.push(c):i==="ORDERING_SENTENCE"&&fe.push(c)}}}catch{Se=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}try{ct()}catch{}un=!0})(),Se)}function nr(){return un}async function tr(e=3e3){const n=lt();return Promise.race([n,new Promise(t=>setTimeout(t,e))])}const ur=[{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."}],or=[{key:"FOOD",label:"\uC74C\uC2DD",icon:"salad",color:"#FF8A65",subs:[{key:"TRKRFD",label:" \uD55C\uAD6D \uC804\uD1B5\uC74C\uC2DD"},{key:"MDKRFD",label:"\uD55C\uAD6D \uD604\uB300\uC74C\uC2DD"},{key:"WRLDFD",label:"\uC138\uACC4\uC758 \uC74C\uC2DD"},{key:"MTRFRT",label:"\uC2DD\uC7AC\uB8CC\uC640 \uACFC\uC77C"},{key:"GEFDKL",label:"\uC74C\uC2DD \uC0C1\uC2DD"}]},{key:"HLTH",label:"\uAC74\uAC15",icon:"heart",color:"#66BB6A",subs:[{key:"HTETHB",label:"\uAC74\uAC15\uD55C \uC2DD\uC2B5\uAD00"},{key:"DISILL",label:"\uBCD1\uACFC \uC9C8\uD658"},{key:"EXCISE",label:"\uC6B4\uB3D9"},{key:"GEHTKL",label:"\uAC74\uC0C1\uC0C1\uC2DD"}]},{key:"WETH",label:"\uB0A0\uC528",icon:"sun-medium",color:"#42A5F5",subs:[{key:"GESSKL",label:"\uACC4\uC808\uC0C1\uC2DD"},{key:"SNWRAN",label:"\uB208\uACFC \uBE44"},{key:"WTHFCT",label:"\uC77C\uAE30\uC608\uBCF4"},{key:"GEWTKL",label:"\uB0A0\uC528\uC0C1\uC2DD"}]},{key:"PRSN",label:"\uC778\uBB3C",icon:"user-round",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#AB47BC",subs:[{key:"JODYPS",label:"\uC870\uC120\uC2DC\uB300"},{key:"MDKRPS",label:"\uD55C\uAD6D \uADFC\uD604\uB300"},{key:"THKDPS",label:"\uC0BC\uAD6D\uC2DC\uB300"},{key:"WRLART",label:"\uC138\uACC4\uC758 \uC608\uC220\uAC00"},{key:"WRLPSN",label:"\uC138\uACC4\uC758 \uC778\uBB3C"}]},{key:"KRCT",label:"\uD55C\uAD6D\uBB38\uD654",icon:"bow-arrow",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#EC407A",subs:[{key:"KRLANG",label:"\uC6B0\uB9AC\uB9D0"},{key:"TRPLCT",label:"\uC804\uD1B5\uB180\uC774"},{key:"HERITG",label:"\uBB38\uD654\uC7AC"},{key:"EVTFES",label:"\uD589\uC0AC\uC640 \uCD95\uC81C"},{key:"GECTKL",label:"\uC0C1\uC2DD"}]},{key:"STRY",label:"\uC774\uC57C\uAE30",icon:"message-circle",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#8D6E63",subs:[{key:"FRYTAL",label:"\uB3D9\uD654"},{key:"AMZING",label:"\uC2E0\uAE30\uD55C \uC774\uC57C\uAE30"},{key:"DAYSTR",label:"\uC77C\uC0C1 \uC18D \uC774\uC57C\uAE30"}]},{key:"LOCA",label:"\uC9C0\uC5ED",icon:"map-pin",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#26A69A",subs:[{key:"KRLDMK",label:"\uD55C\uAD6D\uC758 \uBA85\uC18C"},{key:"SELNMK",label:"\uC11C\uC6B8\uC758 \uBA85\uC18C"},{key:"WRDTRB",label:"\uC138\uACC4\uC5EC\uD589"},{key:"NAVIGT",label:"\uAE38 \uCC3E\uAE30"}]},{key:"SOAR",label:"\uC0AC\uD68C\uC640 \uC608\uC220",icon:"landmark",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#5C6BC0",subs:[{key:"KRSOCI",label:"\uD55C\uAD6D"},{key:"ECONEW",label:"\uACBD\uC81C\uC640 \uB274\uC2A4"},{key:"GENART",label:"\uC608\uC220"},{key:"GELFKL",label:"\uC0DD\uD65C \uC0C1\uC2DD"}]},{key:"NTSC",label:"\uC790\uC5F0\uACFC \uACFC\uD559",icon:"leaf",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#9CCC65",subs:[{key:"ANIMAL",label:"\uB3D9\uBB3C"},{key:"PLANTS",label:"\uC2DD\uBB3C"},{key:"ETHPLT",label:"\uC9C0\uAD6C"},{key:"TOLELC",label:"\uB3C4\uAD6C\uC640 \uC804\uC790\uC81C\uD488"},{key:"GESCKL",label:"\uACFC\uD559\uC0C1\uC2DD"}]},{key:"SPRT",label:"\uC2A4\uD3EC\uCE20",icon:"trophy",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#FFCA28",subs:[{key:"INVDSP",label:"\uAC1C\uC778\uACBD\uAE30"},{key:"MARART",label:"\uACA9\uD22C\uAE30"},{key:"TEAMSP",label:"\uB2E8\uCCB4\uACBD\uAE30"},{key:"FOOTBL",label:"\uCD95\uAD6C"},{key:"GESPKL",label:"\uC2A4\uD3EC\uCE20 \uC0C1\uC2DD"}]}],rr={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};let Me=null,Ct=null,gt=null;function ir(){const e=zn();if(e&&e.entries.length>0){const n=wn();if(Me&&Ct===e&&gt===n)return Me;const t=new Set,u=[];for(const r of e.entries)!r.word||t.has(r.word)||(t.add(r.word),u.push({w:r.word,s:r.syllables,p:n?.[r.word]?[...n[r.word].cho??[],...n[r.word].jung??[],...n[r.word].jong??[]]:[],pron:r.pronunciation||r.word,grade:r.grade}));return Me=u,Ct=e,gt=n,Me}return[]}new Proxy([],{get(e,n){const t=ir(),u=t[n];return typeof u=="function"?u.bind(t):u}});const ar={free:{maxCustomers:0,visitWord:!1,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!1,wordTablePrint:!1,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!1,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:0,crossword:!1,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!1},personal_standard:{maxCustomers:0,visitWord:!1,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!1,wordDataLevel:2,sentenceDataLevel:2,crossword:!0,crosswordMid:!0,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!0},mgr_free:{maxCustomers:5,visitWord:!0,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!1,wordTablePrint:!1,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!1,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:1,crossword:!1,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!1},none:{maxCustomers:0,visitWord:!1,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!1,wordTableSetting:!1,wordTablePrint:!1,addToMyList:!1,addToGroupList:!1,wordSearch:!1,wordSearchPrint:!1,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:0,sentenceDataLevel:0,crossword:!1,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!1},lite_word:{maxCustomers:10,visitWord:!0,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:0,crossword:!0,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!1},lite_sentence:{maxCustomers:10,visitWord:!1,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!1,wordTableSetting:!1,wordTablePrint:!0,addToMyList:!1,addToGroupList:!1,wordSearch:!1,wordSearchPrint:!0,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:0,sentenceDataLevel:1,crossword:!0,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!0},lite:{maxCustomers:10,visitWord:!0,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:1,crossword:!0,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!0},standard:{maxCustomers:30,visitWord:!0,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!1,wordDataLevel:2,sentenceDataLevel:2,crossword:!0,crosswordMid:!0,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!0},pro:{maxCustomers:50,visitWord:!0,visitSentence:!0,homework:!0,customerStats:!0,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!1,wordDataLevel:3,sentenceDataLevel:3,crossword:!0,crosswordMid:!0,crosswordHigh:!0,wordTrainingView:!0,sentenceTrainingView:!0},enterprise:{maxCustomers:1/0,visitWord:!0,visitSentence:!0,homework:!0,customerStats:!0,managerCustomerSplit:!0,managerManagement:!0,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!0,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!0,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!0,wordDataLevel:3,sentenceDataLevel:3,crossword:!0,crosswordMid:!0,crosswordHigh:!0,wordTrainingView:!0,sentenceTrainingView:!0}},sr={none:0,free:1,personal_standard:3,mgr_free:4,lite_word:5,lite_sentence:5,lite:6,standard:7,pro:8,enterprise:9},cr={free:{sentenceTrainingDaily:2,wordTrainingDaily:2,gameDaily:1},personal_standard:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null},mgr_free:{sentenceTrainingDaily:2,wordTrainingDaily:2,gameDaily:1,trainingItemMax:5,customerMax:5,homeworkSendDaily:1},lite:{sentenceTrainingDaily:5,wordTrainingDaily:5,gameDaily:5,trainingItemMax:10,customerMax:10,homeworkSendDaily:10},standard:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null,trainingItemMax:30,customerMax:30,homeworkSendDaily:30},pro:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null,trainingItemMax:null,customerMax:50,homeworkSendDaily:50},enterprise:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null,trainingItemMax:null,customerMax:null,homeworkSendDaily:null}};function lr(e){const n=e.toLowerCase();return n.startsWith("manager_enterprise")?"enterprise":n.startsWith("manager_pro")?"pro":n.startsWith("manager_standard")?"standard":n.startsWith("manager_lite_word")?"lite_word":n.startsWith("manager_lite_sentence")?"lite_sentence":n.startsWith("manager_lite")||n.startsWith("mgr_lite")?"lite":n.startsWith("mgr_standard")?"standard":n.startsWith("mgr_pro")?"pro":n.startsWith("content_")||n.startsWith("speechear_")||n.startsWith("light_")||n==="light"?"personal_standard":"none"}const Cr=5,gr=5;function dr({rank:e,voteCount:n,quota:t=5}){return e<t&&n>0}const fr={selected:"ALREADY_SELECTED",added:"ALREADY_ADDED",rejected:"ALREADY_REJECTED"};export{Fn as CAPABILITY,w as CHOSEONG,N as JONGSEONG,_ as JUNGSEONG,de as LONG_STORIES,Vn as NETWORK_ERROR_MESSAGE,Ce as NOISE_DATAS,fe as ORDER_SETS,ar as PLAN_FEATURES,cr as PLAN_LIMITS,ge as SHORT_STORIES,sr as TIER_RANK,or as TOPIC_TYPES,ur as TRAINING_TYPES,rr as TRAINING_TYPE_I18N_KEY,gr as WORD_SUGGESTION_ACCOUNT_LIMIT,fr as WORD_SUGGESTION_EXISTING_ERROR,Cr as WORD_SUGGESTION_WEEKLY_QUOTA,at as applyFontScale,ot as applyTheme,Zu as buildChangeWholeSyllableProblem,Vu as buildDropCompoundProblem,Uu as buildDropContrast3Problem,Ku as buildDropContrastProblem,Ju as buildDropFinalConsonantProblem,cu as buildMultiPartPosContrast,iu as buildPairIndex,qu as buildRemoveConsonantProblem,zu as buildSyllableMaskIndex,Ft as bulkSetImageExistence,Wu as cardQuestionTitle,fn as checkImageExists,Ht as classifyPairDifficulty,Lt as clearAudioExistsCache,xt as clearImageExistenceCache,au as clearPairIndexCache,H as composeSyllable,ct as computeDailySelection,$t as configureImageResolver,Ao as configureNoiseSettingsStore,Nt as configurePronunciationResolver,Et as configureStorage,pt as configureTTS,Ho as configureTrainingCategories,_o as copyText,Wt as createDecompCache,bo as createTTSUrlResolver,vo as dateToDb,uo as downloadCsvText,Tt as downloadSound,tr as ensureTrainingDataLoaded,to as escapeCsvField,sn as fileExists,pn as filterContrastCandidates,Mn as finalToPhoneme,hn as firstChoseongOf,Fo as formatCount,Lo as formatDateKo,jo as formatDateLocale,No as formatDateLongKo,ko as formatDateLongLocale,Ro as formatDatetimeKo,Io as formatPhone,Mo as formatRelativeTime,Go as formatTimeHM,$o as formatYmd,rn as getAssetBaseUrl,Qo as getDailySelection,Ot as getElementAnalyser,Qu as getErrorMessage,Gt as getImageExistenceStats,Pt as getImageExistsCached,dn as getImageResolver,wt as getNoiseBaseUrl,wn as getPairIndex,lr as getPlanTier,jt as getPronunciationResolver,it as getSavedFontScale,ut as getSavedTheme,cn as getSignedOrPublicUrl,bt as getTTSFallbackUrlResolver,Bt as getTTSUrlResolver,nt as getTodayKst,Yo as getTopicTypes,Xo as getTrainingPools,Ko as getTrainingTypes,zn as getWordPool,Mu as hasQuestionWordConstraint,k as hasSel,We as hasStructureContrast,zo as initFontScale,Vo as initTheme,Sn as isAllChoseong,Iu as isManualOnlyType,Jn as isNetworkErrorMessage,yn as isSyllablePattern,dr as isThisWeekPick,nr as isTrainingDataLoaded,$u as isValidQuestionWord,Zn as itemCorrectness,Hu as jamoToNamesForSpeech,Eo as loadGameLeaderboard,yo as loadMyGameRanks,To as loadNoiseSettings,lt as loadTrainingData,Co as logCrossword,co as logTrainingCompletion,ao as logTrainingTime,z as matchSyllables,Yt as matchesChoseongSearch,An as matchesSyllablePattern,we as matchesWordQuery,Kn as mergeQuestionText,su as minimalPairDistractors,Po as normalizeDate,Bo as officialSoundPath,no as parseSortValue,h as parseSyllable,Xt as patternToComposition,vu as phonemePartsOf,Gn as pickEuRo,In as pickEulReul,Pn as pickEunNeun,$n as pickIga,vn as pickWaGwa,vt as prewarmImageCache,Re as primarySelPart,Mt as readLevel,ju as reorderArray,Dt as resolveAssetUrl,At as resolveSoundPath,Rt as resumeAudioMeter,x as sample,wo as saveNoiseSettings,tu as searchAndRankWords,St as setAssetBaseUrl,lo as setCrosswordLogger,So as setGameLeaderboardLoader,mo as setGameRanksLoader,ho as setGameScoreSubmitter,so as setTrainingCompletionLogger,io as setTrainingTimeLogger,ro as setWordPool,j as shuffle,eo as sortToValue,Ze as soundOf,dt as speak,ft as stopSpeaking,Do as submitGameScore,J as syllMatchesComp,Z as syllableContrasts,Jt as syllableLength,Un as syllablePron,po as toBase64UrlSafe,mn as toChoseong,go as toItemResults,Oo as toKstHm,le as toKstYmd,Tu as toStandardPronunciation,Oe as toStorageName,Xu as toUserErrorMessage,nu as validateSyllableSearchInput,Nu as withEuRo,bu as withEulReul,_u as withEunNeun,Bu as withIga,Lu as withWaGwa,Kt as wordContainsChoseong,Vt as wordContainsJongseong,Ut as wordContainsJungseong,qt as wordHasNoCoda,Zt as wordHasSyllableMatching,fo as wrongItems};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ihabdevteam/core",
3
- "version": "0.8.1",
3
+ "version": "0.8.3",
4
4
  "private": false,
5
5
  "main": "dist/ihabdevteam-core.cjs.js",
6
6
  "module": "dist/ihabdevteam-core.esm.js",
@@ -20,6 +20,7 @@
20
20
  }
21
21
  },
22
22
  "exports": {
23
+ "./package.json": "./package.json",
23
24
  ".": {
24
25
  "types": "./dist/ihabdevteam-core.d.ts",
25
26
  "import": "./dist/packages/core/src/index.js",
@@ -75,6 +76,7 @@
75
76
  },
76
77
  "./i18n": {
77
78
  "types": "./dist/packages/core/src/i18n/index.d.ts",
79
+ "require": "./dist/i18n.cjs.js",
78
80
  "default": "./dist/packages/core/src/i18n/index.js"
79
81
  },
80
82
  "./i18n/locales/*": "./dist/packages/core/src/i18n/locales/*",