@ihabdevteam/core 0.149.0 → 0.151.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +60 -0
- package/dist/components.cjs.js +199 -186
- package/dist/components.esm.css +5 -5
- package/dist/hooks.cjs.js +5 -1
- package/dist/i18n.cjs.js +3 -3
- package/dist/ihabdevteam-core-tokens.css +1 -1
- package/dist/ihabdevteam-core.cjs.js +200 -187
- package/dist/ihabdevteam-core.css +1 -1
- package/dist/ihabdevteam-core.d.ts +407 -69
- package/dist/packages/core/src/components/Accordion.d.ts +6 -0
- package/dist/packages/core/src/components/Accordion.js +5 -2
- package/dist/packages/core/src/components/Alert.d.ts +7 -1
- package/dist/packages/core/src/components/Alert.js +12 -3
- package/dist/packages/core/src/components/BarChart.js +7 -2
- package/dist/packages/core/src/components/Board.d.ts +5 -2
- package/dist/packages/core/src/components/Board.js +9 -3
- package/dist/packages/core/src/components/BottomNav.js +5 -4
- package/dist/packages/core/src/components/Breadcrumb.css +9 -0
- package/dist/packages/core/src/components/Breadcrumb.d.ts +12 -1
- package/dist/packages/core/src/components/Breadcrumb.js +8 -2
- package/dist/packages/core/src/components/BulkBar.css +2 -0
- package/dist/packages/core/src/components/BulkBar.js +21 -2
- package/dist/packages/core/src/components/Button.d.ts +12 -2
- package/dist/packages/core/src/components/Button.js +70 -13
- package/dist/packages/core/src/components/Calendar.d.ts +6 -1
- package/dist/packages/core/src/components/Calendar.js +3 -3
- package/dist/packages/core/src/components/DatePicker.d.ts +7 -1
- package/dist/packages/core/src/components/DatePicker.js +25 -15
- package/dist/packages/core/src/components/Dropdown.d.ts +1 -0
- package/dist/packages/core/src/components/Dropdown.js +7 -5
- package/dist/packages/core/src/components/Effect/EffectPartyPopperHost.d.ts +12 -1
- package/dist/packages/core/src/components/Effect/EffectPartyPopperHost.js +25 -8
- package/dist/packages/core/src/components/EmptyState.d.ts +5 -1
- package/dist/packages/core/src/components/EmptyState.js +4 -1
- package/dist/packages/core/src/components/ErrorState.d.ts +5 -2
- package/dist/packages/core/src/components/ErrorState.js +3 -1
- package/dist/packages/core/src/components/FileUpload.d.ts +9 -1
- package/dist/packages/core/src/components/FileUpload.js +8 -2
- package/dist/packages/core/src/components/FilterSectionInfo.js +14 -2
- package/dist/packages/core/src/components/Header.js +8 -5
- package/dist/packages/core/src/components/HearingDeviceInfo.js +2 -1
- package/dist/packages/core/src/components/Icon.d.ts +2 -1
- package/dist/packages/core/src/components/Icon.js +4 -1
- package/dist/packages/core/src/components/Loader.css +28 -0
- package/dist/packages/core/src/components/Loader.d.ts +5 -1
- package/dist/packages/core/src/components/Loader.js +4 -2
- package/dist/packages/core/src/components/NoticeBox.d.ts +1 -1
- package/dist/packages/core/src/components/NoticeBox.js +15 -6
- package/dist/packages/core/src/components/PanelRow.js +2 -1
- package/dist/packages/core/src/components/PassCard/PassCard.d.ts +8 -2
- package/dist/packages/core/src/components/PassCard/PassCard.js +25 -10
- package/dist/packages/core/src/components/PassCard/passCardProduct.d.ts +1 -1
- package/dist/packages/core/src/components/PassCard/passCardProduct.js +11 -2
- package/dist/packages/core/src/components/Popup/ConfirmPopup.d.ts +11 -2
- package/dist/packages/core/src/components/Popup/ConfirmPopup.js +18 -3
- package/dist/packages/core/src/components/Popup/DeviceSideTable.js +10 -8
- package/dist/packages/core/src/components/Popup/ListPopup.js +6 -6
- package/dist/packages/core/src/components/Popup/LoadTablePopup.css +7 -0
- package/dist/packages/core/src/components/Popup/LoadTablePopup.js +27 -5
- package/dist/packages/core/src/components/Popup/Popup.d.ts +8 -0
- package/dist/packages/core/src/components/Popup/Popup.js +6 -3
- package/dist/packages/core/src/components/Popup/SaveTablePopup.d.ts +5 -1
- package/dist/packages/core/src/components/Popup/TrainingResultPopup.css +3 -0
- package/dist/packages/core/src/components/Popup/TrainingResultPopup.d.ts +5 -0
- package/dist/packages/core/src/components/Popup/TrainingResultPopup.js +10 -4
- package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.css +9 -0
- package/dist/packages/core/src/components/ProgressIndicator.css +5 -0
- package/dist/packages/core/src/components/ProgressIndicator.d.ts +3 -1
- package/dist/packages/core/src/components/ProgressIndicator.js +5 -3
- package/dist/packages/core/src/components/PromoBannerBg/promoBannerBg.d.ts +4 -1
- package/dist/packages/core/src/components/PromoBannerBg/promoBannerBg.js +27 -15
- package/dist/packages/core/src/components/Rating.d.ts +8 -2
- package/dist/packages/core/src/components/Rating.js +22 -8
- package/dist/packages/core/src/components/Report/ReportDocument.d.ts +10 -7
- package/dist/packages/core/src/components/Report/ReportDocument.js +39 -13
- package/dist/packages/core/src/components/RingChart.d.ts +1 -1
- package/dist/packages/core/src/components/RingChart.js +1 -1
- package/dist/packages/core/src/components/SegmentedControl.d.ts +4 -0
- package/dist/packages/core/src/components/SegmentedControl.js +9 -1
- package/dist/packages/core/src/components/ShortcutBadge.css +16 -1
- package/dist/packages/core/src/components/ShortcutBadge.d.ts +1 -0
- package/dist/packages/core/src/components/SideNav.js +8 -2
- package/dist/packages/core/src/components/SummaryStrip.d.ts +1 -1
- package/dist/packages/core/src/components/SummaryStrip.js +2 -2
- package/dist/packages/core/src/components/Table.d.ts +1 -1
- package/dist/packages/core/src/components/Table.js +4 -1
- package/dist/packages/core/src/components/Tabs.d.ts +1 -0
- package/dist/packages/core/src/components/Tabs.js +4 -1
- package/dist/packages/core/src/components/TextField.css +5 -6
- package/dist/packages/core/src/components/TextField.js +46 -3
- package/dist/packages/core/src/components/Toast.js +16 -2
- package/dist/packages/core/src/components/Tooltip/Tooltip.css +3 -1
- package/dist/packages/core/src/components/Tooltip/Tooltip.js +5 -2
- package/dist/packages/core/src/components/Tooltip/tooltipConstants.d.ts +10 -2
- package/dist/packages/core/src/components/Tooltip/tooltipConstants.js +10 -2
- package/dist/packages/core/src/components/TopBanner.d.ts +1 -1
- package/dist/packages/core/src/components/TopBanner.js +66 -8
- package/dist/packages/core/src/components/Training/AudioPlayerWaveForm.d.ts +1 -0
- package/dist/packages/core/src/components/Training/AudioPlayerWaveForm.js +65 -15
- package/dist/packages/core/src/components/Training/NoisePlayerContext.d.ts +3 -2
- package/dist/packages/core/src/components/Training/NoisePlayerContext.js +10 -4
- package/dist/packages/core/src/components/Training/TrainingBlockButton.css +7 -0
- package/dist/packages/core/src/components/Training/TrainingBlockButton.js +3 -1
- package/dist/packages/core/src/components/Training/TrainingPagePopup.d.ts +18 -5
- package/dist/packages/core/src/components/Training/TrainingPagePopup.js +93 -28
- package/dist/packages/core/src/components/Training/TrainingPagePopupBottom.d.ts +1 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopupBottom.js +16 -3
- package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.js +29 -11
- package/dist/packages/core/src/components/Training/TrainingStepCard.js +19 -3
- package/dist/packages/core/src/components/Training/TrainingStepTitle.js +15 -1
- package/dist/packages/core/src/components/Training/TrainingWordCard.css +16 -0
- package/dist/packages/core/src/components/Training/TrainingWordCard.d.ts +6 -0
- package/dist/packages/core/src/components/Training/TrainingWordCard.js +7 -2
- package/dist/packages/core/src/components/Training/trainingBlockButtonTypes.d.ts +2 -2
- package/dist/packages/core/src/components/Training/trainingMissStats.d.ts +10 -0
- package/dist/packages/core/src/components/Training/trainingMissStats.js +19 -1
- package/dist/packages/core/src/components/Training/useFloatingFocus.d.ts +13 -0
- package/dist/packages/core/src/components/Training/useFloatingFocus.js +59 -0
- package/dist/packages/core/src/components/Training/useNoiseFade.js +20 -11
- package/dist/packages/core/src/components/Training/useProgressTicker.d.ts +0 -18
- package/dist/packages/core/src/components/Training/useProgressTicker.js +59 -14
- package/dist/packages/core/src/components/Training/useTTSPlayback.d.ts +1 -1
- package/dist/packages/core/src/components/Training/useTTSPlayback.js +56 -25
- package/dist/packages/core/src/components/Training/useWaveReady.d.ts +4 -1
- package/dist/packages/core/src/components/Training/useWaveReady.js +17 -8
- package/dist/packages/core/src/components/UpdateAlert.css +4 -2
- package/dist/packages/core/src/components/UpdateAlert.d.ts +3 -1
- package/dist/packages/core/src/components/UpdateAlert.js +21 -1
- package/dist/packages/core/src/components/Word/PhonemeSelectBlock.d.ts +2 -0
- package/dist/packages/core/src/components/Word/PhonemeSelectBlock.js +12 -4
- package/dist/packages/core/src/components/Word/WordSearchResultBlock.d.ts +6 -0
- package/dist/packages/core/src/components/Word/WordSearchResultBlock.js +26 -13
- package/dist/packages/core/src/components/Word/WordTableBlock.js +24 -21
- package/dist/packages/core/src/components/Word/WordTableThumbnail.js +1 -1
- package/dist/packages/core/src/components/Word/useWordTableDisplaySettings.js +7 -10
- package/dist/packages/core/src/components/Word/useWordTablePrint.d.ts +1 -1
- package/dist/packages/core/src/components/Word/useWordTablePrint.js +9 -3
- package/dist/packages/core/src/components/Word/wordScoreStats.d.ts +14 -1
- package/dist/packages/core/src/components/Word/wordScoreStats.js +7 -3
- package/dist/packages/core/src/components/Word/wordTablePrint.js +15 -3
- package/dist/packages/core/src/components/Word/wordTableReview.d.ts +58 -1
- package/dist/packages/core/src/components/Word/wordTableReview.js +75 -17
- package/dist/packages/core/src/components/Word/wordTableSettings.d.ts +9 -0
- package/dist/packages/core/src/components/Word/wordTableSettings.js +11 -0
- package/dist/packages/core/src/components/WordTable.css +10 -0
- package/dist/packages/core/src/components/WordTable.js +39 -26
- package/dist/packages/core/src/components/barChartTypes.d.ts +2 -2
- package/dist/packages/core/src/components/buttonTypes.d.ts +8 -0
- package/dist/packages/core/src/components/updateAlertStack.d.ts +2 -0
- package/dist/packages/core/src/components/updateAlertStack.js +68 -0
- package/dist/packages/core/src/components/useCalendarMonth.d.ts +4 -1
- package/dist/packages/core/src/components/useCalendarMonth.js +6 -3
- package/dist/packages/core/src/components/useComboboxSuggestions.d.ts +7 -0
- package/dist/packages/core/src/components/useComboboxSuggestions.js +21 -2
- package/dist/packages/core/src/components/wordTableLayout.d.ts +4 -0
- package/dist/packages/core/src/components/wordTableLayout.js +6 -0
- package/dist/packages/core/src/components.d.ts +2 -1
- package/dist/packages/core/src/components.js +1 -1
- package/dist/packages/core/src/hooks/bodyScrollLock.js +8 -2
- package/dist/packages/core/src/hooks/focusReturn.d.ts +12 -0
- package/dist/packages/core/src/hooks/focusReturn.js +49 -0
- package/dist/packages/core/src/hooks/touchToggle.d.ts +22 -0
- package/dist/packages/core/src/hooks/touchToggle.js +114 -0
- package/dist/packages/core/src/hooks/useAnchoredMenu.d.ts +12 -3
- package/dist/packages/core/src/hooks/useAnchoredMenu.js +37 -3
- package/dist/packages/core/src/hooks/useDailyTrainingSelection.d.ts +4 -2
- package/dist/packages/core/src/hooks/useDailyTrainingSelection.js +23 -11
- package/dist/packages/core/src/hooks/useIcon.js +29 -5
- package/dist/packages/core/src/hooks/useLucideIcon.d.ts +4 -0
- package/dist/packages/core/src/hooks/useLucideIcon.js +4 -0
- package/dist/packages/core/src/hooks/usePendingPress.d.ts +9 -0
- package/dist/packages/core/src/hooks/usePendingPress.js +26 -0
- package/dist/packages/core/src/hooks/usePrefersReducedMotion.d.ts +15 -0
- package/dist/packages/core/src/hooks/usePrefersReducedMotion.js +26 -0
- package/dist/packages/core/src/hooks/useRelativeDay.d.ts +2 -2
- package/dist/packages/core/src/hooks/useRelativeDay.js +12 -5
- package/dist/packages/core/src/hooks/useTablePaging.d.ts +27 -2
- package/dist/packages/core/src/hooks/useTablePaging.js +37 -5
- package/dist/packages/core/src/hooks/useWordAttributeFilter.d.ts +7 -0
- package/dist/packages/core/src/hooks/useWordAttributeFilter.js +25 -0
- package/dist/packages/core/src/i18n/index.js +9 -1
- package/dist/packages/core/src/i18n/locales/en.json +24 -2
- package/dist/packages/core/src/i18n/locales/ko.json +24 -2
- package/dist/packages/core/src/tokens.css +5 -0
- package/dist/packages/core/src/types/wordSearch.d.ts +12 -0
- package/dist/packages/core/src/utils/csv.d.ts +7 -2
- package/dist/packages/core/src/utils/csv.js +12 -5
- package/dist/packages/core/src/utils/dailySelectionUtils.js +44 -14
- package/dist/packages/core/src/utils/date.d.ts +8 -0
- package/dist/packages/core/src/utils/date.js +44 -10
- package/dist/packages/core/src/utils/format.d.ts +1 -1
- package/dist/packages/core/src/utils/format.js +6 -7
- package/dist/packages/core/src/utils/noiseSettingsStore.d.ts +7 -3
- package/dist/packages/core/src/utils/phonemeConvert.d.ts +9 -0
- package/dist/packages/core/src/utils/phonemeConvert.js +11 -0
- package/dist/packages/core/src/utils/phonemePairSearch.d.ts +7 -1
- package/dist/packages/core/src/utils/phonemePairSearch.js +45 -21
- package/dist/packages/core/src/utils/safeHref.d.ts +8 -0
- package/dist/packages/core/src/utils/safeHref.js +24 -0
- package/dist/packages/core/src/utils/savedWordTables.d.ts +19 -3
- package/dist/packages/core/src/utils/savedWordTables.js +27 -19
- package/dist/packages/core/src/utils/textSort.d.ts +9 -0
- package/dist/packages/core/src/utils/textSort.js +37 -1
- package/dist/packages/core/src/utils/wordAttributeFilterCodes.d.ts +31 -0
- package/dist/packages/core/src/utils/wordAttributeFilterCodes.js +163 -0
- package/dist/packages/core/src/utils/wordContrast.d.ts +4 -2
- package/dist/packages/core/src/utils/wordContrast.js +8 -2
- package/dist/packages/core/src/utils/wordTrainingGenerators.d.ts +5 -2
- package/dist/packages/core/src/utils/wordTrainingGenerators.js +52 -2
- package/dist/packages/core/src/utils/wordTrainingPool.js +2 -2
- package/dist/packages/core/src/utils/wordTrainingRuntime.js +15 -7
- package/dist/packages/core/src/utils/wordTrainingRuntimeTypes.d.ts +1 -1
- package/dist/packages/core/src/utils/wordTrainingRuntimeTypes.js +5 -4
- package/dist/packages/core/src/utils/wornDate.d.ts +12 -0
- package/dist/packages/core/src/utils/wornDate.js +15 -0
- package/dist/packages/core/src/version.d.ts +1 -1
- package/dist/packages/core/src/version.js +1 -1
- package/dist/utils.cjs.js +2 -2
- package/package.json +1 -1
package/dist/hooks.cjs.js
CHANGED
|
@@ -1 +1,5 @@
|
|
|
1
|
-
"use strict";var i=require("react"),Ce=require("react-i18next"),zu=require("i18next"),pu=typeof document<"u"?document.currentScript:null;function dn(e){var u=Object.create(null);return e&&Object.keys(e).forEach(function(t){if(t!=="default"){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(u,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}}),u.default=e,Object.freeze(u)}var Ju=dn(i);function fn({storageKey:e="fontScale",baseFont:u=20,minScale:t=.8,maxScale:n=1.4,step:o=.1,lineHeightRatio:r=1.4}={}){const l=E=>Math.max(t,Math.min(n,Number(E))),s=E=>{try{const B=localStorage.getItem(E),R=B?Number(B):1;return Number.isFinite(R)?l(R):l(1)}catch{return l(1)}},[a,d]=i.useState(()=>s(e)),[g,c]=i.useState(e);g!==e&&(c(e),d(s(e))),i.useEffect(()=>{try{localStorage.setItem(e,String(a))}catch{}},[e,a]);const C=E=>{d(typeof E=="function"?B=>l(E(B)):l(E))},h=()=>C(E=>+(E+o).toFixed(6)),f=()=>C(E=>+(E-o).toFixed(6)),w=a<n-Number.EPSILON,y=a>t+Number.EPSILON,m=Math.round(u*a),S=Math.round(m*r);return{scale:a,setScale:C,increase:h,decrease:f,canIncrease:w,canDecrease:y,fontSize:m,lineHeight:S}}const Qu=i.createContext(null);function gn(e){return/max-width:\s*7[0-9][0-9]px/.test(e)}const Xu=e=>typeof window>"u"||!window.matchMedia?!1:window.matchMedia(e).matches;function hn(e){const u=i.useCallback(t=>{if(typeof window>"u"||!window.matchMedia)return()=>{};const n=window.matchMedia(e);return n.addEventListener?n.addEventListener("change",t):n.addListener&&n.addListener(t),()=>{n.removeEventListener?n.removeEventListener("change",t):n.removeListener&&n.removeListener(t)}},[e]);return Ju.useSyncExternalStore(u,()=>Xu(e),()=>!1)}function mn(e){const[u,t]=i.useState(Xu(e));return i.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;const n=window.matchMedia(e),o=l=>t(l.matches),r=n;return r.addEventListener?r.addEventListener("change",o):r.addListener&&r.addListener(o),t(n.matches),()=>{r.removeEventListener?r.removeEventListener("change",o):r.removeListener&&r.removeListener(o)}},[e]),u}const pn=typeof Ju.useSyncExternalStore=="function"?hn:mn;function Sn(e){const u=i.useContext(Qu),t=pn(e);return u&&typeof u.mobile=="boolean"&&gn(e)?u.mobile:t}function Zu(e){const u=i.useRef(e);return i.useEffect(()=>{u.current=e}),u}function et(e,u){const t=Zu(u);i.useEffect(()=>{const n=()=>t.current();try{window.addEventListener(e,n)}catch{}return()=>{try{window.removeEventListener(e,n)}catch{}}},[e,t])}const Su=" \xB7 ",ut=(()=>{if(typeof document>"u")return"";const e=document.title;return e.includes(Su)?e.split(Su).pop()??e:e})(),tt=i.createContext(!1),pe=[];let nt=null;function yn(e){const u=i.useContext(tt);i.useEffect(()=>{if(u||typeof e!="string"||!e)return;pe.length===0&&(nt=document.title);const t={text:ut?`${e}${Su}${ut}`:e};return pe.push(t),document.title=t.text,()=>{const n=pe.lastIndexOf(t);n>=0&&pe.splice(n,1),document.title=pe.length?pe[pe.length-1].text:nt??document.title}},[e,u])}function En(){const{t:e}=Ce.useTranslation();return i.useCallback(u=>{if(!u)return"";const t=new Date(u).getTime();if(Number.isNaN(t))return"";const n=Math.floor((Date.now()-t)/864e5);return n<=0?e("myHomework.relativeDay.today","\uC624\uB298"):n===1?e("myHomework.relativeDay.yesterday","\uC5B4\uC81C"):e("myHomework.relativeDay.daysAgo",{n})},[e])}const wn=()=>{const e="\uC54C \uC218 \uC5C6\uB294 \uC624\uB958",u=typeof zu?.t=="function"?zu.t("common.unknownError",{defaultValue:e}):void 0;return typeof u=="string"&&u?u:e};function Bn(e,u){if(u===void 0&&(u=wn()),e instanceof Error)return e.message||u;if(typeof e=="string")return e||u;if(e&&typeof e=="object"){const t=e;for(const n of[t.message,t.error_description,t.error])if(typeof n=="string"&&n)return n}return u}function bn(e){const{t:u}=Ce.useTranslation(),[t,n]=i.useState({current:"",next:"",confirm:""}),[o,r]=i.useState(null),[l,s]=i.useState(!1),a=i.useRef(null),d=i.useRef(!1);i.useEffect(()=>()=>{a.current!==null&&clearTimeout(a.current)},[]);const g=i.useCallback(()=>{n({current:"",next:"",confirm:""}),r(null)},[]),c=i.useCallback(async()=>{if(d.current)return;if(!t.current){r({type:"error",text:u("account.security.password.currentRequired","\uD604\uC7AC \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694.")});return}if(!t.next){r({type:"error",text:u("account.security.password.newRequired","\uC0C8 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694.")});return}if(t.next!==t.confirm){r({type:"error",text:u("account.security.password.mismatch","\uC0C8 \uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.")});return}s(!0),d.current=!0;let C;try{C=e?await e(t.current,t.next):null}catch(h){C=Bn(h)}finally{d.current=!1,s(!1)}if(C){r({type:"error",text:C});return}r({type:"success",text:u("account.security.password.changed","\uBE44\uBC00\uBC88\uD638\uAC00 \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4.")}),n({current:"",next:"",confirm:""}),a.current!==null&&clearTimeout(a.current),a.current=setTimeout(()=>r(null),1500)},[t,e,u]);return{pw:t,setPw:n,pwMsg:o,setPwMsg:r,pwLoading:l,handleChangePw:c,reset:g}}const Q=["\u3131","\u3132","\u3134","\u3137","\u3138","\u3139","\u3141","\u3142","\u3143","\u3145","\u3146","\u3147","\u3148","\u3149","\u314A","\u314B","\u314C","\u314D","\u314E"],ne=["\u314F","\u3150","\u3151","\u3152","\u3153","\u3154","\u3155","\u3156","\u3157","\u3158","\u3159","\u315A","\u315B","\u315C","\u315D","\u315E","\u315F","\u3160","\u3161","\u3162","\u3163"],te=["","\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 u=e.charCodeAt(0)-44032;return u<0||u>=11172?null:{cho:Math.floor(u/588),jung:Math.floor(u%588/28),jong:u%28}}function An(){const e=new Map;return u=>{let t=e.get(u);return t||(t=[...u].map(n=>H(n)),e.set(u,t)),t}}function de(e,u,t=0){return String.fromCharCode(44032+(e*21+u)*28+t)}function _n(e,u){if(!e||!u||e===u||e.length!==u.length)return"random";let t=0,n=null;for(let o=0;o<e.length;o++){const r=H(e[o]),l=H(u[o]);if(!r||!l)return"random";if(r.cho===l.cho&&r.jung===l.jung&&r.jong===l.jong)continue;t++;const s=r.cho!==l.cho,a=r.jung!==l.jung,d=r.jong!==l.jong;(s?1:0)+(a?1:0)+(d?1:0)>1?n="multi":s?n="cho":a?n="jung":n="jong"}return t!==1?"random":n==="cho"?"cho":n==="jung"?"jung":n==="jong"?"jong":"random"}const je={3:["\u3131","\u3145"],5:["\u3134","\u3148"],6:["\u3134","\u314E"],9:["\u3139","\u3131"],10:["\u3139","\u3141"],11:["\u3139","\u3142"],12:["\u3139","\u3145"],13:["\u3139","\u314C"],14:["\u3139","\u314D"],15:["\u3139","\u314E"],18:["\u3142","\u3145"]};Object.fromEntries(Object.entries(je).map(([e,u])=>[u.join(""),te[Number(e)]]));function Dn(e,u){if(!e||!u)return!1;for(const t of e){const n=H(t);if(n){if(Q[n.cho]===u)return!0;if(n.jong>0){if(te[n.jong]===u)return!0;const o=je[n.jong];if(o&&o.includes(u))return!0}}}return!1}function Te(e){if(!e)return 0;let u=0;for(const t of e)H(t)&&u++;return u}function On(e){if(!e)return!1;let u=!1;for(const t of e){const n=H(t);if(n&&(u=!0,n.jong>0))return!1}return u}function Nn(e,u){if(e.jong<=0)return!1;if(u.includes(te[e.jong]))return!0;const t=je[e.jong];return!!t&&t.some(n=>u.includes(n))}function jn(e,u,t){if(!e)return!1;const n=[...e],o=r=>{const l=H(n[r]);if(!l||u.cho&&!u.cho.includes(Q[l.cho])||u.jung&&!u.jung.includes(ne[l.jung]))return!1;if(u.jongNone){if(l.jong>0)return!1}else if(u.jong&&!Nn(l,u.jong))return!1;return!0};if(t==="head")return o(0);if(t==="tail")return o(n.length-1);if(t==="mid"){for(let r=1;r<n.length-1;r++)if(o(r))return!0;return!1}for(let r=0;r<n.length;r++)if(o(r))return!0;return!1}const Tn={cho:Q.length,jung:ne.length,jong:te.length};function In(e,u,t,n,o=1/0){if(!e||t<1)return[];const r=[...e].map(c=>H(c));if(r.some(c=>!c))return[];const l=r,s=l.length;if(t>s)return[];const a=Tn[u],d=new Set,g=[];(function c(C,h){if(h.length===t){g.push([...h]);return}for(let f=C;f<s;f++)h.push(f),c(f+1,h),h.pop()})(0,[]);for(const c of g)if((function C(h,f){if(d.size>=o)return;if(h===c.length){const m=f.map(S=>de(S.cho,S.jung,S.jong)).join("");m!==e&&n.has(m)&&d.add(m);return}const w=c[h],y=l[w][u];for(let m=0;m<a;m++){if(m===y)continue;const S=f.slice();if(S[w]={...f[w],[u]:m},C(h+1,S),d.size>=o)return}})(0,l),d.size>=o)break;return[...d]}function Mn(e,u){if(!e||!u||e.length!==u.length)return-1;let t=0;for(let n=0;n<e.length;n++){const o=H(e[n]),r=H(u[n]);if(!o||!r)return-1;o.cho!==r.cho&&t++,o.jung!==r.jung&&t++,o.jong!==r.jong&&t++}return t}const ot="word_pair_index_v2",rt="word_pair_index_sig_v2";let Ie=null;function Rn(){try{if(typeof localStorage>"u")return null;const e=localStorage.getItem(ot),u=localStorage.getItem(rt);return!e||!u?null:{index:JSON.parse(e),sig:u}}catch{return null}}function Me(){if(Ie)return Ie;const e=Rn();return e?(Ie=e.index,e.sig,Ie):null}function Ln(){Ie=null;try{typeof localStorage<"u"&&(localStorage.removeItem(ot),localStorage.removeItem(rt))}catch{}}const lt="word_image_existence_map_v1";let Ae=null,Re=0,st=-1,Le=null,at=-1,it=new Set;function ct(){if(Ae)return Ae;try{const e=typeof localStorage<"u"?localStorage.getItem(lt):null,u=e?JSON.parse(e):null;Ae=u&&typeof u=="object"&&!Array.isArray(u)?u:{}}catch{Ae={}}return Ae}function Ct(){const e=ct();if(st===Re)return Le?{...Le}:null;const u=Object.values(e);return Le=u.length===0?null:{total:u.length,exists:u.filter(Boolean).length},st=Re,Le?{...Le}:null}function vn(){const e=ct();if(at===Re)return it;const u=new Set;for(const t in e)e[t]===!0&&t.endsWith("_1")&&u.add(t.slice(0,-2));return it=u,at=Re,u}function xn(){Ae={},Re++;try{typeof localStorage<"u"&&localStorage.removeItem(lt)}catch{}}const dt=[{id:"wordData",labelKey:"settings.cache.group.wordData.label",subKey:"settings.cache.group.wordData.sub",keys:["word_data_cache","word_data_version"]},{id:"pairIndex",labelKey:"settings.cache.group.pairIndex.label",subKey:"settings.cache.group.pairIndex.sub",keys:["word_pair_index_v2","word_pair_index_sig_v2"]},{id:"imageCache",labelKey:"settings.cache.group.imageCache.label",subKey:"settings.cache.group.imageCache.sub",keys:["word_image_existence_map_v1"]}];function ft(e){return e.reduce((u,t)=>{try{const n=localStorage.getItem(t);return u+(n?new Blob([n]).size:0)}catch{return u}},0)}function Pn(e){return e===0?"0 B":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(2)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function kn(e){const{t:u}=Ce.useTranslation(),[t,n]=i.useState({}),[o,r]=i.useState(null),[l,s]=i.useState(null),[a,d]=i.useState(null),g=i.useCallback(()=>{const C={};dt.forEach(h=>{C[h.id]=ft([...h.keys])}),n(C),typeof navigator<"u"&&navigator.storage?.estimate&&navigator.storage.estimate().then(h=>{d({usage:h.usage??0,quota:h.quota??0})}).catch(()=>{})},[]);i.useEffect(()=>{g()},[g]);const c=i.useCallback(async C=>{r(C);try{C==="wordData"?(localStorage.removeItem("word_data_cache"),localStorage.removeItem("word_data_version")):C==="pairIndex"?Ln():C==="imageCache"&&xn(),g(),e?.(u("settings.cache.cleared","\uCE90\uC2DC\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4."))}finally{r(null)}},[g,e,u]);return{cacheSizes:t,clearingId:o,confirmCacheId:l,setConfirmCacheId:s,storageEstimate:a,refreshCacheSizes:g,handleClearCache:c}}function Fn(e){const[u,t]=i.useState(null),[n,o]=i.useState(null),r=i.useCallback(()=>{const l=Me();if(l){const a=Object.values(l),d=a.filter(g=>g.cho.length+g.jung.length+g.jong.length>0).length;t({matched:d,total:a.length})}else t(null);const s=Ct();o(s?{exists:s.exists,total:s.total}:null)},[]);return i.useEffect(()=>{r();const l=setTimeout(r,1e3);return()=>clearTimeout(l)},[e?.length,r]),{pairStats:u,imgStats:n,setPairStats:t,setImgStats:o,refreshStats:r}}function Se(e,u){if(e===u)return!0;const t=e?.id,n=u?.id;return t!=null&&t!==""&&t===n}function gt(e,u=[]){const[t,n]=i.useState(u),[o,r]=i.useState(null),[l,s]=i.useState(!1),[a,d]=i.useState(e),g=i.useRef(!1),c=i.useRef(null);i.useEffect(()=>{if(l)return;if(g.current){g.current=!1;return}const m=c.current;m!==null&&m.length===u.length&&m.every((S,E)=>S===u[E])||(c.current=u,n(u),r(S=>S==null?S:u.find(E=>Se(E,S))??S))},[u,l]),i.useEffect(()=>{!l&&o!=null&&d({...o})},[l,o]);const C=i.useCallback(m=>{r(m),s(!1),d({...m})},[]),h=i.useCallback(()=>s(!0),[]),f=i.useCallback(()=>s(!1),[]),w=i.useCallback((m,S)=>{n(m),r(S),s(E=>(E&&(g.current=!0),!1))},[]),y=i.useCallback(m=>{n(S=>S.filter(E=>!Se(E,m))),r(null)},[]);return{list:t,setList:n,selected:o,setSelected:r,isEditing:l,setIsEditing:s,editForm:a,setEditForm:d,openDetail:C,startEditing:h,cancelEditing:f,commitEdit:w,remove:y}}function Qe(){return Xe(new Date)}function Xe(e){if(e==null||e==="")return"";const u=e instanceof Date?e:new Date(e);return isNaN(u.getTime())?"":new Intl.DateTimeFormat("fr-CA",{timeZone:"Asia/Seoul"}).format(u)}const ve=()=>{const[e,u,t]=Qe().split("-");return{year:e,month:u,day:t}},$n={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function Vn(e=[]){const{list:u,setList:t,selected:n,setSelected:o,isEditing:r,setIsEditing:l,editForm:s,setEditForm:a,openDetail:d,commitEdit:g}=gt($n,e),{year:c,month:C,day:h}=ve(),[f,w]=i.useState({year:c,month:C,day:h,hour:"09",minute:"00",memo:""});return{visitHistory:u,visitForm:f,setVisitForm:w,setVisit:y=>m=>w(S=>({...S,[y]:m})),selectedVisit:n,setSelectedVisit:o,isEditingVisit:r,setIsEditingVisit:l,editVisitForm:s,setEditVisitForm:a,openVisitDetail:d,handleVisitSave:y=>{t(B=>[f,...B]);const{year:m,month:S,day:E}=ve();w({year:m,month:S,day:E,hour:"09",minute:"00",memo:""}),y?.()},handleVisitEditSave:()=>{g(y=>y.map(m=>n!=null&&Se(m,n)?s:m),s)},addVisit:y=>{t(m=>[y,...m])},removeVisit:y=>{t(m=>m.filter(S=>!Se(S,y)))},revertVisitEdit:(y,m)=>{t(S=>S.map(E=>E===m?y:E)),o(S=>S===m?y:S)}}}const ht=e=>`${e.year.padStart(4,"0")}-${e.month.padStart(2,"0")}-${e.day.padStart(2,"0")} ${e.hour.padStart(2,"0")}:${e.minute.padStart(2,"0")}`,xe=e=>[...e].sort((u,t)=>{const n=ht(u),o=ht(t);return n<o?-1:n>o?1:0}),Hn={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function Gn(e,u=[]){const t=i.useMemo(()=>xe(u),[u]),{list:n,setList:o,selected:r,setSelected:l,isEditing:s,setIsEditing:a,editForm:d,setEditForm:g,openDetail:c,commitEdit:C,remove:h}=gt(Hn,t),[f,w]=i.useState([]),{year:y,month:m,day:S}=ve(),[E,B]=i.useState({year:y,month:m,day:S,hour:"09",minute:"00",memo:""}),R=I=>x=>B(G=>({...G,[I]:x})),_=I=>{o(K=>xe([...K,E]));const{year:x,month:G,day:Z}=ve();B({year:x,month:G,day:Z,hour:"09",minute:"00",memo:""}),I?.()},N=()=>{C(I=>xe(I.map(x=>r!=null&&Se(x,r)?d:x)),d)},D=i.useCallback(I=>{h(I)},[h]),j=i.useCallback(I=>{e({year:I.year,month:I.month,day:I.day,hour:I.hour,minute:I.minute,memo:I.memo,...I.id!=null?{id:I.id}:{}}),h(I)},[e,h]),b=i.useCallback(I=>{o(x=>x.filter(G=>!Se(G,I))),w(x=>[I,...x]),l(null)},[o,l]),V=i.useCallback(I=>{o(x=>xe([...x,I]))},[o]),Y=i.useCallback(I=>{o(x=>x.filter(G=>!Se(G,I)))},[o]),v=i.useCallback((I,x)=>{o(G=>xe(G.map(Z=>Z===x?I:Z))),l(G=>G===x?I:G)},[o,l]);return{scheduleList:n,noShowList:f,addSchedule:V,removeSchedule:Y,revertScheduleEdit:v,scheduleForm:E,setScheduleForm:B,setSchedule:R,selectedSchedule:r,setSelectedSchedule:l,isEditingSchedule:s,setIsEditingSchedule:a,editScheduleForm:d,setEditScheduleForm:g,openScheduleDetail:c,handleScheduleSave:_,handleScheduleEditSave:N,handleScheduleDelete:D,handleScheduleToVisit:j,handleScheduleNoVisit:b}}const Ze=[{value:"10",label:"10\uAC1C\uC529 \uBCF4\uAE30"},{value:"25",label:"25\uAC1C\uC529 \uBCF4\uAE30"},{value:"50",label:"50\uAC1C\uC529 \uBCF4\uAE30"},{value:"100",label:"100\uAC1C\uC529 \uBCF4\uAE30"}];function Yn(e){const{t:u}=Ce.useTranslation(),[t,n]=i.useState(""),[o,r]=i.useState("25"),[l,s]=i.useState("all"),[a,d]=i.useState(1),g=i.useMemo(()=>e.filter(({item:w,status:y})=>!(t&&!w.memo.includes(t)||l!=="all"&&y!==l)),[e,t,l]),c=Math.max(1,Math.ceil(g.length/Number(o))),C=Math.min(a,c),h=i.useMemo(()=>g.slice((C-1)*Number(o),C*Number(o)),[g,C,o]),f=i.useMemo(()=>Ze.map(w=>({...w,label:u("common.pageSizeLabel",{n:w.value,defaultValue:w.label})})),[u]);return{vapSearch:t,setVapSearch:n,vapPageSize:o,setVapPageSize:r,vapPageSizeOptions:f,vapStatus:l,setVapStatus:s,vapPage:C,setVapPage:d,vapFiltered:g,vapTotal:c,vapPageItems:h}}function Un(e,u,t){const{t:n}=Ce.useTranslation(),[o,r]=i.useState(()=>{const f=t?.initialPageSize;return f&&Ze.some(w=>w.value===f)?f:"25"}),[l,s]=i.useState(1),[a,d]=i.useState(u);Object.is(a,u)||(d(u),l!==1&&s(1));const g=i.useMemo(()=>Ze.map(f=>({...f,label:n("visits.showN",{n:f.value})})),[n]),c=i.useCallback(f=>{r(f),s(1)},[]),C=Math.max(1,Math.ceil(e.length/Number(o)));(l>C||l<1||!Number.isFinite(l))&&s(Math.min(Math.max(1,Number.isFinite(l)?l:1),C));const h=Math.min(Math.max(1,Number.isFinite(l)?l:1),C);return{pageRows:i.useMemo(()=>e.slice((h-1)*Number(o),h*Number(o)),[e,h,o]),pageSizeProps:{options:g,value:o,onChange:c},paginationProps:{page:h,total:C,onChange:s},setPage:s}}function Wn(){const[e,u]=i.useState(null),t=i.useCallback(o=>{u(r=>r?.key===o?{key:o,asc:!r.asc}:{key:o,asc:!0})},[]),n=i.useCallback((o,r)=>({label:o,sortDir:e?.key===r?e.asc?"asc":"desc":null,onClick:()=>t(r)}),[e,t]);return{\uC815\uB82C:e,\uCE78:n}}const mt=e=>e==="\uC88C"||e==="\uC6B0"?e:null;function Kn(){const[e,u]=i.useState(!1),[t,n]=i.useState("\uC88C"),[o,r]=i.useState({\uC88C:null,\uC6B0:null}),[l,s]=i.useState({\uC88C:[],\uC6B0:[]}),[a,d]=i.useState(!1),[g,c]=i.useState("\uC88C"),C=i.useCallback(f=>{const w=mt(f.direction);w&&(r(y=>({...y,[w]:f})),s(y=>({...y,[w]:[f,...y[w]]})),u(!1))},[]),h=i.useCallback(f=>{const w=mt(f.direction);w&&(r(y=>({...y,[w]:f})),d(!1))},[]);return{showDevice:e,setShowDevice:u,deviceDirection:t,setDeviceDirection:n,devices:o,setDevices:r,deviceHistory:l,setDeviceHistory:s,showDeviceList:a,setShowDeviceList:d,listForSide:g,setListForSide:c,handleDeviceSubmit:C,handleSelectFromList:h}}const qn="__ihab_core_word_pool__";function eu(){return globalThis[qn]??null}function F(e,u=Math.random){const t=e.slice();for(let n=t.length-1;n>0;n--){const o=Math.floor(u()*(n+1));[t[n],t[o]]=[t[o],t[n]]}return t}function se(e,u,t=Math.random){return!Array.isArray(e)||e.length===0||u<=0?[]:u>=e.length?F(e,t):F(e,t).slice(0,u)}const yu={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"}},zn=Q.indexOf("\u3147"),Eu={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!==zn},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&&!je[e.jong]}},Jn={\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"},Qn={\u314F:{nucleus:"\u314F"},\u3151:{glide:"j",nucleus:"\u314F"},\u3153:{nucleus:"\u3153"},\u3155:{glide:"j",nucleus:"\u3153"},\u3157:{nucleus:"\u3157"},\u315B:{glide:"j",nucleus:"\u3157"},\u315C:{nucleus:"\u315C"},\u3160:{glide:"j",nucleus:"\u315C"},\u3161:{nucleus:"\u3161"},\u3163:{nucleus:"\u3163"},\u3150:{nucleus:"\u3154/\u3150"},\u3152:{glide:"j",nucleus:"\u3154/\u3150"},\u3154:{nucleus:"\u3154/\u3150"},\u3156:{glide:"j",nucleus:"\u3154/\u3150"},\u3158:{glide:"w",nucleus:"\u314F"},\u3159:{glide:"w",nucleus:"\u3154/\u3150"},\u315A:{glide:"w",nucleus:"\u3154/\u3150"},\u315D:{glide:"w",nucleus:"\u3153"},\u315E:{glide:"w",nucleus:"\u3154/\u3150"},\u315F:{glide:"w",nucleus:"\u3163"},\u3162:{glide:"\u0270",nucleus:"\u3163"}};function wu(e){return Jn[e]??e}const Bu={cho:Q,jung:ne,jong:te},q=e=>Array.isArray(e)?e.length>0:!!e;function bu(e,u){if(e.length!==u.length)return!1;for(let t=0;t<e.length;t++){const n=e[t],o=u[t];if(!(!n||!o)&&(n.cho!==o.cho&&Q[n.cho]==="\u3147"!=(Q[o.cho]==="\u3147")||n.jong!==o.jong&&n.jong===0!=(o.jong===0)))return!0}return!1}function Xn(e,u,t){const n=t.pronOf(e),o=t.decompOf,r=t.sameStructureOnly&&o?o(n):null,l=[];for(const s of u)s!==e&&(t.okSet&&!t.okSet.has(s)||t.pronOf(s)!==n&&(r&&o&&bu(r,o(t.pronOf(s)))||l.push(s)));return l}function pt(e,u,t){const n=u?.[e];if(!n)return[];const o=t.kind?n[t.kind]??[]:[...n.cho??[],...n.jung??[],...n.jong??[]];return Xn(e,o,t)}function Zn(e,u,t,n,o,r,l){const s=["cho","jung","jong"].filter(C=>q(e[C])),a={};for(const C of s){const h=e[C];a[C]=new Set(Array.isArray(h)?h:[h])}const d=o==="pron",g=new Map;for(const C of u){const h=t(r(C));if(h.some(m=>!m))continue;let f=h;if(!d&&(f=t(C),f.length!==h.length||f.some(m=>!m)))continue;const w=h.length,y=g.get(w);y?y.push({w:C,dPron:h,dPos:f}):g.set(w,[{w:C,dPron:h,dPos:f}])}const c=new Map;for(const[C,h]of g){const f=new Map,w=(y,m)=>{const S=y.dPos[m];return S!=null&&s.every(E=>a[E].has(Bu[E][S[E]]))};for(const y of h){let m;if(l==="head")m=w(y,0)?0:-1;else if(l==="tail")m=w(y,C-1)?C-1:-1;else if(l==="mid"){m=-1;for(let E=1;E<C-1;E++)if(w(y,E)){m=E;break}}else m=y.dPos.findIndex(E=>E!=null&&s.every(B=>a[B].has(Bu[B][E[B]])));if(m<0)continue;const S=f.get(m);S?S.push(y):f.set(m,[y])}for(const[y,m]of f){const S=s.includes("cho"),E=s.includes("jung"),B=s.includes("jong"),R=N=>{let D="";for(let j=0;j<C;j++){const b=N[j];j===y?D+=(S?"*":b.cho)+"."+(E?"*":b.jung)+"."+(B?"*":b.jong)+".":D+=b.cho+"."+b.jung+"."+b.jong+"."}return D},_=new Map;for(const N of h){const D=R(N.dPron),j=_.get(D);j?j.push(N):_.set(D,[N])}for(const N of m){const D=_.get(R(N.dPron))??[],j=[];for(const b of D){if(b.w===N.w)continue;let V=!0;for(const Y of s){const v=N.dPron[y][Y],I=b.dPron[y][Y];if(I===v){V=!1;break}if(d&&a[Y].has(Bu[Y][I])){V=!1;break}}V&&(n&&bu(N.dPron,b.dPron)||j.push(b.w))}c.set(N.w,j)}}}return c}const eo=e=>e==null?[]:Array.isArray(e)?e:[e];function uo(e){if([...e].length!==1)return"";const u=H(e);if(!u)return"";const t=wu(te[u.jong]),n=t===""?0:te.indexOf(t);return de(u.cho,u.jung,n<0?0:n)}function St(e,u){return u.get(e)||uo(e)||e}function Au(e){return e?q(e.cho)?"cho":q(e.jung)?"jung":q(e.jong)?"jong":null:null}function _e(e,u){const t=(o,r)=>!q(o)||eo(o).includes(r),n=u.jongNone?e.jong===0:t(u.jong,te[e.jong]);return t(u.cho,Q[e.cho])&&t(u.jung,ne[e.jung])&&n}function Pe(e,u,t){const n=[...e];if(t!=="pron")return n.map(r=>H(r));const o=[...u.get(e)||e];return o.length!==n.length?n.map(r=>H(r)):o.map(r=>H(r))}function ke(e,u,t,n,o){const r=u==="cho"?Q:u==="jung"?ne:te,l=e[u],s=[],a=c=>u==="jung"?no(St(c,o)):St(c,o),d=new Map([[a(t),-1]]),g=F(r.map((c,C)=>C).filter(c=>c!==l&&(u!=="cho"||r[c]!=="\u3147")&&(u!=="jong"||c!==0)));for(const c of g){if(s.length>=n)break;const C=u==="cho"?de(c,e.jung,e.jong):u==="jung"?de(e.cho,c,e.jong):de(e.cho,e.jung,c),h=a(C),f=d.get(h);if(f!==void 0){u==="jung"&&f>=0&&o.has(C)&&!o.has(s[f])&&(s[f]=C);continue}d.set(h,s.length),s.push(C)}return s}const to={\u3154:"\u3150",\u3156:"\u3152",\u315A:"\u3159",\u315E:"\u3159"};function no(e){if([...e].length!==1)return e;const u=H(e);if(!u)return e;const t=to[ne[u.jung]];return t?de(u.cho,ne.indexOf(t),u.jong):e}function oo(e,u,t,n,o,r=null){const l=[...e];if(l.length!==2)return null;const s=l.map(c=>H(c));if(s.some(c=>!c))return null;const a=Pe(e,t,n);if(a.some(c=>!c))return null;const d=Au(u);let g=d&&u?a.map((c,C)=>_e(c,u)?C:-1).filter(c=>c>=0):[0,1];if(r!=null&&(g=g.filter(c=>c!==r)),!g.length)return null;for(const c of F(g)){const C=l[c];if(!o.has(C))continue;const h=ke(s[c],d??"cho",C,40,t),f=[];for(const w of h)if(w!==C&&o.has(w)&&!f.includes(w)&&f.push(w),f.length>=2)break;if(!(f.length<2))return{question:e,distractors:[C,...f]}}return null}function ro(e,u,t,n,o,r=null){const l=[...e];if(l.length!==3)return null;const s=l.map(c=>H(c));if(s.some(c=>!c))return null;const a=Pe(e,t,n);if(a.some(c=>!c))return null;const d=Au(u),g=d&&u?a.map((c,C)=>_e(c,u)?C:-1).filter(c=>c>=0):[0,1,2];if(!g.length)return null;for(const c of F(g))for(const C of F([0,1,2].filter(h=>h!==c&&(r==null||h===r)))){const h=[0,1,2].filter(S=>S!==C),f=h.map(S=>l[S]).join("");if(!o.has(f))continue;const w=h.indexOf(c),y=ke(s[c],d??"cho",l[c],40,t),m=[];for(const S of y){const E=h.map(R=>l[R]);E[w]=S;const B=E.join("");if(B!==f&&o.has(B)&&!m.includes(B)&&m.push(B),m.length>=2)break}if(!(m.length<2))return{question:e,distractors:[f,...m]}}return null}function lo(e,u,t,n,o,r=null){const l=[...e],s=l.length;if(s<2)return null;const a=[];for(let g=1;g<=s-1;g++)a.push({remain:l.slice(0,g).join(""),dropped:l.slice(g).join(""),droppedEnd:1}),a.push({remain:l.slice(s-g).join(""),dropped:l.slice(0,s-g).join(""),droppedEnd:0});const d=Au(u);for(const{remain:g,dropped:c,droppedEnd:C}of F(a)){if(r!=null&&C!==r||g===e||!o.has(g)||!o.has(c))continue;const h=[...g],f=h.map(m=>H(m));if(f.some(m=>!m))continue;const w=Pe(g,t,n);if(w.some(m=>!m))continue;const y=d&&u?w.map((m,S)=>_e(m,u)?S:-1).filter(m=>m>=0):h.map((m,S)=>S);if(y.length)for(const m of F(y)){const S=ke(f[m],d??"cho",h[m],40,t),E=[];for(const B of S){const R=[...h];R[m]=B;const _=R.join("");if(_!==g&&o.has(_)&&!E.includes(_)&&E.push(_),E.length>=2)break}if(E.length>=2)return{question:e,distractors:[g,...E],dropped:c}}}return null}function so(e,u,t,n,o,r=null){if([...e].length!==1)return null;const l=H(t.get(e)||e);if(!l||l.jong===0)return null;const s=de(l.cho,l.jung,0),a=ke({cho:l.cho,jung:l.jung,jong:0},"cho",s,2,t);return a.length<2?null:{question:e,distractors:[s,...a]}}const _u=Q.indexOf("\u3147");function ao(e,u,t,n,o,r=null){if([...e].length!==1)return null;const l=H(t.get(e)||e);if(!l||l.jong!==0||l.cho===_u)return null;const s=de(_u,l.jung,0),a=ke({cho:_u,jung:l.jung,jong:0},"jung",s,2,t);return a.length<2?null:{question:e,distractors:[s,...a]}}function io(e){const u=new Map;for(const t of e){const n=[...t],o=n.length;if(!(o<2||o>3))for(let r=0;r<o;r++){let l=o+"|"+r+"|";for(let a=0;a<o;a++)l+=a===r?"*":n[a];const s=u.get(l);s?s.push(t):u.set(l,[t])}}return u}function co(e,u,t,n,o,r=null,l=null,s=2){const a=[...e],d=a.length;if(d<2||d>3)return null;const g=a.map(S=>H(S));if(g.some(S=>!S))return null;const c=Pe(e,t,n);if(c.some(S=>!S))return null;const C=S=>t.get(S)??S,h=C(e),f=!!u&&(q(u.cho)||q(u.jung)||q(u.jong)),w=!!l&&(q(l.cho)||q(l.jung)||q(l.jong)),y=S=>{let E=d+"|"+S+"|";for(let B=0;B<d;B++)E+=B===S?"*":a[B];return E};let m;if(r!=null){if(r>=d||f&&!_e(c[r],u))return null;m=[r]}else f?m=c.map((S,E)=>_e(S,u)?E:-1).filter(S=>S>=0):m=Array.from({length:d},(S,E)=>E);for(const S of F(m)){const E=o.get(y(S))??[],B=[],R=[];for(const b of E){if(b===e)continue;const V=[...b].map(x=>H(x)),Y=g[S],v=V[S];if(!Y||!v)continue;let I=0;if(Y.cho!==v.cho&&I++,Y.jung!==v.jung&&I++,Y.jong!==v.jong&&I++,!(I<s||C(b)===h))if(w){const x=Pe(b,t,n)[S];x&&_e(x,l)?B.push(b):R.push(b)}else B.push(b)}if(!B.length)continue;const _=F(B)[0],N=[],D=new Set([h,C(_)]),j=w?R:B.filter(b=>b!==_);for(const b of F(j)){const V=C(b);if(!D.has(V)&&(D.add(V),N.push(b),N.length>=2))break}if(!w&&N.length<2)for(const b of F(E)){if(b===e||b===_)continue;const V=C(b);if(!D.has(V)&&(D.add(V),N.push(b),N.length>=2))break}if(!(N.length<2))return{question:e,distractors:[_,...N]}}return null}let uu=null,yt=null,Et=null;function Co(){const e=eu();if(e&&e.entries.length>0){const u=Me();if(uu&&yt===e&&Et===u)return uu;const t=new Set,n=[];for(const o of e.entries)!o.word||t.has(o.word)||(t.add(o.word),n.push({w:o.word,s:o.syllables,p:u?.[o.word]?[...u[o.word].cho??[],...u[o.word].jung??[],...u[o.word].jong??[]]:[],pron:o.pronunciation||o.word,grade:o.grade}));return uu=n,yt=e,Et=u,uu}return[]}const ae=new Proxy([],{get(e,u){const t=Co(),n=t[u];return typeof n=="function"?n.bind(t):n}});function Du(e){return e.length?e[Math.floor(Math.random()*e.length)]:void 0}function oe(e,u){if(u>=e.length)return F(e);if(u===0)return[];const t=e.slice();for(let n=0;n<u;n++){const o=n+Math.floor(Math.random()*(t.length-n)),r=t[n];t[n]=t[o],t[o]=r}return t.slice(0,u)}let Ou=null,wt=null;function fe(){const e=eu();if(Ou&&wt===e)return Ou;const u=new Map;for(const t of ae)t.w&&u.set(t.w,t.pron);return Ou=u,wt=e,u}function z(e){return fe().get(e)||e}function tu(e,u,t=new Set){const n=[];for(const o of F(e)){if(n.length>=u)break;const r=z(o);t.has(r)||(t.add(r),n.push(o))}return n}let fo=0;function X(e){return`${e}-rt-${++fo}`}function De(e){const u=Ct();if(!u||u.total===0){const o=new Set;for(const r of e)o.add(r);return o}const t=vn(),n=new Set;for(const o of e)t.has(o)&&n.add(o);return n}const nu=new Map;let Bt=null,bt=null;function Fe(e){return e==null?"":Array.isArray(e)?e.slice().sort().join(","):e}function At(e){const u=Fe(e.choseong),t=e.composition,n=t?.syllable==null?"":Array.isArray(t.syllable)?t.syllable.slice().sort().join(","):String(t.syllable),o=t?`${Fe(t.cho)}/${Fe(t.jung)}/${Fe(t.jong)}/${t.jongNone?"N":""}/${n}`:"",r=Fe(e.grade);return`${e.difficulty??""}|${u}|${o}|${e.excludeNoImage?"1":"0"}|${e.count??""}|x${e.contrastCount??1}|${e.fullCount?"F":""}|s${e.sameStructureOnly===!1?"0":"1"}|v${e.phonemeView==="pron"?"p":"c"}|g${r}|t${e.targetSyllable??""}|c${e.choicesPerItem??""}`}async function ue(e){const u=eu(),t=Me();(u!==Bt||t!==bt)&&(nu.clear(),Bt=u,bt=t);const n=At(e);return nu.has(n)||nu.set(n,go(e)),nu.get(n)}function _t(e){if(!e)return null;const u=l=>l==null?null:Array.isArray(l)?l.length?l:null:[l],t=u(e.cho),n=u(e.jung),o=!!e.jongNone,r=o?null:u(e.jong);return t||n||r||o?o&&!t&&!n&&!r?l=>On(l):l=>jn(l,{cho:t,jung:n,jong:r,jongNone:o}):null}function Dt(e){const u=e.grade&&e.grade.length>0?new Set(e.grade):null,t=e.composition??null,n=t?.syllable!=null?new Set(Array.isArray(t.syllable)?t.syllable:[t.syllable]):null,o=t?[_t(t),n?l=>n.has(Te(l)):null].filter(l=>l!=null):[];if(!u&&o.length===0)return null;const r=e.phonemeView==="pron";return l=>{if(u&&(!l.grade||!u.has(l.grade)))return!1;if(o.length===0)return!0;const s=r?z(l.w):l.w;return o.every(a=>a(s))}}async function go(e){const{difficulty:u=null,choseong:t=null,composition:n=null,targetSyllable:o=null,excludeNoImage:r=!1}=e,l=e.grade&&e.grade.length>0?new Set(e.grade):null,s=e.sameStructureOnly??!0,a=e.phonemeView==="pron"?"pron":"char",d=Math.max(1,e.contrastCount??1),g=u==="cho"||u==="jung"||u==="jong",c=g&&d>=2,C=u==="count",h=t?new Set(Array.isArray(t)?t:[t]):null,f=n?.syllable!=null?new Set(Array.isArray(n.syllable)?n.syllable:[n.syllable]):null,w=n?[_t(n),f?A=>f.has(Te(A)):null].filter(A=>A!=null):[],y=u==="random"||u===null,m=y||C,S=y||c||C;let E=ae.filter(A=>!A.w||l&&(!A.grade||!l.has(A.grade))?!1:S?!0:Array.isArray(A.p)&&A.p.length>0);h&&(E=E.filter(A=>{for(const M of h)if(Dn(A.w,M))return!0;return!1})),w.length>0&&(E=E.filter(A=>{const M=a==="pron"?z(A.w):A.w;return w.every(L=>L(M))})),o&&(E=E.filter(A=>A.w[0]===o));let B;if(r){const A=new Set;for(const M of E)if(A.add(M.w),Array.isArray(M.p))for(const L of M.p)A.add(L);if(m)for(const M of ae)M.w&&A.add(M.w);B=De(A)}else{const A=new Set;for(const M of E)if(A.add(M.w),Array.isArray(M.p))for(const L of M.p)A.add(L);if(m)for(const M of ae)M.w&&A.add(M.w);B=A}let R=null;if(c){const A=new Set;for(const M of ae)M.w&&A.add(M.w);R=r?De(A):A}const _=E.filter(A=>B.has(A.w)),N=600,D=Array.from(B),j=D.length>N?oe(D,N):D,b=C&&n!=null&&(q(n.cho)||q(n.jung)||q(n.jong)),V=2500,Y=new Map;if(C&&!b&&d>=2){for(const A of D){const M=Te(A),L=Y.get(M);L?L.push(A):Y.set(M,[A])}for(const[A,M]of Y)M.length>V&&Y.set(A,oe(M,V))}const v=An(),I=b?Zn(n,D,v,s,a,z):null,x=500,G=1500,Z=e.fullCount?_:u==="random"?_.length>x?oe(_,x):_:_.length>G?oe(_,G):_,K=Me(),he=[];for(const A of Z){let M;const L=z(A.w);if(c)M=In(A.w,u,d,R,24).filter($=>z($)!==L);else if(C)b?M=(I.get(A.w)??[]).filter($=>z($)!==L):d<=1?M=pt(A.w,K,{okSet:B,pronOf:z,decompOf:v,sameStructureOnly:!1}):M=(Y.get(Te(A.w))??[]).filter($=>{if($===A.w||z($)===L)return!1;const U=Mn(L,z($));return d>=5?U>=5:U===d});else if(y){const $=U=>U!==A.w&&U.length===A.w.length&&z(U)!==L;if(e.fullCount){const U=Math.max(1,(e.choicesPerItem??3)-1),ee=[],me=new Set;for(const Ne of j){if(!$(Ne))continue;const Ee=z(Ne);if(!me.has(Ee)&&(me.add(Ee),ee.push(Ne),ee.length>=U))break}M=ee}else M=j.filter($)}else{const $=u;M=pt(A.w,K,{kind:$,okSet:B,pronOf:z,decompOf:v,sameStructureOnly:!1}),M.length===0&&(M=(j.length>30?oe(j,30):j).filter(U=>U!==A.w&&_n(A.w,U)===u&&z(U)!==L))}if(s&&M.length>0&&(g||C&&!b)){const $=v(z(A.w));M=M.filter(U=>!bu($,v(z(U))))}M.length!==0&&he.push({word:A,usable:M})}return he}async function Ot(e,u){const{choicesPerItem:t=3,count:n=10}=u,o=t-1,r=(await ue(u)).filter(s=>s.usable.length>=o),l=[];for(const s of F(r)){if(l.length>=n)break;const a=tu(s.usable,o);if(a.length<o)continue;const d=F([s.word.w,...a]);l.push({id:X(e+"-item"),index:l.length+1,word:s.word.w,syllables:s.word.s,choices:d,answerIndex:d.indexOf(s.word.w)})}return l}async function ho(e){const{choicesPerItem:u=3,count:t=10}=e,n=u-1,o=await ue({...e,difficulty:null});if(o.length<u)return[];const r=[],l=F([...o]);for(const s of l){if(r.length>=t)break;const a=s.word.w,d=[...s.word.pron||a],g=Du(d);if(!g)continue;const c=o.filter(f=>f.word.w!==a&&f.word.s===s.word.s&&!(f.word.pron||f.word.w).includes(g)&&f.word.pron!==s.word.pron);if(c.length<n)continue;const C=tu(c.map(f=>f.word.w),n);if(C.length<n)continue;const h=F([a,...C]);r.push({id:X("HPI-item"),index:r.length+1,targetSyllable:g,word:a,choices:h,answerIndex:h.indexOf(a)})}return r}async function mo(e){const{count:u=10}=e,t=(await ue(e)).filter(r=>r.usable.length>=1);if(!t.length)return[];const n=t.length>=u?oe(t,u):F(Array.from({length:u},(r,l)=>t[l%t.length])),o=F(Array.from({length:u},(r,l)=>l<Math.ceil(u/2)));return n.map((r,l)=>{const s=o[l];let a;if(s)a=[r.word.w,r.word.w];else{const d=Du(r.usable);a=Math.random()<.5?[r.word.w,d]:[d,r.word.w]}return{id:X("SOD-item"),index:l+1,word:r.word.w,pair:a,same:s}})}async function po(e){const{choicesPerItem:u=3,count:t=10}=e,n=u-1,o=await ue({...e,difficulty:null});if(o.length<u+1)return[];const r=o.map(C=>C.word.w),l=new Map(o.map(C=>[C.word.w,C.word.pron])),s=C=>(l.get(C)||C)[0]??"",a={};for(const C of o){const h=s(C.word.w);h&&(a[h]||(a[h]=[]),a[h].push(C.word.w))}const d=Object.entries(a).filter(([,C])=>C.length>=2).map(([C])=>C);if(d.length===0)return[];const g=[],c=F([...d]);for(let C=0;g.length<t&&C<t*4;C++){const h=c[C%c.length],f=a[h];if(f.length<2)continue;const w=F([...f]),y=w[0],m=w[1];if(!y||!m||y===m||(l.get(y)||y)===(l.get(m)||m))continue;const S=l.get(m)||m,E=r.filter(_=>s(_)!==h&&_!==y&&_!==m&&_.length===m.length&&(l.get(_)||_)!==S);if(E.length<n)continue;const B=tu(E,n);if(B.length<n)continue;const R=F([m,...B]);g.push({id:X("SWS-item"),index:g.length+1,sourceWord:y,targetSyllable:h,word:m,choices:R,answerIndex:R.indexOf(m)})}return g}function Nt(e,u,t){const n=fe(),o=a=>n.get(a)||a,r=(a,d)=>{const g=[...a],c=[...d];if(g.length!==c.length)return-1;let C=-1;for(let h=0;h<g.length;h++)if(g[h]!==c[h]){if(C>=0)return-1;C=h}return C},l=e.map(a=>({e:a,swaps:a.usable.filter(d=>!!d&&r(a.word.w,d)>=0&&o(d)!==o(a.word.w))})).filter(a=>a.swaps.length>0),s=[];for(const{e:a,swaps:d}of F(l)){if(s.length>=u)break;const g=Du(d)??"",c=[...a.word.w],C=[...g],h=r(a.word.w,g),f=tu(a.usable.filter(w=>w&&w!==g),2,new Set([o(g),o(a.word.w)]));f.length<2||s.push({id:X(t),index:s.length+1,word:a.word.w,original:a.word.w,changed:g,changedFrom:h>=0?c[h]:"",changedTo:h>=0?C[h]:"",distractors:f})}return s}async function jt(e,u,t){const{count:n=10}=u,o=fe(),r=ae.filter(f=>f.w&&f.s===e),l=u.excludeNoImage?De(r.map(f=>f.w)):null,s=l?r.filter(f=>l.has(f.w)):r,a=new Set(s.map(f=>f.w)),d=io(a),g=u.phonemeView??"char",c=u.composition??null,C=Dt(u),h=[];for(const f of F(s)){if(h.length>=n)break;if(C&&!C(f))continue;const w=co(f.w,c,o,g,d,null,null);if(!w)continue;const y=w.distractors[0],m=[...f.w],S=[...y],E=m.findIndex((B,R)=>B!==S[R]);h.push({id:X(t),index:h.length+1,word:f.w,original:f.w,changed:y,changedFrom:E>=0?m[E]:"",changedTo:E>=0?S[E]:"",distractors:w.distractors.slice(1)})}return h}async function So(e){return jt(2,e,"CS2-item")}async function yo(e){return jt(3,e,"CS3-item")}async function Eo(e){const u=(await ue({...e,difficulty:"count",contrastCount:1})).filter(t=>t.word.s===1&&t.usable.length>=1);return Nt(u,e.count??10,"CP1-item")}async function wo(e){const u=e.difficulty&&e.difficulty!=="random"?e.difficulty:"count",t=(await ue({...e,difficulty:u,contrastCount:1})).filter(n=>n.word.s===2&&n.usable.length>=1);return Nt(t,e.count??10,"CP2-item")}async function Bo(e){const{count:u=10}=e,t=(await ue({...e})).filter(n=>n.word.s===2);return oe(t,u).map((n,o)=>({id:X("M2S-item"),index:o+1,word:n.word.w,answer:n.word.w,parts:[...n.word.w]}))}async function bo(e){const{count:u=10}=e,t=(await ue({...e})).filter(n=>n.word.s===3);return oe(t,u).map((n,o)=>({id:X("M3S-item"),index:o+1,word:n.word.w,answer:n.word.w,parts:[...n.word.w]}))}function Nu(e){const u=ae.map(t=>t.w);return e.excludeNoImage?De(u):new Set(u)}async function Ao(e){const{count:u=10}=e,t=(await ue({...e})).filter(s=>s.word.s===2),n=fe(),o=Nu(e),r=e.phonemeView??"char",l=[];for(const s of F(t)){if(l.length>=u)break;const a=oo(s.word.w,e.composition??null,n,r,o);if(!a)continue;const[d,...g]=a.distractors,c=[...s.word.w],C=c[0]===d?c[1]:c[0];l.push({id:X("D2-item"),index:l.length+1,original:s.word.w,word:s.word.w,dropped:C,missingResult:d,distractors:g})}return l}async function _o(e){const{count:u=10}=e,t=(await ue({...e})).filter(s=>s.word.s===3),n=fe(),o=Nu(e),r=e.phonemeView??"char",l=[];for(const s of F(t)){if(l.length>=u)break;const a=ro(s.word.w,e.composition??null,n,r,o);if(!a)continue;const[d,...g]=a.distractors,c=[...s.word.w];let C="";for(let h=0;h<c.length;h++)if(c.filter((f,w)=>w!==h).join("")===d){C=c[h];break}l.push({id:X("D3-item"),index:l.length+1,original:s.word.w,word:s.word.w,dropped:C,missingResult:d,distractors:g})}return l}async function Do(e){const{count:u=10}=e,t=(await ue({...e})).filter(s=>s.word.s>=2),n=fe(),o=Nu(e),r=e.phonemeView??"char",l=[];for(const s of F(t)){if(l.length>=u)break;const a=lo(s.word.w,e.composition??null,n,r,o);if(!a)continue;const[d,...g]=a.distractors,c=s.word.w,C=a.dropped??(c.startsWith(d)?c.slice(d.length):c.endsWith(d)?c.slice(0,c.length-d.length):"");l.push({id:X("DPC-item"),index:l.length+1,original:c,word:c,dropped:C,missingResult:d,distractors:g})}return l}async function Oo(e){const{count:u=10}=e,t=(await ue({...e})).map(n=>n.word.w);return t.length<3?[]:Array.from({length:u},(n,o)=>{const r=oe(t,3);return{id:X("LRO-item"),index:o+1,sequence:r,choices:F(r)}})}function ou(e,u,t){const n=ae.filter(s=>s.w&&s.s===e),o=u.excludeNoImage?De(n.map(s=>s.w)):null,r=Dt(u),l=[];for(const s of n)if(!(o&&!o.has(s.w))&&!(r&&!r(s))){if(t){const a=H(s.w);if(!a||!t(a))continue}l.push(s)}return l}function No(e){const u=ou(1,e,t=>t.jong===0);return oe(u,e.count??10).map((t,n)=>{const o=H(t.w);return{id:X("M2P-item"),index:n+1,parts:[Q[o.cho],ne[o.jung]],answer:t.w,word:t.w}})}function jo(e){const u=ou(1,e,Eu.MERGE_3_PHONEMES.syllable);return oe(u,e.count??10).map((t,n)=>{const o=H(t.w);return{id:X("M3P-item"),index:n+1,parts:[Q[o.cho],ne[o.jung],te[o.jong]],answer:t.w,word:t.w}})}function To(e){const u=Eu.DROP_FINAL_CONSONANT_FROM_1SYLL,t=ou(u.syllables,e,u.syllable),n=fe(),o=[];for(const r of F(t)){if(o.length>=(e.count??10))break;const l=so(r.w,null,n);if(!l)continue;const[s,...a]=l.distractors;o.push({id:X("DFC-item"),index:o.length+1,original:r.w,word:r.w,result:s,distractors:a})}return o}function Io(e){const u=Eu.REMOVE_CONSONANT_AND_IDENTIFY_PHONEME,t=ou(u.syllables,e,u.syllable),n=fe(),o=[];for(const r of F(t)){if(o.length>=(e.count??10))break;const l=ao(r.w,null,n);if(!l)continue;const s=H(n.get(r.w)||r.w);if(!s)continue;const[a,...d]=l.distractors;o.push({id:X("RCP-item"),index:o.length+1,base:r.w,word:r.w,missingConsonant:Q[s.cho],remaining:a,distractors:d})}return o}const ru=new Map;let Tt=null,It=null;async function Mt(e,u={}){const t=eu(),n=Me();(t!==Tt||n!==It)&&(ru.clear(),Tt=t,It=n);const o=`${e}:${At(u)}`;if(ru.has(o))return ru.get(o);const r=await Ro(e,u);return ru.set(o,r),r}const Mo={SAME_SOUND_PICK:e=>Ot("SSP",e),HEAR_AND_PICK_SAME:e=>Ot("HPS",e),HEAR_AND_PICK_INCLUDED:e=>ho(e),SAME_OR_DIFF:e=>mo(e),STARTS_WITH_SAME_SOUND:e=>po(e),LISTEN_AND_REMEMBER_ORDER:e=>Oo(e),MERGE_2_SYLLABLES:e=>Bo(e),MERGE_3_SYLLABLES:e=>bo(e),MERGE_2_PHONEMES:e=>No(e),MERGE_3_PHONEMES:e=>jo(e),DROP_1_FROM_2SYLL:e=>Ao(e),DROP_1_FROM_3SYLL:e=>_o(e),DROP_PART_FROM_COMPOUND:e=>Do(e),DROP_FINAL_CONSONANT_FROM_1SYLL:e=>To(e),REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:e=>Io(e),CHANGE_1_SYLL_IN_2SYLL:e=>So(e),CHANGE_1_SYLL_IN_3SYLL:e=>yo(e),CHANGE_1_PHONEME_IN_1SYLL:e=>Eo(e),CHANGE_1_PHONEME_IN_2SYLL:e=>wo(e)};async function Ro(e,u={}){const t=Mo[e];return t?await t(u):[]}async function Lo(e){const u=["random","count"],t=Object.keys(yu);let n=0;for(const o of u)for(const r of t){const l=yu[r];Mt(r,{difficulty:l.difficulty?o:null,contrastCount:1,composition:null,count:5,excludeNoImage:e,sameStructureOnly:!0,phonemeView:"char",grade:null}).catch(()=>{}),++n%6===0&&await new Promise(s=>setTimeout(s,0))}}async function vo(e){const u=await ue({...e,fullCount:!0}),t=e.choicesPerItem!=null?Math.max(1,e.choicesPerItem-1):1;return u.filter(n=>new Set(n.usable.map(o=>z(o))).size>=t).length}async function xo(e={}){const u=[];for(const s of ae)s.w&&u.push(s.w);const t=e.excludeNoImage?De(u):u,n=new Set,o=new Set,r=new Set,l=new Set;for(const s of t){l.add(Te(s));for(const a of s){const d=H(a);if(d&&(Q[d.cho]!=="\u3147"&&n.add(Q[d.cho]),o.add(ne[d.jung]),d.jong>0)){r.add(te[d.jong]);const g=je[d.jong];g&&g.forEach(c=>r.add(c))}}}return{cho:n,jung:o,jong:r,syllable:l}}const ye="\uC804\uCCB4";function Rt(){const{t:e}=Ce.useTranslation();return i.useMemo(()=>({difficulty:e("wordSearch.filter.difficulty","\uB4F1\uAE09"),syllables:e("wordSearch.filter.syllables","\uC74C\uC808 \uC218"),syllable5plus:e("wordSearch.filter.syllable5plus","5\uC74C\uC808 \uC774\uC0C1"),partOfSpeech:e("wordSearch.filter.partOfSpeech","\uD488\uC0AC"),wordType:e("wordSearch.filter.wordType","\uC720\uD615"),posMap:{[e("wordSearch.filter.pos.noun","\uCCB4\uC5B8(\uBA85\uC0AC, \uC218\uC0AC)")]:["\uBA85","\uC218"],[e("wordSearch.filter.pos.verb","\uC6A9\uC5B8(\uB3D9\uC0AC, \uD615\uC6A9\uC0AC)")]:["\uB3D9","\uD615"],[e("wordSearch.filter.pos.modifier","\uC218\uC2DD\uC5B8(\uBD80\uC0AC, \uAD00\uD615\uC0AC)")]:["\uBD80","\uAD00"]},typeMap:{[e("wordSearch.filter.type.native","\uACE0\uC720\uC5B4")]:"\uACE0\uC720",[e("wordSearch.filter.type.sino","\uD55C\uC790\uC5B4")]:"\uD55C\uC790",[e("wordSearch.filter.type.foreign","\uC678\uB798\uC5B4")]:"\uC678\uB798",[e("wordSearch.filter.type.mixed","\uD63C\uC885\uC5B4")]:"\uD63C\uC885"}}),[e])}function Lt(e,u,t){return{label:u.difficulty,items:[1,2,3,4].map(n=>e("wordSearch.filter.grade",{n})),multiple:!0,allOption:!0,allLabel:t?.allLabel,labelAction:t?.labelAction,labelInfo:t?.labelInfo}}function vt(e){return{label:e.partOfSpeech,items:Object.keys(e.posMap),multiple:!0,allOption:!0}}function xt(e){return{label:e.wordType,items:Object.keys(e.typeMap),multiple:!0,allOption:!0}}function Po(e,u){return{label:u.syllables,items:[e("wordSearch.filter.syllable",{n:1}),e("wordSearch.filter.syllable",{n:2}),e("wordSearch.filter.syllable",{n:3}),e("wordSearch.filter.syllable",{n:4}),u.syllable5plus],multiple:!0,allOption:!0}}function ko(e,u){const t=[e("wordPairs.filter.onlyHasImage","\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC")];return u?.includeStructure&&t.push(e("wordPairs.filter.onlySameStructure","\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC")),{label:e("wordPairs.filter.selectLabel","\uC120\uD0DD"),items:t,multiple:!0,labelAction:u?.labelAction,labelInfo:u?.labelInfo}}function Fo(e,u){const{label:t,headValue:n,midValue:o,tailValue:r,includeMid:l=!0,headDisabled:s,midDisabled:a,tailDisabled:d,allOptionDisabled:g,groupLabel:c,labelAction:C}=u;return{label:t,...c?{groupLabel:c}:{},...C?{labelAction:C}:{},allOption:!0,allLabel:e("wordSearch.filter.positionAny",{defaultValue:"\uBB34\uAD00"}),...g?{allOptionDisabled:g}:{},items:[{value:n,displayLabel:e("wordSearch.filter.positionHead",{defaultValue:"\uC5B4\uB450"}),disabled:s},...l?[{value:o,displayLabel:e("wordSearch.filter.positionMid",{defaultValue:"\uC5B4\uC911"}),disabled:a}]:[],{value:r,displayLabel:e("wordSearch.filter.positionTail",{defaultValue:"\uC5B4\uB9D0"}),disabled:d}]}}function $o(e,u,t){if(u===ye){const{[t]:r,...l}=e;return l}const n=e[t]??[],o=n.includes(u)?n.filter(r=>r!==u):[...n,u];if(o.length===0){const{[t]:r,...l}=e;return l}return{...e,[t]:o}}Object.fromEntries(Object.entries(Qn).map(([e,{nucleus:u}])=>[e,u]));const Vo={\uACE0\uC720\uC5B4:"\uACE0\uC720",\uD55C\uC790\uC5B4:"\uD55C\uC790",\uC678\uB798\uC5B4:"\uC678\uB798",\uD63C\uC885\uC5B4:"\uD63C\uC885"},Ho={"\uCCB4\uC5B8(\uBA85\uC0AC,\uC218\uC0AC)":["\uBA85","\uC218"],"\uC6A9\uC5B8(\uB3D9\uC0AC,\uD615\uC6A9\uC0AC)":["\uB3D9","\uD615"],"\uC218\uC2DD\uC5B8(\uBD80\uC0AC,\uAD00\uD615\uC0AC)":["\uBD80","\uAD00"]},Go={difficulty:"\uB09C\uC774\uB3C4 \uB4F1\uAE09",syllables:"\uC74C\uC808 \uC218",syllable5plus:"5\uC74C\uC808 \uC774\uC0C1",partOfSpeech:"\uD488\uC0AC",wordType:"\uC720\uD615",posMap:Ho,typeMap:Vo};function Yo(e,u,t=Go){const n=u[t.difficulty];if(n?.length&&!n.some(s=>e.grade===s.replace(/\D/g,"")))return!1;const o=u[t.syllables];if(o?.length){const s=e.syllables??0;if(!o.some(a=>a===t.syllable5plus?s>=5:s===parseInt(a)))return!1}const r=u[t.partOfSpeech];if(r?.length&&!r.flatMap(s=>t.posMap[s]??[s]).some(s=>(e.pos??"").includes(s)))return!1;const l=u[t.wordType];return!(l?.length&&!l.some(s=>e.wordType===t.typeMap[s]))}const Uo={labial:e=>e("common.phonetics.place.labial",{defaultValue:"\uC591\uC21C\uC74C"}),alveolar:e=>e("common.phonetics.place.alveolar",{defaultValue:"\uCE58\uC870\uC74C"}),palatal:e=>e("common.phonetics.place.palatal",{defaultValue:"\uACBD\uAD6C\uAC1C\uC74C"}),velar:e=>e("common.phonetics.place.velar",{defaultValue:"\uC5F0\uAD6C\uAC1C\uC74C"}),glottal:e=>e("common.phonetics.place.glottal",{defaultValue:"\uC131\uBB38\uC74C"})},Wo={frontHigh:e=>e("common.phonetics.vowel.frontHigh",{defaultValue:"\uC804\uC124 \uACE0\uBAA8\uC74C"}),backHighUnrounded:e=>e("common.phonetics.vowel.backHighUnrounded",{defaultValue:"\uD6C4\uC124 \uACE0\uBAA8\uC74C \uD3C9\uC21C"}),backHighRounded:e=>e("common.phonetics.vowel.backHighRounded",{defaultValue:"\uD6C4\uC124 \uACE0\uBAA8\uC74C \uC6D0\uC21C"}),frontMid:e=>e("common.phonetics.vowel.frontMid",{defaultValue:"\uC804\uC124 \uC911\uBAA8\uC74C"}),backMidUnrounded:e=>e("common.phonetics.vowel.backMidUnrounded",{defaultValue:"\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C"}),backMidRounded:e=>e("common.phonetics.vowel.backMidRounded",{defaultValue:"\uD6C4\uC124 \uC911\uBAA8\uC74C \uC6D0\uC21C"}),low:e=>e("common.phonetics.vowel.low",{defaultValue:"\uC800\uBAA8\uC74C"})},Ko={j:e=>e("common.phonetics.glide.j",{defaultValue:"j\uD65C\uC74C"}),w:e=>e("common.phonetics.glide.w",{defaultValue:"w\uD65C\uC74C"}),velar:e=>e("common.phonetics.glide.velar",{defaultValue:"\u0270\uD65C\uC74C"})};function Pt(e,u){if("place"in u)return Uo[u.place](e);const t=Wo[u.vowel](e);return u.glide?`${t} \xB7 ${Ko[u.glide](e)}`:t}const qo=(e,{defaultValue:u})=>u,kt=(e,u)=>({jamos:e,phonetic:u,tooltip:Pt(qo,u)}),ie=(e,u)=>u.map(t=>kt([t],{place:e})),J=(e,u,t)=>kt([...e],t?{vowel:u,glide:t}:{vowel:u}),ju={cho:[ie("labial",["\u3142","\u3143","\u314D","\u3141"]),ie("alveolar",["\u3137","\u3138","\u314C","\u3134","\u3139"]),ie("alveolar",["\u3145","\u3146"]),ie("palatal",["\u3148","\u3149","\u314A"]),ie("velar",["\u3131","\u3132","\u314B"]),ie("glottal",["\u314E"])],jung:[[J("\u3163","frontHigh"),J("\u315F","frontHigh","w"),J("\u3162","frontHigh","velar")],[J("\u3161","backHighUnrounded")],[J("\u315C","backHighRounded"),J("\u3160","backHighRounded","j")],[J("\u3154\u3150","frontMid"),J("\u3156\u3152","frontMid","j"),J("\u3159\u315A\u315E","frontMid","w")],[J("\u3153","backMidUnrounded"),J("\u3155","backMidUnrounded","j"),J("\u315D","backMidUnrounded","w")],[J("\u3157","backMidRounded"),J("\u315B","backMidRounded","j")],[J("\u314F","low"),J("\u3151","low","j"),J("\u3158","low","w")]],jong:[ie("labial",["\u3142","\u3141"]),ie("alveolar",["\u3137","\u3134","\u3139"]),ie("velar",["\u3131","\u3147"])]},zo=[...Q],Jo=[...ne],Qo=te.filter(e=>e!==""),ce=e=>e===re?[]:Array.from(e),re="__NO_CODA__",Ft=[1,2,3,4],le=5,Xo=12,$t="SYL_",Tu=e=>`${$t}${e}`,Zo=e=>Number(e.slice($t.length));function Iu(e){return e>=le?Array.from({length:Xo-le+1},(u,t)=>le+t):[e]}const Vt={cho:zo,jung:Jo,jong:Qo},Mu=e=>e.map(u=>u.map(({jamos:t,phonetic:n,tooltip:o})=>({v:t.join(""),phonetic:n,tooltip:o}))),Ru={cho:Mu(ju.cho),jung:Mu(ju.jung),jong:Mu(ju.jong)},Ht={};Ru.jung.flat().forEach(({v:e})=>{for(const u of ce(e))Ht[u]=e});const er=new Set(Ru.cho.flat().map(e=>e.v));function Gt(e,u){return e==="cho"?er.has(u)?u:null:e==="jung"?Ht[u]??u:wu(u)}function Yt(e,u,t){if(e==="jung"){const n=ce(u);return t&&n.includes(t)?t:n[0]??u}return e==="jong"&&t&&wu(t)===u?t:u}function Ut(e,u,t,n){const o=(r,l)=>l?r==="jong"&&l===re?re:u==="pron"?Gt(r,l):Yt(r,l,r==="jung"?t:r==="jong"?n:null):null;return{...e,cho:o("cho",e.cho),jung:o("jung",e.jung),jong:o("jong",e.jong)}}const Lu={cho:null,jung:null,jong:null,syllable:null},ur="wt_filter",Wt=e=>`wt_filter_${e}`,vu=["noun","verb","modifier"],xu=["native","sino","foreign","mixed"];function Kt(e,u,t,n,o){if(!Array.isArray(e))return[];const r=[];for(const l of e){if(typeof l!="string")continue;const s=u.includes(l)?l:u.find(a=>o.some(d=>n(d,t(a))===l));s&&!r.includes(s)&&r.push(s)}return r}function qt(e){try{const u=localStorage.getItem(Wt(e))??localStorage.getItem(ur);if(u)return JSON.parse(u)}catch{}return null}function zt(e){const u=e?.phonemeView;return u==="pron"?"pron":u==="direct"?"direct":"char"}function tr(e){const u=e;return u?.composition?{cho:u.composition.cho??null,jung:u.composition.jung??null,jong:u.composition.jong??null,syllable:u.composition.syllable??null}:u?.choseong?{...Lu,cho:u.choseong}:Lu}function nr(e,u,t){const{t:n,i18n:o}=Ce.useTranslation(),[r]=i.useState(()=>t?.resetOnMount?null:qt(e)),[l,s]=i.useState(zt(r)),[a,d]=i.useState(()=>tr(r)),g=i.useCallback(()=>u.requireSyllable?{cho:"\u3131",jung:"\u314F",jong:re,syllable:u.fixedSyllable??null}:{cho:null,jung:null,jong:u.fixedNoCoda?re:null,syllable:u.fixedSyllable??null},[u.requireSyllable,u.fixedSyllable,u.fixedNoCoda]);i.useEffect(()=>{!u.requireSyllable&&u.fixedSyllable==null&&!u.fixedNoCoda||d(p=>p.cho||p.jung||p.syllable!=null||p.jong?p:g())},[]);const c=i.useMemo(()=>q(a.cho)||q(a.jung)||q(a.jong)?"count":"random",[a.cho,a.jung,a.jong]),C=i.useRef(l==="char"?a.jung:null),h=i.useRef(l==="char"?a.jong:null);i.useEffect(()=>{l==="char"&&(C.current=a.jung,h.current=a.jong)},[l,a.jung,a.jong]);const[f,w]=i.useState(t?.resetOnMount?!!t?.defaultImageOnly:r?.excludeNoImage??!0),[y,m]=i.useState(t?.resetOnMount?!1:r?.sameStructureOnly??!0),[S,E]=i.useState(Array.isArray(r?.gradeFilter)?r.gradeFilter:[]),B=Array.from(new Set([o.language,"ko","en"].filter(Boolean))),R=(p,O)=>o.getFixedT(p)(O),_=p=>Kt(p,vu,O=>`wordSearch.filter.pos.${O}`,R,B),N=p=>Kt(p,xu,O=>`wordSearch.filter.type.${O}`,R,B),[D,j]=i.useState(()=>_(r?.posFilter)),[b,V]=i.useState(()=>N(r?.wordTypeFilter)),Y=i.useRef(t?.resetKey);i.useEffect(()=>{Y.current!==t?.resetKey&&(Y.current=t?.resetKey,d(g()),w(!!t?.defaultImageOnly),m(!1),E([]),j([]),V([]))},[t?.resetKey]);const v=Rt(),I=i.useMemo(()=>Object.keys(v.posMap),[v]),x=i.useMemo(()=>Object.keys(v.typeMap),[v]),G=i.useMemo(()=>D.map(p=>I[vu.indexOf(p)]).filter(Boolean),[D,I]),Z=i.useMemo(()=>b.map(p=>x[xu.indexOf(p)]).filter(Boolean),[b,x]),[K,he]=i.useState({cho:new Set,jung:new Set,jong:new Set,syllable:new Set}),[A,M]=i.useState(!1),[L,$]=i.useState(null),U=1,ee=Math.max(1,[a.cho,a.jung,a.jong].filter(Boolean).length),[me,Ne]=i.useState(e);i.useEffect(()=>{if(me!==e){if(!t?.resetOnMount){const p=qt(e);d(p?.composition??g()),w(p?.excludeNoImage??!0),m(p?.sameStructureOnly??!0),s(zt(p)),E(Array.isArray(p?.gradeFilter)?p.gradeFilter:[]),j(_(p?.posFilter)),V(N(p?.wordTypeFilter))}Ne(e)}},[e,me,t?.resetOnMount]),i.useEffect(()=>{if(!t?.resetOnMount&&me===e)try{localStorage.setItem(Wt(e),JSON.stringify({contrastCount:ee,composition:a,excludeNoImage:f,sameStructureOnly:y,phonemeView:l,gradeFilter:S,posFilter:D,wordTypeFilter:b}))}catch{}},[t?.resetOnMount,e,me,ee,a,f,y,l,S,D,b]);const[Ee,Gu]=i.useState(0);et("wordpool:update",()=>Gu(p=>p+1));const Yu=i.useRef(o.language);i.useEffect(()=>{Yu.current!==o.language&&(Yu.current=o.language,Gu(p=>p+1))},[o.language]),i.useEffect(()=>{if(!u.choseong)return;let p=!1;return xo({difficulty:c,excludeNoImage:f}).then(O=>{p||(he(O),O.cho.size+O.jung.size+O.jong.size>0&&M(!0))}).catch(()=>{p||he({cho:new Set,jung:new Set,jong:new Set,syllable:new Set})}),()=>{p=!0}},[u.choseong,c,f,Ee]),i.useEffect(()=>{let p=!1;const O=a,T=O.cho?ce(O.cho):null,P=O.jung?ce(O.jung):null,W=O.jong===re,we=W?null:O.jong?ce(O.jong):null,Be=O.syllable!=null?Iu(O.syllable):null,ze=!!(T||P||we||W||Be);return vo({difficulty:u.difficulty?c:null,contrastCount:u.difficulty?ee:1,composition:u.choseong&&ze?{cho:T,jung:P,jong:we,jongNone:W,syllable:Be}:null,excludeNoImage:f,sameStructureOnly:y,phonemeView:l==="pron"?"pron":"char",grade:S.length>0?S:null}).then(Je=>{p||$(Je)}).catch(()=>{p||$(null)}),()=>{p=!0}},[u.choseong,u.difficulty,c,ee,a,l,f,y,Ee,S]),i.useEffect(()=>{A&&d(p=>{const O={...p};let T=!1;return["cho","jung","jong"].forEach(P=>{const W=p[P];!W||W===re||ce(W).some(we=>K[P].has(we))||(O[P]=null,T=!0)}),p.syllable!=null&&u.fixedSyllable==null&&(p.syllable>=le?[...K.syllable].some(P=>P>=le)||(O.syllable=null,T=!0):(!K.syllable.has(p.syllable)||p.syllable<U)&&(O.syllable=null,T=!0)),T?O:p})},[K,A,U,u.fixedSyllable]);const Uu=i.useMemo(()=>{const p=O=>{const T=new Set;for(const P of Vt[O])K[O].has(P)&&T.add(P);return T};return{cho:p("cho"),jung:p("jung"),jong:p("jong")}},[K]),fu=i.useMemo(()=>({exact:new Set(Ft.filter(p=>K.syllable.has(p))),min:[...K.syllable].some(p=>p>=le)}),[K]),k=i.useMemo(()=>({composition:n("wordPairs.composition","\uC815\uB2F5 \uB2E8\uC5B4 \uAD6C\uC131"),syllableCount:n("wordPairs.syllableCount","\uC74C\uC808 \uC218"),onset:n("wordPairs.onset","\uCD08\uC131"),vowel:n("wordPairs.vowel","\uBAA8\uC74C"),coda:n("wordPairs.coda","\uC885\uC131"),phonemeGroup:n("training.filter.phonemeGroup",{defaultValue:"\uD6C8\uB828 \uC74C\uC808"}),trainOnset:n("training.filter.trainOnset",{defaultValue:"\uCD08\uC131"}),trainVowel:n("training.filter.trainVowel",{defaultValue:"\uBAA8\uC74C"}),trainCoda:n("training.filter.trainCoda",{defaultValue:"\uC885\uC131"}),random:n("training.filter.random","\uBB34\uC791\uC704"),exclude:n("wordSearch.filter.exclude","\uC81C\uC678"),selectLabel:n("training.filter.selectSection",{defaultValue:"\uC120\uD0DD"}),none:n("common.none","\uC5C6\uC74C"),noImage:n("wordSearch.filter.excludeNoImage","\uC774\uBBF8\uC9C0 \uC5C6\uC74C"),excludeImage:n("training.filter.excludeImage",{defaultValue:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC"}),sameStructure:n("training.filter.sameStructure",{defaultValue:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC"}),noLimit:n("training.filter.noLimit",{defaultValue:"\uBB34\uAD00"}),codaExclude:n("training.filter.codaExclude",{defaultValue:"\uC81C\uC678"}),gradeLabel:n("training.filter.gradeLabel",{defaultValue:"\uB09C\uC774\uB3C4 \uB4F1\uAE09"})}),[n]),Wu=i.useMemo(()=>({[k.trainOnset]:"cho",[k.trainVowel]:"jung",[k.trainCoda]:"jong"}),[k]),qe=i.useCallback((p,O)=>({title:O,items:p}),[]),gu=i.useMemo(()=>[n("training.filter.excludeImageInfo",{defaultValue:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC: \uB2E8\uC5B4 \uC911\uC5D0 \uC774\uBBF8\uC9C0\uAC00 \uC788\uB294 \uB2E8\uC5B4\uB9CC \uACB0\uACFC\uC5D0 \uBCF4\uC5EC\uC90D\uB2C8\uB2E4."}),n("training.filter.sameStructureInfo",{defaultValue:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC: \uC815\uB2F5\uACFC \uC624\uB2F5\uC758 \uC74C\uC808 \uAD6C\uC870(\uAE00\uC790 \uC218\xB7\uBC1B\uCE68 \uC720\uBB34 \uB4F1)\uAC00 \uAC19\uC740 \uACB0\uACFC\uB9CC \uB0A8\uACA8\uC694."})],[n]),un=i.useMemo(()=>{const p=[];if(u.choseong){const O={value:re,displayLabel:k.codaExclude},T=u.fixedNoCoda===!0,P=(W,we)=>{const Be=T&&W==="jong",ze={label:we,groupLabel:k.phonemeGroup,allOption:!u.requireSyllable,allLabel:k.noLimit,allOptionDisabled:Be};if(l==="pron"){const be=Ru[W].map(an=>an.map(({v:hu,phonetic:cn})=>{const mu=ce(hu),Ku=Pt(n,cn),qu=Be||!mu.some(Cn=>K[W].has(Cn));return mu.length>1?{value:hu,labels:mu,tooltip:Ku,disabled:qu}:{value:hu,tooltip:Ku,disabled:qu}}));return W==="jong"&&!u.requireCoda&&be.unshift([O]),{...ze,groups:be}}const Je=Vt[W].map(be=>!Be&&Uu[W].has(be)?be:{value:be,disabled:!0});return{...ze,items:W==="jong"&&!u.requireCoda?[O,...Je]:Je}};p.push(P("cho",k.trainOnset)),p.push(P("jung",k.trainVowel)),p.push(P("jong",k.trainCoda))}if(p.push({...Lt(n,v,{labelInfo:qe([n("wordPairs.filter.difficultyInfo",{defaultValue:"\uAD6D\uB9BD\uAD6D\uC5B4\uC6D0\uC758 \uAE30\uCD08 \uC5B4\uD718 \uB4F1\uAE09\uC774 \uACB0\uACFC\uC5D0 \uBC18\uC601\uB429\uB2C8\uB2E4."})])}),label:k.gradeLabel}),u.partOfSpeech&&p.push(vt(v)),u.wordType&&p.push(xt(v)),u.choseong||u.fixedSyllable!=null){const O=u.fixedSyllable;p.push({label:k.syllableCount,items:[...Ft.map(T=>({value:Tu(T),displayLabel:n("wordPairs.syllableN",{n:T,defaultValue:"{{n}}\uC74C\uC808"}),disabled:O!=null?T!==O:!fu.exact.has(T)||T<U})),{value:Tu(le),displayLabel:n("wordPairs.syllableNPlus",{n:le,defaultValue:"{{n}}\uC74C\uC808 \uC774\uC0C1"}),disabled:O!=null?le!==O:!fu.min}],allOption:!0,allOptionDisabled:O!=null})}return u.choseong?p.push({label:k.exclude,displayLabel:k.selectLabel,multiple:!0,items:[k.excludeImage,k.sameStructure],labelInfo:qe(gu)}):p.push({label:k.exclude,displayLabel:k.selectLabel,multiple:!0,items:[k.excludeImage],labelInfo:qe([gu[0]])}),p},[u.choseong,u.partOfSpeech,u.wordType,u.requireSyllable,u.fixedSyllable,u.fixedNoCoda,u.requireCoda,U,Uu,K,l,fu,k,n,qe,gu,v]),tn={...(u.choseong||u.fixedSyllable!=null)&&a.syllable!=null?{[k.syllableCount]:Tu(a.syllable)}:{},...u.choseong&&a.cho?{[k.trainOnset]:a.cho}:{},...u.choseong&&a.jung?{[k.trainVowel]:a.jung}:{},...u.choseong&&a.jong?{[k.trainCoda]:a.jong}:{},[k.exclude]:[...f?[k.excludeImage]:[],...y?[k.sameStructure]:[]],[k.gradeLabel]:S.map(p=>n("wordSearch.filter.grade",{n:Number(p),defaultValue:"{{n}}\uB4F1\uAE09"})),...u.partOfSpeech?{[v.partOfSpeech]:G}:{},...u.wordType?{[v.wordType]:Z}:{}},nn=i.useCallback((p,O)=>{if(O===k.exclude)p===k.excludeImage?w(T=>!T):p===k.sameStructure&&m(T=>!T);else if(O===k.syllableCount)d(T=>{if(!p||p===ye)return{...T,syllable:null};const P=Zo(p);return{...T,syllable:T.syllable===P?null:P}});else if(O===k.gradeLabel){if(!p||p===ye){E([]);return}const T=p.replace(/\D/g,"");E(P=>P.includes(T)?P.filter(W=>W!==T):[...P,T])}else if(O===v.partOfSpeech){if(!p||p===ye){j([]);return}const T=vu[I.indexOf(p)]??_([p])[0];if(!T)return;j(P=>P.includes(T)?P.filter(W=>W!==T):[...P,T])}else if(O===v.wordType){if(!p||p===ye){V([]);return}const T=xu[x.indexOf(p)]??N([p])[0];if(!T)return;V(P=>P.includes(T)?P.filter(W=>W!==T):[...P,T])}else{const T=Wu[O];if(!T)return;d(P=>u.requireSyllable?p&&p!==ye?{...P,[T]:p}:P:!p||p===ye||P[T]===p?{...P,[T]:null}:{...P,[T]:p})}},[k,Wu,v,I,x,u.requireSyllable]),on=i.useCallback(p=>!u.partOfSpeech&&!u.wordType?!0:Yo(p,{...u.partOfSpeech?{[v.partOfSpeech]:G}:{},...u.wordType?{[v.wordType]:Z}:{}},v),[u.partOfSpeech,u.wordType,G,Z,v]),rn=i.useCallback(p=>{p!==l&&(p!=="direct"&&l!=="direct"&&d(O=>Ut(O,p,C.current,h.current)),s(p))},[l]),ln=i.useCallback(()=>({composition:a,contrastCount:ee,excludeNoImage:f,sameStructureOnly:y,phonemeView:l,gradeFilter:S,posFilter:D,wordTypeFilter:b}),[a,ee,f,y,l,S,D,b]),sn=i.useCallback(p=>{d(p.composition),w(p.excludeNoImage),m(p.sameStructureOnly??!0),s(p.phonemeView),E(Array.isArray(p.gradeFilter)?p.gradeFilter:[]),Array.isArray(p.posFilter)&&j(_(p.posFilter)),Array.isArray(p.wordTypeFilter)&&V(N(p.wordTypeFilter))},[]);return{difficulty:c,contrastCount:ee,composition:a,choseong:a.cho,excludeNoImage:f,sameStructureOnly:y,gradeFilter:S,posFilter:G,wordTypeFilter:Z,matchesWordAttributes:on,poolVersion:Ee,filterSections:un,filterSelected:tn,handleFilterSelect:nn,phonemeView:l,setPhonemeView:rn,phonemeGroupLabel:k.phonemeGroup,wordCount:L,getFilterSnapshot:ln,restoreFilterSnapshot:sn}}function or(e){const u=s=>s?ce(s):null,t=u(e.cho),n=u(e.jung),o=e.jong===re,r=o?null:u(e.jong),l=e.syllable!=null?Iu(e.syllable):null;return!t&&!n&&!r&&!o&&!l?null:{cho:t,jung:n,jong:r,jongNone:o,syllable:l}}function rr(e,u,t,n,o,r,l=!0,s="char",a=[]){const[d,g]=i.useState({}),[c,C]=i.useState(!1),{cho:h=null,jung:f=null,jong:w=null,syllable:y=null}=n??{},m=a.length>0?a.slice().sort().join(","):"",S=e.map(B=>B.key).join("|");i.useEffect(()=>{r>0&&Lo(o).catch(()=>{})},[r,o]),i.useEffect(()=>{let B=!1;return C(!0),(async()=>{const R=or({cho:h,jung:f,jong:w,syllable:y}),_=`${h??""}_${f??""}_${w??""}_${y??""}_${m}`,N={};await Promise.all(e.map(async D=>{const j=yu[D.key];try{const b=await Mt(D.key,{difficulty:j.difficulty?u:null,contrastCount:j.difficulty?t:1,composition:j.choseong?R:null,count:5,excludeNoImage:o,sameStructureOnly:l,phonemeView:s,grade:a.length>0?a:null});b&&b.length>0?N[D.key]={id:`wt-${D.key}-${u}-${_}-${Date.now()}`,name:D.label,training_type:D.key,category_main_code:"WORD",iconColor:D.color,subTitle:D.subTitle,items:b,itemCount:b.length}:N[D.key]={id:`wt-${D.key}-empty`,name:D.label,training_type:D.key,category_main_code:"WORD",iconColor:D.color,subTitle:D.subTitle,items:[],itemCount:0,__empty:!0}}catch{N[D.key]=null}})),B||(g(N),C(!1))})(),()=>{B=!0}},[u,t,h,f,w,y,o,l,s,r,m,S]);const E=JSON.stringify(e.map(B=>[B.key,B.label,B.color,B.subTitle]));return{perTypeData:i.useMemo(()=>{const B={};for(const[R,_]of Object.entries(d)){const N=e.find(D=>D.key===R);B[R]=_&&N?{..._,name:N.label,iconColor:N.color,subTitle:N.subTitle}:_}return B},[d,E]),generating:c}}const $e=[],Ve=[],He=[],Ge=[],lu={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},su={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},lr={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let Pu=null,Jt=null,ge=null;function sr({counts:e,forceRefresh:u}={}){const t=Object.assign({},lr,e||{}),n=Qe(),o=Xe(new Date(`${n}T00:00:00+09:00`).getTime()-864e5),r=JSON.stringify(t);if(!u&&Jt===n&&Pu===r&&ge)return Object.assign(lu,ge.today),Object.assign(su,ge.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:lu,yesterday:su};const l={LISTEN_IN_NOISE:se($e,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:se(Ve,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:se(He,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:se(Ge,Math.max(0,Number(t.ORDERING_SENTENCE)||0))};let s=null;return ge&&Pu===r&&ge.yesterday&&ge.yesterday.date===o&&(s=ge.yesterday.selection),s||(s={LISTEN_IN_NOISE:se($e,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:se(Ve,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:se(He,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:se(Ge,Math.max(0,Number(t.ORDERING_SENTENCE)||0))}),Object.assign(lu,l),Object.assign(su,s),Jt=n,Pu=r,ge={today:l,yesterday:{date:o,countsKey:r,selection:s}},{today:lu,yesterday:su}}let ku=!1,Ye=null;async function ar(){try{const e={url:typeof document>"u"?require("url").pathToFileURL(__filename).href:pu&&pu.tagName.toUpperCase()==="SCRIPT"&&pu.src||new URL("hooks.cjs.js",document.baseURI).href}&&void 0||"/",u=await fetch(`${e}data/allTrainingData.json`);return u.ok?await u.json():null}catch{return null}}async function ir(){if(!ku)return Ye||(Ye=(async()=>{const e=await ar();if(!e){Ye=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}const u={noise:[],short:[],long:[],order:[]};try{for(const t of Object.keys(e||{})){const n=e[t]||[];for(const o of n){if(!o||typeof o!="object")continue;const r=o,l=String(r.training_type||t),s=String(r.category_main_code||r.category_main||r.category_0||""),a=String(r.category_sub_code||r.category_sub||r.category_1||""),d=Object.assign({},r,{training_type:l,category_0:s,category_1:a});l==="LISTEN_IN_NOISE"?u.noise.push(d):l==="SHORT_STORY"?u.short.push(d):l==="LONG_STORY"?u.long.push(d):l==="ORDERING_SENTENCE"&&u.order.push(d)}}}catch{Ye=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}$e.push(...u.noise),Ve.push(...u.short),He.push(...u.long),Ge.push(...u.order),ku=!0;try{sr()}catch{}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}})(),Ye)}async function cr(e=3e3){const u=ir();let t;try{await Promise.race([u,new Promise(n=>{t=setTimeout(n,e)})])}finally{t!==void 0&&clearTimeout(t)}return ku}function Cr(e){let u=2166136261;for(let t=0;t<e.length;t++)u^=e.charCodeAt(t),u=Math.imul(u,16777619);return u>>>0}function dr(e){let u=e>>>0;return()=>{u|=0,u=u+1831565813|0;let t=Math.imul(u^u>>>15,1|u);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}const au=se;function Fu(e,u){const t=u?dr(Cr(u)):Math.random;return{LISTEN_IN_NOISE:au($e,Math.max(0,e.LISTEN_IN_NOISE||0),t),SHORT_STORY:au(Ve,Math.max(0,e.SHORT_STORY||0),t),LONG_STORY:au(He,Math.max(0,e.LONG_STORY||0),t),ORDERING_SENTENCE:au(Ge,Math.max(0,e.ORDERING_SENTENCE||0),t)}}function $u(e){return e?!!(e.LISTEN_IN_NOISE?.length||e.SHORT_STORY?.length||e.LONG_STORY?.length||e.ORDERING_SENTENCE?.length):!1}const fr={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};function Vu(e=!1,u=fr,t){const n=Xe(Date.now()),o=Xe(Date.now()-864e5),r=`${t??""}|${n}`,l=`${t??""}|${o}`;return $e.length>0||Ve.length>0||He.length>0||Ge.length>0?{today:Fu(u,r),yesterday:Fu(u,l)}:{today:Fu(u,r),yesterday:null}}function gr(e){const u=i.useRef({LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),t=i.useRef(null),[n,o]=i.useState(!1),[r,l]=i.useState(!1),[s,a]=i.useState(0),[d,g]=i.useState(!1),[c,C]=i.useState(()=>Qe());i.useEffect(()=>{const f=()=>{const y=Date.now(),m=new Date(y+9*36e5),S=Date.UTC(m.getUTCFullYear(),m.getUTCMonth(),m.getUTCDate()+1)-9*36e5;return Math.max(1e3,S-y+1e3)};let w=setTimeout(function y(){C(Qe()),w=setTimeout(y,f())},f());return()=>clearTimeout(w)},[]),i.useEffect(()=>{let f=!1,w=!1,y=!1,m,S=0;const E=40,B=()=>{m!==void 0&&(clearInterval(m),m=void 0)};let R=!1;try{const j=new URLSearchParams(window.location.search),b=j.get("forceRefresh")||j.get("force");R=b==="1"||b==="true"}catch{}const _=j=>{w||(y=!0,u.current=j.today,t.current=j.yesterday,o(!0),g(!0),a(b=>b+1),f=!0,B())},N=async()=>{if(f)return;if(!R){const b=Vu(!1,void 0,e);if($u(b.today)){_(b);return}}if(S%8===0){try{await cr(3e3)}catch{}if(f)return}const j=Vu(R,void 0,e);if($u(j.today)){_(j);return}++S>=E&&(o(!0),g(!1),f=!0,B())},D=()=>{if(w||y)return;const j=Vu(R,void 0,e);$u(j.today)&&_(j)};try{window.addEventListener("speechear.data.updated",D)}catch{}return N(),m=setInterval(N,250),()=>{f=!0,w=!0,B();try{window.removeEventListener("speechear.data.updated",D)}catch{}}},[e,c]);const h=i.useCallback(f=>{const w=r?t.current:u.current,y=r?u.current:t.current;return w?.[f]?.length?w[f]:y?.[f]?.length?y[f]:void 0},[r,s]);return{loaded:n,hasData:d,showYesterday:r,setShowYesterday:l,getTrainingPerType:h}}const Oe=[];let iu=!1;function Qt(e){if(e.key!=="Escape"||e.defaultPrevented||e.isComposing||e.keyCode===229)return;const u=Oe[Oe.length-1];u&&(e.stopPropagation(),u())}function Xt(e){return Oe.push(e),!iu&&typeof document<"u"&&(document.addEventListener("keydown",Qt),iu=!0),()=>{const u=Oe.lastIndexOf(e);u>=0&&Oe.splice(u,1),Oe.length===0&&iu&&typeof document<"u"&&(document.removeEventListener("keydown",Qt),iu=!1)}}function hr(e,u=!0){const t=Zu(e);i.useEffect(()=>{if(u)return Xt(()=>{t.current?.()})},[u,t])}const Hu=(e,u)=>`${e}:${u??1}`,cu=new Map,Zt=new Set,en=new Map,mr=6e4;function pr(e,u){const[t,n]=i.useState(0),o=Array.from(new Set(e.map(r=>Hu(r.word,r.homonum)))).sort().join("|");return i.useEffect(()=>{const r=o?o.split("|"):[],l=Date.now(),s=r.filter(g=>!cu.has(g)&&!Zt.has(g)&&!(l-(en.get(g)??-1/0)<mr));if(s.length===0)return;let a=!1;const d=Array.from(new Set(s.map(g=>g.slice(0,g.lastIndexOf(":")))));return u(d).then(g=>{for(const c of g)c.Meaning&&cu.set(Hu(c.Word,c.Homonum??void 0),c.Meaning);if(g.length>0)for(const c of s)cu.has(c)||Zt.add(c);else{const c=Date.now();for(const C of s)en.set(C,c)}a||g.length===0||n(c=>c+1)}).catch(()=>{}),()=>{a=!0}},[o,u]),i.useMemo(()=>{const r=o?o.split("|"):[],l=new Map;for(const s of r){const a=cu.get(s);a!=null&&l.set(s,a)}return l},[o,t])}function Sr(){const[e,u]=i.useState(null),t=i.useCallback(r=>u(r.getBoundingClientRect()),[]),n=i.useCallback(()=>u(null),[]),o=i.useCallback(r=>{const l=r.getBoundingClientRect();u(s=>s?null:l)},[]);return{anchorRect:e,isOpen:e!=null,openAt:t,close:n,toggleAt:o}}function yr(e){const[u,t]=i.useState(null),[n,o]=i.useState(null),r=i.useRef(null);i.useEffect(()=>()=>{r.current&&clearTimeout(r.current)},[]);const l=i.useCallback((a,d)=>{r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{t(a),o(d)},e)},[e]),s=i.useCallback(()=>{r.current&&clearTimeout(r.current),t(null),o(null)},[]);return{payload:u,anchorRect:n,openAfterDelay:l,close:s}}function Er(e,u,t){const n=Number.isFinite(u)&&u>=1?Math.floor(u):1,o=Math.max(1,Math.ceil(e.length/n)),r=Number.isFinite(t)?Math.min(Math.max(1,Math.floor(t)),o):1;return{pageItems:i.useMemo(()=>e.slice((r-1)*n,r*n),[e,r,n]),totalPages:o,curPage:r}}function wr(e="warning"){const[u,t]=i.useState(""),[n,o]=i.useState(e),[r,l]=i.useState(0),s=i.useCallback((c,C)=>{o(C),t(c),l(h=>h+1)},[]),a=i.useCallback(c=>s(c,"warning"),[s]),d=i.useCallback(c=>s(c,"normal"),[s]),g=i.useCallback(()=>t(""),[]);return{toastMessage:u,toastType:n,toastKey:r,showToast:s,showWarning:a,showNormal:d,clearToast:g}}const Br=[{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."}],br={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};function Ar(e){return Br.map(u=>{const t=br[u.key];return t?{...u,label:e(`trainingType.${t}.title`),desc:e(`trainingType.${t}.desc`)}:u})}const Ue={blue:"#60A5FA",green:"#4ADE80",amber:"#FBBF24",purple:"#A78BFA",pink:"#F472B6"},We=Ue.blue,Cu=Ue.green,Ke=Ue.amber,du=Ue.purple,_r=Ue.pink,Dr=[{key:"discrimination",label:"\uBCC0\uBCC4\uD6C8\uB828",disc:"\uB450 \uC18C\uB9AC\uAC00 \uAC19\uC740\uC9C0 \uB2E4\uB978\uC9C0, \uB610\uB294 \uD2B9\uC815 \uC18C\uB9AC\uB97C \uAD6C\uBCC4\uD558\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"ear",types:[{key:"SAME_SOUND_PICK",label:"\uAC19\uC740 \uC18C\uB9AC \uACE0\uB974\uAE30",icon:"volume-2",color:We,subTitle:"\uB4E4\uC740 \uC18C\uB9AC\uC640 \uAC19\uC740 \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"SAME_OR_DIFF",label:"\uAC19\uC740\uC9C0 \uB2E4\uB978\uC9C0 \uB9DE\uD788\uAE30",icon:"diff",color:We,subTitle:"\uB450 \uC18C\uB9AC\uAC00 \uAC19\uC740\uC9C0, \uB2E4\uB978\uC9C0 \uAD6C\uBD84\uD558\uC138\uC694."},{key:"HEAR_AND_PICK_SAME",label:"\uC77C\uCE58\uD558\uB294 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"headphones",color:We,subTitle:"\uB4E4\uC740 \uC18C\uB9AC\uC758 \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"HEAR_AND_PICK_INCLUDED",label:"\uD55C \uC74C\uC808 \uD3EC\uD568 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"scan-search",color:We,subTitle:"\uB4E4\uC740 \uC74C\uC808\uC774 \uD3EC\uD568\uB41C \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"STARTS_WITH_SAME_SOUND",label:"\uCCAB \uC74C\uC808\uC774 \uAC19\uC740 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"play-circle",color:We,subTitle:"\uB4E4\uC740 \uB2E8\uC5B4\uC640 \uAC19\uC740 \uC18C\uB9AC\uB85C \uC2DC\uC791\uD558\uB294 \uB2E8\uC5B4\uB97C \uACE0\uB974\uC138\uC694."}]},{key:"synthesis",label:"\uD569\uC131\uD6C8\uB828",disc:"\uB450 \uAC1C \uC774\uC0C1\uC758 \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uD569\uCCD0 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"git-merge",types:[{key:"MERGE_2_SYLLABLES",label:"\uC74C\uC808 2\uAC1C \uD569\uCE58\uAE30",icon:"link-2",color:Cu,subTitle:"\uB450 \uC74C\uC808\uC744 \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_3_SYLLABLES",label:"\uC74C\uC808 3\uAC1C \uD569\uCE58\uAE30",icon:"git-merge",color:Cu,subTitle:"\uC138 \uC74C\uC808\uC744 \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_2_PHONEMES",label:"\uC74C\uC18C 2\uAC1C \uD569\uCE58\uAE30",icon:"combine",color:Cu,subTitle:"\uB450 \uC74C\uC18C\uB97C \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_3_PHONEMES",label:"\uC74C\uC18C 3\uAC1C \uD569\uCE58\uAE30",icon:"braces",color:Cu,subTitle:"\uC138 \uC74C\uC18C\uB97C \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"}]},{key:"deletion",label:"\uD0C8\uB77D\uD6C8\uB828",disc:"\uB2E8\uC5B4\uC5D0\uC11C \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uC81C\uAC70\uD588\uC744 \uB54C \uB0A8\uB294 \uC18C\uB9AC\uB97C \uC778\uC2DD\uD558\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"scissors",types:[{key:"DROP_1_FROM_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C 1\uC74C\uC808 \uD0C8\uB77D",icon:"scissors",color:Ke,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC5D0\uC11C \uD55C \uC74C\uC808\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_1_FROM_3SYLL",label:"3\uC74C\uC808\uC5D0\uC11C 1\uC74C\uC808 \uD0C8\uB77D",icon:"minus-circle",color:Ke,subTitle:"3\uC74C\uC808 \uB2E8\uC5B4\uC5D0\uC11C \uD55C \uC74C\uC808\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_PART_FROM_COMPOUND",label:"\uD569\uC131\uC5B4\uC5D0\uC11C \uBD80\uBD84\uD0C8\uB77D",icon:"unlink",color:Ke,subTitle:"\uD569\uC131\uC5B4\uC758 \uC77C\uBD80\uB97C \uBE7C\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_FINAL_CONSONANT_FROM_1SYLL",label:"1\uC74C\uC808\uC5D0\uC11C \uBC1B\uCE68 \uD0C8\uB77D",icon:"eraser",color:Ke,subTitle:"\uBC1B\uCE68\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"REMOVE_CONSONANT_AND_IDENTIFY_PHONEME",label:"1\uC74C\uC808\uC5D0\uC11C \uC790\uC74C \uD0C8\uB77D",icon:"audio-lines",color:Ke,subTitle:"\uC790\uC74C\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB0A8\uC744\uAE4C\uC694?"}]},{key:"substitution",label:"\uB300\uCE58\uD6C8\uB828",disc:"\uB2E8\uC5B4\uC758 \uC77C\uBD80 \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uBC14\uAFB8\uC5B4 \uC0C8\uB85C\uC6B4 \uC18C\uB9AC\uB97C \uB9CC\uB4DC\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"replace",types:[{key:"CHANGE_1_SYLL_IN_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uBC14\uAFB8\uAE30",icon:"replace",color:du,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC808\uC744 \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_SYLL_IN_3SYLL",label:"3\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uBC14\uAFB8\uAE30",icon:"shuffle",color:du,subTitle:"3\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC808\uC744 \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_PHONEME_IN_1SYLL",label:"1\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC18C \uBC14\uAFB8\uAE30",icon:"arrow-right-left",color:du,subTitle:"1\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC18C\uB97C \uBC14\uAFD4 \uC0C8 \uC18C\uB9AC\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_PHONEME_IN_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC18C \uBC14\uAFB8\uAE30",icon:"flip-horizontal",color:du,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC18C\uB97C \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."}]},{key:"attention",label:"\uCCAD\uAC01\uC801\uC8FC\uC758\uB825\uD6C8\uB828",disc:"\uC5EC\uB7EC \uC18C\uB9AC\uB97C \uB4E3\uACE0 \uC21C\uC11C\uB97C \uAE30\uC5B5\uD558\uB294 \uC8FC\uC758\uB825\uACFC \uB2E8\uAE30 \uAE30\uC5B5 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"list-ordered",types:[{key:"LISTEN_AND_REMEMBER_ORDER",label:"\uB4E3\uACE0 \uC21C\uC11C\uB300\uB85C \uAE30\uC5B5\uD558\uAE30",icon:"list-ordered",color:_r,subTitle:"\uC138 \uB2E8\uC5B4\uB97C \uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCE74\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694."}]}];function Or(){const{t:e}=Ce.useTranslation();return i.useMemo(()=>{const u=Object.fromEntries(Ar(e).map(n=>[n.key,n.label])),t={...u};return Dr.flatMap(n=>n.types).forEach(n=>{t[n.key]=e(`trainingType.${n.key}.label`,{defaultValue:n.label})}),{sentence:u,all:t}},[e])}const Nr="0.149.0";function jr({computeStyle:e,onScroll:u="close",onResize:t="close",ignoreOutsideClickSelector:n}){const[o,r]=i.useState(!1),[l,s]=i.useState({}),a=i.useRef(null),d=i.useRef(null),g=i.useCallback(()=>{a.current&&s(e(a.current.getBoundingClientRect()))},[e]);i.useEffect(()=>{if(!o)return;g();const h=y=>{const m=y.target;n&&m.closest?.(n)||a.current?.contains(m)||d.current?.contains(m)||r(!1)};document.addEventListener("mousedown",h),document.addEventListener("pointerdown",h);const f=y=>{d.current?.contains(y.target)||(u==="reposition"?g():u==="close"&&r(!1))};u!=="ignore"&&window.addEventListener("scroll",f,!0);const w=()=>{t==="reposition"?g():t==="close"&&r(!1)};return t!=="ignore"&&window.addEventListener("resize",w),()=>{document.removeEventListener("mousedown",h),document.removeEventListener("pointerdown",h),u!=="ignore"&&window.removeEventListener("scroll",f,!0),t!=="ignore"&&window.removeEventListener("resize",w)}},[o,g,u,t,n]),i.useEffect(()=>{if(o)return Xt(()=>r(!1))},[o]);const c=i.useCallback(()=>r(h=>!h),[]),C=i.useCallback(()=>r(!1),[]);return{open:o,setOpen:r,toggle:c,close:C,style:l,triggerRef:a,menuRef:d}}function Tr(e,{mode:u="playback",autoStart:t=!1,onPlaySpeaker:n,onComplete:o,playMs:r=1100,feedbackMs:l=1500}={}){const[s,a]=i.useState([]),[d,g]=i.useState(0),[c,C]=i.useState("idle"),[h,f]=i.useState(null),[w,y]=i.useState([]),[m,S]=i.useState(null),[E,B]=i.useState(0),R=i.useRef(0),_=i.useCallback(L=>{R.current=typeof L=="function"?L(R.current):L,B(R.current)},[]),N=i.useRef(n),D=i.useRef(o);i.useEffect(()=>{N.current=n,D.current=o},[n,o]);const j=i.useRef([]),b=()=>{j.current.forEach(clearTimeout),j.current=[]},V=(L,$)=>{j.current.push(setTimeout($,L))};i.useEffect(()=>()=>b(),[]);const Y=s[d]?.id??null,v=i.useRef(null),I=i.useCallback(()=>{b(),C("playing"),y([]),S(null),_(0);let L=0;e.forEach(($,U)=>{V(L,()=>{g(U),f($.id),N.current?.($)}),V(L+1e3,()=>{f(null),y(ee=>[...ee,$.id])}),L+=1300}),V(L,()=>{C("done"),D.current?.({score:0,total:e.length})})},[e,_]),x=i.useCallback((L,$)=>{if($>=L.length){C("done"),D.current?.({score:R.current,total:L.length});return}v.current=null,g($),S(null),C("playing"),f(L[$].id),N.current?.(L[$]),V(r,()=>{f(null),C("waiting")})},[r]),G=i.useCallback(()=>{b();const L=F(e);a(L),_(0),y([]),x(L,0)},[e,x,_]),Z=i.useCallback(()=>{u==="playback"?(a(e),I()):G()},[u,e,I,G]),K=i.useCallback(()=>{b(),C("idle"),f(null),y([]),S(null),g(0),_(0),a([])},[_]),he=e.map(L=>L.id).join("|");i.useEffect(()=>(t?Z():K(),()=>b()),[u,he,t]);const A=i.useCallback(L=>{c!=="waiting"||u==="playback"||v.current===d||(v.current=d,S(L),L===s[d]?.id&&_($=>$+1),u==="exam"?(C("playing"),V(400,()=>x(s,d+1))):(C("feedback"),V(l,()=>x(s,d+1))))},[c,u,s,d,x,l,_]),M=u==="playback"?e.length:s.length;return{bind:{activeSpeakerId:h,playedIds:w,selectedId:m,answerId:Y,showFeedback:c==="feedback",clickable:c==="waiting",onSelectSpeaker:A},index:d,total:M,score:E,phase:c,done:c==="done",start:Z,reset:K}}exports.CACHE_GROUPS=dt,exports.CORE_VERSION=Nr,exports.DocumentTitleSuppressContext=tt,exports.EMPTY_COMPOSITION=Lu,exports.MediaQueryOverrideContext=Qu,exports.NO_CODA=re,exports.SYLLABLE_MIN=le,exports.VAP_PAGE_SIZE_OPTIONS=Ze,exports.buildGradeSection=Lt,exports.buildPartOfSpeechSection=vt,exports.buildPositionSection=Fo,exports.buildSelectSection=ko,exports.buildSyllableSection=Po,exports.buildWordTypeSection=xt,exports.charToPronValue=Gt,exports.convertComposition=Ut,exports.fmtBytes=Pn,exports.lsBytes=ft,exports.meaningKey=Hu,exports.pronToCharValue=Yt,exports.syllableToFilter=Iu,exports.today=ve,exports.toggleAttributeFilter=$o,exports.useAnchoredMenu=jr,exports.useCacheManagement=kn,exports.useDailyTrainingSelection=gr,exports.useDelayedHoverAnchor=yr,exports.useDeviceManagement=Kn,exports.useDocumentTitle=yn,exports.useEscToClose=hr,exports.useFontScale=fn,exports.useHoverAnchor=Sr,exports.useMediaQuery=Sn,exports.usePagedList=Er,exports.usePasswordChange=bn,exports.useRelativeDay=En,exports.useSoundCompassExam=Tr,exports.useTablePaging=Un,exports.useTableSort=Wn,exports.useToastState=wr,exports.useTrainingTypeLabels=Or,exports.useVisitAllPanel=Yn,exports.useVisitHistory=Vn,exports.useVisitSchedule=Gn,exports.useWindowEvent=et,exports.useWordAttributeFilterKeys=Rt,exports.useWordDataStats=Fn,exports.useWordMeanings=pr,exports.useWordTrainingDataGeneration=rr,exports.useWordTrainingFilter=nr,exports.valueToJamos=ce;
|
|
1
|
+
"use strict";var s=require("react"),se=require("react-i18next"),ae=require("i18next"),Bt=typeof document<"u"?document.currentScript:null;function Ro(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if(n!=="default"){var o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,Object.freeze(t)}var sn=Ro(s);function Po({storageKey:e="fontScale",baseFont:t=20,minScale:n=.8,maxScale:o=1.4,step:r=.1,lineHeightRatio:a=1.4}={}){const u=S=>Math.max(n,Math.min(o,Number(S))),i=S=>{try{const E=localStorage.getItem(S),M=E?Number(E):1;return Number.isFinite(M)?u(M):u(1)}catch{return u(1)}},[l,c]=s.useState(()=>i(e)),[g,d]=s.useState(e);g!==e&&(d(e),c(i(e))),s.useEffect(()=>{try{localStorage.setItem(e,String(l))}catch{}},[e,l]);const C=S=>{c(typeof S=="function"?E=>u(S(E)):u(S))},f=()=>C(S=>+(S+r).toFixed(6)),m=()=>C(S=>+(S-r).toFixed(6)),w=l<o-Number.EPSILON,h=l>n+Number.EPSILON,p=Math.round(t*l),y=Math.round(p*a);return{scale:l,setScale:C,increase:f,decrease:m,canIncrease:w,canDecrease:h,fontSize:p,lineHeight:y}}const cn=s.createContext(null);function Mo(e){return/max-width:\s*7[0-9][0-9]px/.test(e)}const dn=e=>typeof window>"u"||!window.matchMedia?!1:window.matchMedia(e).matches;function Io(e){const t=s.useCallback(n=>{if(typeof window>"u"||!window.matchMedia)return()=>{};const o=window.matchMedia(e);return o.addEventListener?o.addEventListener("change",n):o.addListener&&o.addListener(n),()=>{o.removeEventListener?o.removeEventListener("change",n):o.removeListener&&o.removeListener(n)}},[e]);return sn.useSyncExternalStore(t,()=>dn(e),()=>!1)}function ko(e){const[t,n]=s.useState(dn(e));return s.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;const o=window.matchMedia(e),r=u=>n(u.matches),a=o;return a.addEventListener?a.addEventListener("change",r):a.addListener&&a.addListener(r),n(o.matches),()=>{a.removeEventListener?a.removeEventListener("change",r):a.removeListener&&a.removeListener(r)}},[e]),t}const xo=typeof sn.useSyncExternalStore=="function"?Io:ko;function jo(e){const t=s.useContext(cn),n=xo(e);return t&&typeof t.mobile=="boolean"&&Mo(e)?t.mobile:n}function Cn(e){const t=s.useRef(e);return s.useEffect(()=>{t.current=e}),t}function gn(e,t){const n=Cn(t);s.useEffect(()=>{const o=()=>n.current();try{window.addEventListener(e,o)}catch{}return()=>{try{window.removeEventListener(e,o)}catch{}}},[e,n])}const Dt=" \xB7 ",fn=(()=>{if(typeof document>"u")return"";const e=document.title;return e.includes(Dt)?e.split(Dt).pop()??e:e})(),mn=s.createContext(!1),be=[];let pn=null;function Fo(e){const t=s.useContext(mn);s.useEffect(()=>{if(t||typeof e!="string"||!e)return;be.length===0&&(pn=document.title);const n={text:fn?`${e}${Dt}${fn}`:e};return be.push(n),document.title=n.text,()=>{const o=be.lastIndexOf(n);o>=0&&be.splice(o,1),document.title=be.length?be[be.length-1].text:pn??document.title}},[e,t])}const $o=/^(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2})(?::(\d{2})(?:\.(\d+))?)?$/;function Ho(e){let t;if(e instanceof Date)t=e;else if(typeof e=="string"){const n=e.trim(),o=$o.exec(n);t=new Date(o?`${o[1]}T${o[2]}:${o[3]??"00"}${o[4]?`.${o[4].slice(0,3).padEnd(3,"0")}`:""}+09:00`:n)}else t=new Date(e);return Number.isNaN(t.getTime())?null:t}function Oe(){return Re(new Date)}function Re(e){if(e==null||e==="")return"";const t=Ho(e);return t?new Intl.DateTimeFormat("fr-CA",{timeZone:"Asia/Seoul"}).format(t):""}function Go(e,t){const[n,o,r]=e.split("-").map(Number),[a,u,i]=t.split("-").map(Number);return Math.round((Date.UTC(a,u-1,i)-Date.UTC(n,o-1,r))/864e5)}function Vo(){const{t:e}=se.useTranslation();return s.useCallback(t=>{if(!t)return"";const n=Re(t);if(!n)return"";const o=Go(n,Oe());return o<=0?e("myHomework.relativeDay.today","\uC624\uB298"):o===1?e("myHomework.relativeDay.yesterday","\uC5B4\uC81C"):e("myHomework.relativeDay.daysAgo",{n:o})},[e])}const Wo=()=>{const e="\uC54C \uC218 \uC5C6\uB294 \uC624\uB958",t=typeof ae?.t=="function"?ae.t("common.unknownError",{defaultValue:e}):void 0;return typeof t=="string"&&t?t:e};function Yo(e,t){if(t===void 0&&(t=Wo()),e instanceof Error)return e.message||t;if(typeof e=="string")return e||t;if(e&&typeof e=="object"){const n=e;for(const o of[n.message,n.error_description,n.error])if(typeof o=="string"&&o)return o}return t}function Ko(e){const{t}=se.useTranslation(),[n,o]=s.useState({current:"",next:"",confirm:""}),[r,a]=s.useState(null),[u,i]=s.useState(!1),l=s.useRef(null),c=s.useRef(!1);s.useEffect(()=>()=>{l.current!==null&&clearTimeout(l.current)},[]);const g=s.useCallback(()=>{o({current:"",next:"",confirm:""}),a(null)},[]),d=s.useCallback(async()=>{if(c.current)return;if(!n.current){a({type:"error",text:t("account.security.password.currentRequired","\uD604\uC7AC \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694.")});return}if(!n.next){a({type:"error",text:t("account.security.password.newRequired","\uC0C8 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694.")});return}if(n.next!==n.confirm){a({type:"error",text:t("account.security.password.mismatch","\uC0C8 \uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.")});return}i(!0),c.current=!0;let C;try{C=e?await e(n.current,n.next):null}catch(f){C=Yo(f)}finally{c.current=!1,i(!1)}if(C){a({type:"error",text:C});return}a({type:"success",text:t("account.security.password.changed","\uBE44\uBC00\uBC88\uD638\uAC00 \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4.")}),o({current:"",next:"",confirm:""}),l.current!==null&&clearTimeout(l.current),l.current=setTimeout(()=>a(null),1500)},[n,e,t]);return{pw:n,setPw:o,pwMsg:r,setPwMsg:a,pwLoading:u,handleChangePw:d,reset:g}}const Q=["\u3131","\u3132","\u3134","\u3137","\u3138","\u3139","\u3141","\u3142","\u3143","\u3145","\u3146","\u3147","\u3148","\u3149","\u314A","\u314B","\u314C","\u314D","\u314E"],te=["\u314F","\u3150","\u3151","\u3152","\u3153","\u3154","\u3155","\u3156","\u3157","\u3158","\u3159","\u315A","\u315B","\u315C","\u315D","\u315E","\u315F","\u3160","\u3161","\u3162","\u3163"],oe=["","\u3131","\u3132","\u3133","\u3134","\u3135","\u3136","\u3137","\u3139","\u313A","\u313B","\u313C","\u313D","\u313E","\u313F","\u3140","\u3141","\u3142","\u3144","\u3145","\u3146","\u3147","\u3148","\u314A","\u314B","\u314C","\u314D","\u314E"];function V(e){if(!e)return null;const t=e.charCodeAt(0)-44032;return t<0||t>=11172?null:{cho:Math.floor(t/588),jung:Math.floor(t%588/28),jong:t%28}}function Uo(){const e=new Map;return t=>{let n=e.get(t);return n||(n=[...t].map(o=>V(o)),e.set(t,n)),n}}function fe(e,t,n=0){return String.fromCharCode(44032+(e*21+t)*28+n)}function zo(e,t){if(!e||!t||e===t||e.length!==t.length)return"random";let n=0,o=null;for(let r=0;r<e.length;r++){const a=V(e[r]),u=V(t[r]);if(!a||!u)return"random";if(a.cho===u.cho&&a.jung===u.jung&&a.jong===u.jong)continue;n++;const i=a.cho!==u.cho,l=a.jung!==u.jung,c=a.jong!==u.jong;(i?1:0)+(l?1:0)+(c?1:0)>1?o="multi":i?o="cho":l?o="jung":o="jong"}return n!==1?"random":o==="cho"?"cho":o==="jung"?"jung":o==="jong"?"jong":"random"}const Pe={3:["\u3131","\u3145"],5:["\u3134","\u3148"],6:["\u3134","\u314E"],9:["\u3139","\u3131"],10:["\u3139","\u3141"],11:["\u3139","\u3142"],12:["\u3139","\u3145"],13:["\u3139","\u314C"],14:["\u3139","\u314D"],15:["\u3139","\u314E"],18:["\u3142","\u3145"]};Object.fromEntries(Object.entries(Pe).map(([e,t])=>[t.join(""),oe[Number(e)]]));function qo(e,t){if(!e||!t)return!1;for(const n of e){const o=V(n);if(o){if(Q[o.cho]===t)return!0;if(o.jong>0){if(oe[o.jong]===t)return!0;const r=Pe[o.jong];if(r&&r.includes(t))return!0}}}return!1}function Me(e){if(!e)return 0;let t=0;for(const n of e)V(n)&&t++;return t}function Jo(e){if(!e)return!1;let t=!1;for(const n of e){const o=V(n);if(o&&(t=!0,o.jong>0))return!1}return t}function Qo(e,t){if(e.jong<=0)return!1;if(t.includes(oe[e.jong]))return!0;const n=Pe[e.jong];return!!n&&n.some(o=>t.includes(o))}function Zo(e,t,n){if(!e)return!1;const o=[...e],r=a=>{const u=V(o[a]);if(!u||t.cho&&!t.cho.includes(Q[u.cho])||t.jung&&!t.jung.includes(te[u.jung]))return!1;if(t.jongNone){if(u.jong>0)return!1}else if(t.jong&&!Qo(u,t.jong))return!1;return!0};if(n==="head")return r(0);if(n==="tail")return r(o.length-1);if(n==="mid"){for(let a=1;a<o.length-1;a++)if(r(a))return!0;return!1}for(let a=0;a<o.length;a++)if(r(a))return!0;return!1}const Xo={cho:Q.length,jung:te.length,jong:oe.length};function er(e,t,n,o,r=1/0){if(!e||n<1)return[];const a=[...e].map(d=>V(d));if(a.some(d=>!d))return[];const u=a,i=u.length;if(n>i)return[];const l=Xo[t],c=new Set,g=[];(function d(C,f){if(f.length===n){g.push([...f]);return}for(let m=C;m<i;m++)f.push(m),d(m+1,f),f.pop()})(0,[]);for(const d of g)if((function C(f,m){if(c.size>=r)return;if(f===d.length){const p=m.map(y=>fe(y.cho,y.jung,y.jong)).join("");p!==e&&o.has(p)&&c.add(p);return}const w=d[f],h=u[w][t];for(let p=0;p<l;p++){if(p===h)continue;const y=m.slice();if(y[w]={...m[w],[t]:p},C(f+1,y),c.size>=r)return}})(0,u),c.size>=r)break;return[...c]}function tr(e,t){if(!e||!t||e.length!==t.length)return-1;let n=0;for(let o=0;o<e.length;o++){const r=V(e[o]),a=V(t[o]);if(!r||!a)return-1;r.cho!==a.cho&&n++,r.jung!==a.jung&&n++,r.jong!==a.jong&&n++}return n}const hn="word_pair_index_v2",yn="word_pair_index_sig_v2";let Ie=null;function nr(){try{if(typeof localStorage>"u")return null;const e=localStorage.getItem(hn),t=localStorage.getItem(yn);return!e||!t?null:{index:JSON.parse(e),sig:t}}catch{return null}}function ke(){if(Ie)return Ie;const e=nr();return e?(Ie=e.index,e.sig,Ie):null}function or(){Ie=null;try{typeof localStorage<"u"&&(localStorage.removeItem(hn),localStorage.removeItem(yn))}catch{}}const bn="word_image_existence_map_v1";let De=null,xe=0,Sn=-1,je=null,wn=-1,En=new Set;function An(){if(De)return De;try{const e=typeof localStorage<"u"?localStorage.getItem(bn):null,t=e?JSON.parse(e):null;De=t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{De={}}return De}function vn(){const e=An();if(Sn===xe)return je?{...je}:null;const t=Object.values(e);return je=t.length===0?null:{total:t.length,exists:t.filter(Boolean).length},Sn=xe,je?{...je}:null}function rr(){const e=An();if(wn===xe)return En;const t=new Set;for(const n in e)e[n]===!0&&n.endsWith("_1")&&t.add(n.slice(0,-2));return En=t,wn=xe,t}function ar(){De={},xe++;try{typeof localStorage<"u"&&localStorage.removeItem(bn)}catch{}}const Bn=[{id:"wordData",labelKey:"settings.cache.group.wordData.label",subKey:"settings.cache.group.wordData.sub",keys:["word_data_cache","word_data_version"]},{id:"pairIndex",labelKey:"settings.cache.group.pairIndex.label",subKey:"settings.cache.group.pairIndex.sub",keys:["word_pair_index_v2","word_pair_index_sig_v2"]},{id:"imageCache",labelKey:"settings.cache.group.imageCache.label",subKey:"settings.cache.group.imageCache.sub",keys:["word_image_existence_map_v1"]}];function Dn(e){return e.reduce((t,n)=>{try{const o=localStorage.getItem(n);return t+(o?new Blob([o]).size:0)}catch{return t}},0)}function ur(e){return e===0?"0 B":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(2)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function ir(e){const{t}=se.useTranslation(),[n,o]=s.useState({}),[r,a]=s.useState(null),[u,i]=s.useState(null),[l,c]=s.useState(null),g=s.useCallback(()=>{const C={};Bn.forEach(f=>{C[f.id]=Dn([...f.keys])}),o(C),typeof navigator<"u"&&navigator.storage?.estimate&&navigator.storage.estimate().then(f=>{c({usage:f.usage??0,quota:f.quota??0})}).catch(()=>{})},[]);s.useEffect(()=>{g()},[g]);const d=s.useCallback(async C=>{a(C);try{C==="wordData"?(localStorage.removeItem("word_data_cache"),localStorage.removeItem("word_data_version")):C==="pairIndex"?or():C==="imageCache"&&ar(),g(),e?.(t("settings.cache.cleared","\uCE90\uC2DC\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4."))}finally{a(null)}},[g,e,t]);return{cacheSizes:n,clearingId:r,confirmCacheId:u,setConfirmCacheId:i,storageEstimate:l,refreshCacheSizes:g,handleClearCache:d}}function lr(e){const[t,n]=s.useState(null),[o,r]=s.useState(null),a=s.useCallback(()=>{const u=ke();if(u){const l=Object.values(u),c=l.filter(g=>g.cho.length+g.jung.length+g.jong.length>0).length;n({matched:c,total:l.length})}else n(null);const i=vn();r(i?{exists:i.exists,total:i.total}:null)},[]);return s.useEffect(()=>{a();const u=setTimeout(a,1e3);return()=>clearTimeout(u)},[e?.length,a]),{pairStats:t,imgStats:o,setPairStats:n,setImgStats:r,refreshStats:a}}function Se(e,t){if(e===t)return!0;const n=e?.id,o=t?.id;return n!=null&&n!==""&&n===o}function Tn(e,t=[]){const[n,o]=s.useState(t),[r,a]=s.useState(null),[u,i]=s.useState(!1),[l,c]=s.useState(e),g=s.useRef(!1),d=s.useRef(null);s.useEffect(()=>{if(u)return;if(g.current){g.current=!1;return}const p=d.current;p!==null&&p.length===t.length&&p.every((y,S)=>y===t[S])||(d.current=t,o(t),a(y=>y==null?y:t.find(S=>Se(S,y))??y))},[t,u]),s.useEffect(()=>{!u&&r!=null&&c({...r})},[u,r]);const C=s.useCallback(p=>{a(p),i(!1),c({...p})},[]),f=s.useCallback(()=>i(!0),[]),m=s.useCallback(()=>i(!1),[]),w=s.useCallback((p,y)=>{o(p),a(y),i(S=>(S&&(g.current=!0),!1))},[]),h=s.useCallback(p=>{o(y=>y.filter(S=>!Se(S,p))),a(null)},[]);return{list:n,setList:o,selected:r,setSelected:a,isEditing:u,setIsEditing:i,editForm:l,setEditForm:c,openDetail:C,startEditing:f,cancelEditing:m,commitEdit:w,remove:h}}const Fe=()=>{const[e,t,n]=Oe().split("-");return{year:e,month:t,day:n}},sr={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function cr(e=[]){const{list:t,setList:n,selected:o,setSelected:r,isEditing:a,setIsEditing:u,editForm:i,setEditForm:l,openDetail:c,commitEdit:g}=Tn(sr,e),{year:d,month:C,day:f}=Fe(),[m,w]=s.useState({year:d,month:C,day:f,hour:"09",minute:"00",memo:""});return{visitHistory:t,visitForm:m,setVisitForm:w,setVisit:h=>p=>w(y=>({...y,[h]:p})),selectedVisit:o,setSelectedVisit:r,isEditingVisit:a,setIsEditingVisit:u,editVisitForm:i,setEditVisitForm:l,openVisitDetail:c,handleVisitSave:h=>{n(E=>[m,...E]);const{year:p,month:y,day:S}=Fe();w({year:p,month:y,day:S,hour:"09",minute:"00",memo:""}),h?.()},handleVisitEditSave:()=>{g(h=>h.map(p=>o!=null&&Se(p,o)?i:p),i)},addVisit:h=>{n(p=>[h,...p])},removeVisit:h=>{n(p=>p.filter(y=>!Se(y,h)))},revertVisitEdit:(h,p)=>{n(y=>y.map(S=>S===p?h:S)),r(y=>y===p?h:y)}}}const Nn=e=>`${e.year.padStart(4,"0")}-${e.month.padStart(2,"0")}-${e.day.padStart(2,"0")} ${e.hour.padStart(2,"0")}:${e.minute.padStart(2,"0")}`,$e=e=>[...e].sort((t,n)=>{const o=Nn(t),r=Nn(n);return o<r?-1:o>r?1:0}),dr={year:"",month:"",day:"",hour:"09",minute:"00",memo:""};function Cr(e,t=[]){const n=s.useMemo(()=>$e(t),[t]),{list:o,setList:r,selected:a,setSelected:u,isEditing:i,setIsEditing:l,editForm:c,setEditForm:g,openDetail:d,commitEdit:C,remove:f}=Tn(dr,n),[m,w]=s.useState([]),{year:h,month:p,day:y}=Fe(),[S,E]=s.useState({year:h,month:p,day:y,hour:"09",minute:"00",memo:""}),M=L=>k=>E(W=>({...W,[L]:k})),B=L=>{r(U=>$e([...U,S]));const{year:k,month:W,day:X}=Fe();E({year:k,month:W,day:X,hour:"09",minute:"00",memo:""}),L?.()},T=()=>{C(L=>$e(L.map(k=>a!=null&&Se(k,a)?c:k)),c)},D=s.useCallback(L=>{f(L)},[f]),I=s.useCallback(L=>{e({year:L.year,month:L.month,day:L.day,hour:L.hour,minute:L.minute,memo:L.memo,...L.id!=null?{id:L.id}:{}}),f(L)},[e,f]),A=s.useCallback(L=>{r(k=>k.filter(W=>!Se(W,L))),w(k=>[L,...k]),u(null)},[r,u]),$=s.useCallback(L=>{r(k=>$e([...k,L]))},[r]),F=s.useCallback(L=>{r(k=>k.filter(W=>!Se(W,L)))},[r]),R=s.useCallback((L,k)=>{r(W=>$e(W.map(X=>X===k?L:X))),u(W=>W===k?L:W)},[r,u]);return{scheduleList:o,noShowList:m,addSchedule:$,removeSchedule:F,revertScheduleEdit:R,scheduleForm:S,setScheduleForm:E,setSchedule:M,selectedSchedule:a,setSelectedSchedule:u,isEditingSchedule:i,setIsEditingSchedule:l,editScheduleForm:c,setEditScheduleForm:g,openScheduleDetail:d,handleScheduleSave:B,handleScheduleEditSave:T,handleScheduleDelete:D,handleScheduleToVisit:I,handleScheduleNoVisit:A}}const ot=[{value:"10",label:"10\uAC1C\uC529 \uBCF4\uAE30"},{value:"25",label:"25\uAC1C\uC529 \uBCF4\uAE30"},{value:"50",label:"50\uAC1C\uC529 \uBCF4\uAE30"},{value:"100",label:"100\uAC1C\uC529 \uBCF4\uAE30"}];function gr(e){const{t}=se.useTranslation(),[n,o]=s.useState(""),[r,a]=s.useState("25"),[u,i]=s.useState("all"),[l,c]=s.useState(1),g=s.useMemo(()=>e.filter(({item:w,status:h})=>!(n&&!w.memo.includes(n)||u!=="all"&&h!==u)),[e,n,u]),d=Math.max(1,Math.ceil(g.length/Number(r))),C=Math.min(l,d),f=s.useMemo(()=>g.slice((C-1)*Number(r),C*Number(r)),[g,C,r]),m=s.useMemo(()=>ot.map(w=>({...w,label:t("common.pageSizeLabel",{n:w.value,defaultValue:w.label})})),[t]);return{vapSearch:n,setVapSearch:o,vapPageSize:r,setVapPageSize:a,vapPageSizeOptions:m,vapStatus:u,setVapStatus:i,vapPage:C,setVapPage:c,vapFiltered:g,vapTotal:d,vapPageItems:f}}const fr=(()=>{let e=null;return()=>(e||(e=new Intl.Collator("ko")),e)})();function _n(e,t){return fr().compare(e,t)}const rt=new Map;function mr(e){const t=rt.get(e);if(t)return t;const n=[],o=/-?\d+(?:\.\d+)?/g;let r=0;for(let a=o.exec(e);a;a=o.exec(e)){let u=a.index,i=a[0];i[0]==="-"&&u>0&&!/\s/.test(e[u-1])&&(u+=1,i=i.slice(1)),u>r&&n.push(e.slice(r,u)),n.push(Number(i)),r=a.index+a[0].length}return r<e.length&&n.push(e.slice(r)),rt.size>5e3&&rt.clear(),rt.set(e,n),n}function pr(e){if(!/^[\d\s-]+$/.test(e))return null;const t=e.replace(/\D/g,"");return t.length<9||t.length>11?null:t[0]==="0"||t[0]==="1"&&e!==t?t:null}function hr(e,t){const n=c=>c==null||typeof c=="number"&&Number.isNaN(c)?"":String(c).trim(),o=n(e),r=n(t);if(o===r)return 0;const a=(c,g)=>{if(typeof c=="number"&&!Number.isNaN(c))return[c];const d=pr(g);return d!==null?[d]:mr(g)},u=a(e,o),i=a(t,r),l=Math.min(u.length,i.length);for(let c=0;c<l;c++){const g=u[c],d=i[c];if(typeof g=="number"&&typeof d=="number"){if(g!==d)return g-d;continue}if(typeof g=="number")return-1;if(typeof d=="number")return 1;const C=_n(g,d);if(C!==0)return C}return u.length!==i.length?u.length-i.length:_n(o,r)}const Ln=e=>e==null||typeof e=="number"&&Number.isNaN(e)||typeof e=="string"&&e.trim()==="";function yr(e,t,n){const o=Ln(e),r=Ln(t);if(o||r)return o===r?0:o?1:-1;const a=hr(e,t);return n?a:-a}function br(e,t,n){const{t:o}=se.useTranslation(),[r,a]=s.useState(()=>{const m=n?.initialPageSize;return m&&ot.some(w=>w.value===m)?m:"25"}),[u,i]=s.useState(1),[l,c]=s.useState(t);Object.is(l,t)||(c(t),u!==1&&i(1));const g=s.useMemo(()=>ot.map(m=>({...m,label:o("visits.showN",{n:m.value})})),[o]),d=s.useCallback(m=>{a(m),i(1)},[]),C=Math.max(1,Math.ceil(e.length/Number(r)));(u>C||u<1||!Number.isFinite(u))&&i(Math.min(Math.max(1,Number.isFinite(u)?u:1),C));const f=Math.min(Math.max(1,Number.isFinite(u)?u:1),C);return{pageRows:s.useMemo(()=>e.slice((f-1)*Number(r),f*Number(r)),[e,f,r]),pageSizeProps:{options:g,value:r,onChange:d},paginationProps:{page:f,total:C,onChange:i},setPage:i}}function Sr(e){const[t,n]=s.useState(null),o=s.useRef(t),r=s.useRef(e?.onSortChange);r.current=e?.onSortChange;const a=s.useCallback(l=>{const c=o.current,g=c?.key===l?{key:l,asc:!c.asc}:{key:l,asc:!0};o.current=g,n(g),r.current?.(g)},[]),u=s.useCallback((l,c)=>({label:l,sortDir:t?.key===c?t.asc?"asc":"desc":null,onClick:()=>a(c)}),[t,a]),i=s.useCallback((l,c)=>{if(!t)return l;const{key:g,asc:d}=t;return[...l].sort((C,f)=>yr(c(C,g),c(f,g),d))},[t]);return{\uC815\uB82C:t,\uCE78:u,sortRows:i}}const On=e=>e==="\uC88C"||e==="\uC6B0"?e:null;function wr(){const[e,t]=s.useState(!1),[n,o]=s.useState("\uC88C"),[r,a]=s.useState({\uC88C:null,\uC6B0:null}),[u,i]=s.useState({\uC88C:[],\uC6B0:[]}),[l,c]=s.useState(!1),[g,d]=s.useState("\uC88C"),C=s.useCallback(m=>{const w=On(m.direction);w&&(a(h=>({...h,[w]:m})),i(h=>({...h,[w]:[m,...h[w]]})),t(!1))},[]),f=s.useCallback(m=>{const w=On(m.direction);w&&(a(h=>({...h,[w]:m})),c(!1))},[]);return{showDevice:e,setShowDevice:t,deviceDirection:n,setDeviceDirection:o,devices:r,setDevices:a,deviceHistory:u,setDeviceHistory:i,showDeviceList:l,setShowDeviceList:c,listForSide:g,setListForSide:d,handleDeviceSubmit:C,handleSelectFromList:f}}const Er="__ihab_core_word_pool__";function at(){return globalThis[Er]??null}function H(e,t=Math.random){const n=e.slice();for(let o=n.length-1;o>0;o--){const r=Math.floor(t()*(o+1));[n[o],n[r]]=[n[r],n[o]]}return n}function ce(e,t,n=Math.random){return!Array.isArray(e)||e.length===0||t<=0?[]:t>=e.length?H(e,n):H(e,n).slice(0,t)}const Tt={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"}},Nt=Q.indexOf("\u3147"),ut={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!==Nt},MERGE_2_SYLLABLES:{syllables:2,syllable:()=>!0},MERGE_3_SYLLABLES:{syllables:3,syllable:()=>!0},MERGE_2_PHONEMES:{syllables:1,syllable:e=>e.jong===0&&e.cho!==Nt},MERGE_3_PHONEMES:{syllables:1,syllable:e=>e.jong>0&&!Pe[e.jong]&&e.cho!==Nt}},Ar={\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"},_t={\u314F:{nucleus:"\u314F"},\u3151:{glide:"j",nucleus:"\u314F"},\u3153:{nucleus:"\u3153"},\u3155:{glide:"j",nucleus:"\u3153"},\u3157:{nucleus:"\u3157"},\u315B:{glide:"j",nucleus:"\u3157"},\u315C:{nucleus:"\u315C"},\u3160:{glide:"j",nucleus:"\u315C"},\u3161:{nucleus:"\u3161"},\u3163:{nucleus:"\u3163"},\u3150:{nucleus:"\u3154/\u3150"},\u3152:{glide:"j",nucleus:"\u3154/\u3150"},\u3154:{nucleus:"\u3154/\u3150"},\u3156:{glide:"j",nucleus:"\u3154/\u3150"},\u3158:{glide:"w",nucleus:"\u314F"},\u3159:{glide:"w",nucleus:"\u3154/\u3150"},\u315A:{glide:"w",nucleus:"\u3154/\u3150"},\u315D:{glide:"w",nucleus:"\u3153"},\u315E:{glide:"w",nucleus:"\u3154/\u3150"},\u315F:{glide:"w",nucleus:"\u3163"},\u3162:{glide:"\u0270",nucleus:"\u3163"}};function vr(e,t){return(_t[e]?.glide??"")!==(_t[t]?.glide??"")}function Lt(e){return Ar[e]??e}const Ot={cho:Q,jung:te,jong:oe},z=e=>Array.isArray(e)?e.length>0:!!e;function Rt(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){const o=e[n],r=t[n];if(!(!o||!r)&&(o.cho!==r.cho&&Q[o.cho]==="\u3147"!=(Q[r.cho]==="\u3147")||o.jung!==r.jung&&vr(te[o.jung],te[r.jung])||o.jong!==r.jong&&o.jong===0!=(r.jong===0)))return!0}return!1}function Br(e,t,n){const o=n.pronOf(e),r=n.decompOf,a=n.sameStructureOnly&&r?r(o):null,u=[];for(const i of t)i!==e&&(n.okSet&&!n.okSet.has(i)||n.pronOf(i)!==o&&(a&&r&&Rt(a,r(n.pronOf(i)))||u.push(i)));return u}function Rn(e,t,n){const o=t?.[e];if(!o)return[];const r=n.kind?o[n.kind]??[]:[...o.cho??[],...o.jung??[],...o.jong??[]];return Br(e,r,n)}function Dr(e,t,n,o,r,a,u){const i=["cho","jung","jong"].filter(C=>z(e[C])),l={};for(const C of i){const f=e[C];l[C]=new Set(Array.isArray(f)?f:[f])}const c=r==="pron",g=new Map;for(const C of t){const f=n(a(C));if(f.some(p=>!p))continue;let m=f;if(!c&&(m=n(C),m.length!==f.length||m.some(p=>!p)))continue;const w=f.length,h=g.get(w);h?h.push({w:C,dPron:f,dPos:m}):g.set(w,[{w:C,dPron:f,dPos:m}])}const d=new Map;for(const[C,f]of g){const m=new Map,w=(h,p)=>{const y=h.dPos[p];return y!=null&&i.every(S=>l[S].has(Ot[S][y[S]]))};for(const h of f){let p;if(u==="head")p=w(h,0)?0:-1;else if(u==="tail")p=w(h,C-1)?C-1:-1;else if(u==="mid"){p=-1;for(let S=1;S<C-1;S++)if(w(h,S)){p=S;break}}else p=h.dPos.findIndex(S=>S!=null&&i.every(E=>l[E].has(Ot[E][S[E]])));if(p<0)continue;const y=m.get(p);y?y.push(h):m.set(p,[h])}for(const[h,p]of m){const y=i.includes("cho"),S=i.includes("jung"),E=i.includes("jong"),M=T=>{let D="";for(let I=0;I<C;I++){const A=T[I];I===h?D+=(y?"*":A.cho)+"."+(S?"*":A.jung)+"."+(E?"*":A.jong)+".":D+=A.cho+"."+A.jung+"."+A.jong+"."}return D},B=new Map;for(const T of f){const D=M(T.dPron),I=B.get(D);I?I.push(T):B.set(D,[T])}for(const T of p){const D=B.get(M(T.dPron))??[],I=[];for(const A of D){if(A.w===T.w)continue;let $=!0;for(const F of i){const R=T.dPron[h][F],L=A.dPron[h][F];if(L===R){$=!1;break}if(c&&l[F].has(Ot[F][L])){$=!1;break}}$&&(o&&Rt(T.dPron,A.dPron)||I.push(A.w))}d.set(T.w,I)}}}return d}const Tr=e=>e==null?[]:Array.isArray(e)?e:[e];function Nr(e){if([...e].length!==1)return"";const t=V(e);if(!t)return"";const n=Lt(oe[t.jong]),o=n===""?0:oe.indexOf(n);return fe(t.cho,t.jung,o<0?0:o)}function Pn(e,t){return t.get(e)||Nr(e)||e}function it(e){return e?z(e.cho)?"cho":z(e.jung)?"jung":z(e.jong)?"jong":null:null}function we(e,t){const n=(r,a)=>!z(r)||Tr(r).includes(a),o=t.jongNone?e.jong===0:n(t.jong,oe[e.jong]);return n(t.cho,Q[e.cho])&&n(t.jung,te[e.jung])&&o}function He(e,t,n){const o=[...e];if(n!=="pron")return o.map(a=>V(a));const r=[...t.get(e)||e];return r.length!==o.length?o.map(a=>V(a)):r.map(a=>V(a))}function Ge(e,t,n,o,r){const a=t==="cho"?Q:t==="jung"?te:oe,u=e[t],i=[],l=d=>t==="jung"?Lr(Pn(d,r)):Pn(d,r),c=new Map([[l(n),-1]]),g=H(a.map((d,C)=>C).filter(d=>d!==u&&(t!=="cho"||a[d]!=="\u3147")&&(t!=="jong"||d!==0)));for(const d of g){if(i.length>=o)break;const C=t==="cho"?fe(d,e.jung,e.jong):t==="jung"?fe(e.cho,d,e.jong):fe(e.cho,e.jung,d),f=l(C),m=c.get(f);if(m!==void 0){t==="jung"&&m>=0&&r.has(C)&&!r.has(i[m])&&(i[m]=C);continue}c.set(f,i.length),i.push(C)}return i}const _r={\u3154:"\u3150",\u3156:"\u3152",\u315A:"\u3159",\u315E:"\u3159"};function Lr(e){if([...e].length!==1)return e;const t=V(e);if(!t)return e;const n=_r[te[t.jung]];return n?fe(t.cho,te.indexOf(n),t.jong):e}function Or(e,t,n,o,r,a=null){const u=[...e];if(u.length!==2)return null;const i=u.map(d=>V(d));if(i.some(d=>!d))return null;const l=He(e,n,o);if(l.some(d=>!d))return null;const c=it(t);let g=c&&t?l.map((d,C)=>we(d,t)?C:-1).filter(d=>d>=0):[0,1];if(a!=null&&(g=g.filter(d=>d!==a)),!g.length)return null;for(const d of H(g)){const C=u[d];if(!r.has(C))continue;const f=Ge(i[d],c??"cho",C,40,n),m=[];for(const w of f)if(w!==C&&r.has(w)&&!m.includes(w)&&m.push(w),m.length>=2)break;if(!(m.length<2))return{question:e,distractors:[C,...m]}}return null}function Rr(e,t,n,o,r,a=null){const u=[...e];if(u.length!==3)return null;const i=u.map(d=>V(d));if(i.some(d=>!d))return null;const l=He(e,n,o);if(l.some(d=>!d))return null;const c=it(t),g=c&&t?l.map((d,C)=>we(d,t)?C:-1).filter(d=>d>=0):[0,1,2];if(!g.length)return null;for(const d of H(g))for(const C of H([0,1,2].filter(f=>f!==d&&(a==null||f===a)))){const f=[0,1,2].filter(y=>y!==C),m=f.map(y=>u[y]).join("");if(!r.has(m))continue;const w=f.indexOf(d),h=Ge(i[d],c??"cho",u[d],40,n),p=[];for(const y of h){const S=f.map(M=>u[M]);S[w]=y;const E=S.join("");if(E!==m&&r.has(E)&&!p.includes(E)&&p.push(E),p.length>=2)break}if(!(p.length<2))return{question:e,distractors:[m,...p]}}return null}function Pr(e,t,n,o,r,a=null){const u=[...e],i=u.length;if(i<2)return null;const l=[];for(let g=1;g<=i-1;g++)l.push({remain:u.slice(0,g).join(""),dropped:u.slice(g).join(""),droppedEnd:1}),l.push({remain:u.slice(i-g).join(""),dropped:u.slice(0,i-g).join(""),droppedEnd:0});const c=it(t);for(const{remain:g,dropped:d,droppedEnd:C}of H(l)){if(a!=null&&C!==a||[...g].length===1&&[...d].length===1||g===e||!r.has(g)||!r.has(d))continue;const f=[...g],m=f.map(p=>V(p));if(m.some(p=>!p))continue;const w=He(g,n,o);if(w.some(p=>!p))continue;const h=c&&t?w.map((p,y)=>we(p,t)?y:-1).filter(p=>p>=0):f.map((p,y)=>y);if(h.length)for(const p of H(h)){const y=Ge(m[p],c??"cho",f[p],40,n),S=[];for(const E of y){const M=[...f];M[p]=E;const B=M.join("");if(B!==g&&r.has(B)&&!S.includes(B)&&S.push(B),S.length>=2)break}if(S.length>=2)return{question:e,distractors:[g,...S],dropped:d}}}return null}function Mr(e,t,n,o,r,a=null){if([...e].length!==1)return null;const u=V(n.get(e)||e);if(!u||u.jong===0)return null;const i=fe(u.cho,u.jung,0),l=Ge({cho:u.cho,jung:u.jung,jong:0},"cho",i,2,n);return l.length<2?null:{question:e,distractors:[i,...l]}}const Pt=Q.indexOf("\u3147");function Ir(e,t,n,o,r,a=null){if([...e].length!==1)return null;const u=V(n.get(e)||e);if(!u||u.jong!==0||u.cho===Pt)return null;const i=fe(Pt,u.jung,0),l=Ge({cho:Pt,jung:u.jung,jong:0},"jung",i,2,n);return l.length<2?null:{question:e,distractors:[i,...l]}}function kr(e){const t=new Map;for(const n of e){const o=[...n],r=o.length;if(!(r<2||r>3))for(let a=0;a<r;a++){let u=r+"|"+a+"|";for(let l=0;l<r;l++)u+=l===a?"*":o[l];const i=t.get(u);i?i.push(n):t.set(u,[n])}}return t}function xr(e,t,n,o,r,a=null,u=null,i=2){const l=[...e],c=l.length;if(c<2||c>3)return null;const g=l.map(y=>V(y));if(g.some(y=>!y))return null;const d=He(e,n,o);if(d.some(y=>!y))return null;const C=y=>n.get(y)??y,f=C(e),m=!!t&&(z(t.cho)||z(t.jung)||z(t.jong)),w=!!u&&(z(u.cho)||z(u.jung)||z(u.jong)),h=y=>{let S=c+"|"+y+"|";for(let E=0;E<c;E++)S+=E===y?"*":l[E];return S};let p;if(a!=null){if(a>=c||m&&!we(d[a],t))return null;p=[a]}else m?p=d.map((y,S)=>we(y,t)?S:-1).filter(y=>y>=0):p=Array.from({length:c},(y,S)=>S);for(const y of H(p)){const S=r.get(h(y))??[],E=[],M=[];for(const A of S){if(A===e)continue;const $=[...A].map(k=>V(k)),F=g[y],R=$[y];if(!F||!R)continue;let L=0;if(F.cho!==R.cho&&L++,F.jung!==R.jung&&L++,F.jong!==R.jong&&L++,!(L<i||C(A)===f))if(w){const k=He(A,n,o)[y];k&&we(k,u)?E.push(A):M.push(A)}else E.push(A)}if(!E.length)continue;const B=H(E)[0],T=[],D=new Set([f,C(B)]),I=w?M:E.filter(A=>A!==B);for(const A of H(I)){const $=C(A);if(!D.has($)&&(D.add($),T.push(A),T.length>=2))break}if(!w&&T.length<2)for(const A of H(S)){if(A===e||A===B)continue;const $=C(A);if(!D.has($)&&(D.add($),T.push(A),T.length>=2))break}if(!(T.length<2))return{question:e,distractors:[B,...T]}}return null}let lt=null,Mn=null,In=null;function jr(){const e=at();if(e&&e.entries.length>0){const t=ke();if(lt&&Mn===e&&In===t)return lt;const n=new Set,o=[];for(const r of e.entries)!r.word||n.has(r.word)||(n.add(r.word),o.push({w:r.word,s:r.syllables,p:t?.[r.word]?[...t[r.word].cho??[],...t[r.word].jung??[],...t[r.word].jong??[]]:[],pron:r.pronunciation||r.word,grade:r.grade}));return lt=o,Mn=e,In=t,lt}return[]}const de=new Proxy([],{get(e,t){const n=jr(),o=n[t];return typeof o=="function"?o.bind(n):o}});function Mt(e){return e.length?e[Math.floor(Math.random()*e.length)]:void 0}function re(e,t){if(t>=e.length)return H(e);if(t===0)return[];const n=e.slice();for(let o=0;o<t;o++){const r=o+Math.floor(Math.random()*(n.length-o)),a=n[o];n[o]=n[r],n[r]=a}return n.slice(0,t)}let It=null,kn=null;function me(){const e=at();if(It&&kn===e)return It;const t=new Map;for(const n of de)n.w&&t.set(n.w,n.pron);return It=t,kn=e,t}function q(e){return me().get(e)||e}function st(e,t,n=new Set){const o=[];for(const r of H(e)){if(o.length>=t)break;const a=q(r);n.has(a)||(n.add(a),o.push(r))}return o}let Fr=0;function Z(e){return`${e}-rt-${++Fr}`}function Te(e){const t=vn();if(!t||t.total===0){const r=new Set;for(const a of e)r.add(a);return r}const n=rr(),o=new Set;for(const r of e)n.has(r)&&o.add(r);return o}const ct=new Map;let xn=null,jn=null;function Ve(e){return e==null?"":Array.isArray(e)?e.slice().sort().join(","):e}function Fn(e){const t=Ve(e.choseong),n=e.composition,o=n?.syllable==null?"":Array.isArray(n.syllable)?n.syllable.slice().sort().join(","):String(n.syllable),r=n?`${Ve(n.cho)}/${Ve(n.jung)}/${Ve(n.jong)}/${n.jongNone?"N":""}/${o}`:"",a=Ve(e.grade);return`${e.difficulty??""}|${t}|${r}|${e.excludeNoImage?"1":"0"}|${e.count??""}|x${e.contrastCount??1}|${e.fullCount?"F":""}|s${e.sameStructureOnly===!1?"0":"1"}|v${e.phonemeView==="pron"?"p":"c"}|g${a}|t${e.targetSyllable??""}|c${e.choicesPerItem??""}`}async function ne(e){const t=at(),n=ke();(t!==xn||n!==jn)&&(ct.clear(),xn=t,jn=n);const o=Fn(e);return ct.has(o)||ct.set(o,$r(e)),ct.get(o)}function $n(e){if(!e)return null;const t=u=>u==null?null:Array.isArray(u)?u.length?u:null:[u],n=t(e.cho),o=t(e.jung),r=!!e.jongNone,a=r?null:t(e.jong);return n||o||a||r?r&&!n&&!o&&!a?u=>Jo(u):u=>Zo(u,{cho:n,jung:o,jong:a,jongNone:r}):null}function Hn(e){const t=e.grade&&e.grade.length>0?new Set(e.grade):null,n=e.composition??null,o=n?.syllable!=null?new Set(Array.isArray(n.syllable)?n.syllable:[n.syllable]):null,r=n?[$n(n),o?u=>o.has(Me(u)):null].filter(u=>u!=null):[];if(!t&&r.length===0)return null;const a=e.phonemeView==="pron";return u=>{if(t&&(!u.grade||!t.has(u.grade)))return!1;if(r.length===0)return!0;const i=a?q(u.w):u.w;return r.every(l=>l(i))}}async function $r(e){const{difficulty:t=null,choseong:n=null,composition:o=null,targetSyllable:r=null,excludeNoImage:a=!1}=e,u=e.grade&&e.grade.length>0?new Set(e.grade):null,i=e.sameStructureOnly??!0,l=e.phonemeView==="pron"?"pron":"char",c=Math.max(1,e.contrastCount??1),g=t==="cho"||t==="jung"||t==="jong",d=g&&c>=2,C=t==="count",f=n?new Set(Array.isArray(n)?n:[n]):null,m=o?.syllable!=null?new Set(Array.isArray(o.syllable)?o.syllable:[o.syllable]):null,w=o?[$n(o),m?v=>m.has(Me(v)):null].filter(v=>v!=null):[],h=t==="random"||t===null,p=h||C,y=h||d||C;let S=de.filter(v=>!v.w||u&&(!v.grade||!u.has(v.grade))?!1:y?!0:Array.isArray(v.p)&&v.p.length>0);f&&(S=S.filter(v=>{for(const O of f)if(qo(v.w,O))return!0;return!1})),w.length>0&&(S=S.filter(v=>{const O=l==="pron"?q(v.w):v.w;return w.every(P=>P(O))})),r&&(S=S.filter(v=>v.w[0]===r));let E;if(a){const v=new Set;for(const O of S)if(v.add(O.w),Array.isArray(O.p))for(const P of O.p)v.add(P);if(p)for(const O of de)O.w&&v.add(O.w);E=Te(v)}else{const v=new Set;for(const O of S)if(v.add(O.w),Array.isArray(O.p))for(const P of O.p)v.add(P);if(p)for(const O of de)O.w&&v.add(O.w);E=v}let M=null;if(d){const v=new Set;for(const O of de)O.w&&v.add(O.w);M=a?Te(v):v}const B=S.filter(v=>E.has(v.w)),T=600,D=Array.from(E),I=D.length>T?re(D,T):D,A=C&&o!=null&&(z(o.cho)||z(o.jung)||z(o.jong)),$=2500,F=new Map;if(C&&!A&&c>=2){for(const v of D){const O=Me(v),P=F.get(O);P?P.push(v):F.set(O,[v])}for(const[v,O]of F)O.length>$&&F.set(v,re(O,$))}const R=Uo(),L=A?Dr(o,D,R,i,l,q):null,k=500,W=1500,X=e.fullCount?B:t==="random"?B.length>k?re(B,k):B:B.length>W?re(B,W):B,U=ke(),he=[];for(const v of X){let O;const P=q(v.w);if(d)O=er(v.w,t,c,M,24).filter(G=>q(G)!==P);else if(C)A?O=(L.get(v.w)??[]).filter(G=>q(G)!==P):c<=1?O=Rn(v.w,U,{okSet:E,pronOf:q,decompOf:R,sameStructureOnly:!1}):O=(F.get(Me(v.w))??[]).filter(G=>{if(G===v.w||q(G)===P)return!1;const Y=tr(P,q(G));return c>=5?Y>=5:Y===c});else if(h){const G=Y=>Y!==v.w&&Y.length===v.w.length&&q(Y)!==P;if(e.fullCount){const Y=Math.max(1,(e.choicesPerItem??3)-1),ee=[],ye=new Set;for(const Le of I){if(!G(Le))continue;const Ee=q(Le);if(!ye.has(Ee)&&(ye.add(Ee),ee.push(Le),ee.length>=Y))break}O=ee}else O=I.filter(G)}else{const G=t;O=Rn(v.w,U,{kind:G,okSet:E,pronOf:q,decompOf:R,sameStructureOnly:!1}),O.length===0&&(O=(I.length>30?re(I,30):I).filter(Y=>Y!==v.w&&zo(v.w,Y)===t&&q(Y)!==P))}if(i&&O.length>0&&(g||C&&!A)){const G=R(q(v.w));O=O.filter(Y=>!Rt(G,R(q(Y))))}O.length!==0&&he.push({word:v,usable:O})}return he}async function Gn(e,t){const{choicesPerItem:n=3,count:o=10}=t,r=n-1,a=(await ne(t)).filter(i=>i.usable.length>=r),u=[];for(const i of H(a)){if(u.length>=o)break;const l=st(i.usable,r);if(l.length<r)continue;const c=H([i.word.w,...l]);u.push({id:Z(e+"-item"),index:u.length+1,word:i.word.w,syllables:i.word.s,choices:c,answerIndex:c.indexOf(i.word.w)})}return u}async function Hr(e){const{choicesPerItem:t=3,count:n=10}=e,o=t-1,r=await ne({...e,difficulty:null});if(r.length<t)return[];const a=e.composition??null,u=[],i=H([...r]);for(const l of i){if(u.length>=n)break;const c=l.word.w,g=[...l.word.pron||c],d=a&&it(a)?g.filter(h=>{const p=V(h);return!!p&&we(p,a)}):[],C=Mt(d.length?d:g);if(!C)continue;const f=r.filter(h=>h.word.w!==c&&h.word.s===l.word.s&&!(h.word.pron||h.word.w).includes(C)&&h.word.pron!==l.word.pron);if(f.length<o)continue;const m=st(f.map(h=>h.word.w),o);if(m.length<o)continue;const w=H([c,...m]);u.push({id:Z("HPI-item"),index:u.length+1,targetSyllable:C,word:c,choices:w,answerIndex:w.indexOf(c)})}return u}async function Gr(e){const{count:t=10}=e,n=(await ne(e)).filter(a=>a.usable.length>=1);if(!n.length)return[];const o=n.length>=t?re(n,t):H(Array.from({length:t},(a,u)=>n[u%n.length])),r=H(Array.from({length:t},(a,u)=>u<Math.ceil(t/2)));return o.map((a,u)=>{const i=r[u];let l;if(i)l=[a.word.w,a.word.w];else{const c=Mt(a.usable);l=Math.random()<.5?[a.word.w,c]:[c,a.word.w]}return{id:Z("SOD-item"),index:u+1,word:a.word.w,pair:l,same:i}})}async function Vr(e){const{choicesPerItem:t=3,count:n=10}=e,o=t-1,r=await ne({...e,difficulty:null});if(r.length<t+1)return[];const a=r.map(C=>C.word.w),u=new Map(r.map(C=>[C.word.w,C.word.pron])),i=C=>(u.get(C)||C)[0]??"",l={};for(const C of r){const f=i(C.word.w);f&&(l[f]||(l[f]=[]),l[f].push(C.word.w))}const c=Object.entries(l).filter(([,C])=>C.length>=2).map(([C])=>C);if(c.length===0)return[];const g=[],d=H([...c]);for(let C=0;g.length<n&&C<n*4;C++){const f=d[C%d.length],m=l[f];if(m.length<2)continue;const w=H([...m]),h=w[0],p=w[1];if(!h||!p||h===p||(u.get(h)||h)===(u.get(p)||p))continue;const y=u.get(p)||p,S=a.filter(B=>i(B)!==f&&B!==h&&B!==p&&B.length===p.length&&(u.get(B)||B)!==y);if(S.length<o)continue;const E=st(S,o);if(E.length<o)continue;const M=H([p,...E]);g.push({id:Z("SWS-item"),index:g.length+1,sourceWord:h,targetSyllable:f,word:p,choices:M,answerIndex:M.indexOf(p)})}return g}function Vn(e,t,n){const o=me(),r=l=>o.get(l)||l,a=(l,c)=>{const g=[...l],d=[...c];if(g.length!==d.length)return-1;let C=-1;for(let f=0;f<g.length;f++)if(g[f]!==d[f]){if(C>=0)return-1;C=f}return C},u=e.map(l=>({e:l,swaps:l.usable.filter(c=>!!c&&a(l.word.w,c)>=0&&r(c)!==r(l.word.w))})).filter(l=>l.swaps.length>0),i=[];for(const{e:l,swaps:c}of H(u)){if(i.length>=t)break;const g=Mt(c)??"",d=[...l.word.w],C=[...g],f=a(l.word.w,g),m=st(l.usable.filter(w=>w&&w!==g),2,new Set([r(g),r(l.word.w)]));m.length<2||i.push({id:Z(n),index:i.length+1,word:l.word.w,original:l.word.w,changed:g,changedFrom:f>=0?d[f]:"",changedTo:f>=0?C[f]:"",distractors:m})}return i}async function Wn(e,t,n){const{count:o=10}=t,r=me(),a=de.filter(m=>m.w&&m.s===e),u=t.excludeNoImage?Te(a.map(m=>m.w)):null,i=u?a.filter(m=>u.has(m.w)):a,l=new Set(i.map(m=>m.w)),c=kr(l),g=t.phonemeView??"char",d=t.composition??null,C=Hn(t),f=[];for(const m of H(i)){if(f.length>=o)break;if(C&&!C(m))continue;const w=xr(m.w,d,r,g,c,null,null);if(!w)continue;const h=w.distractors[0],p=[...m.w],y=[...h],S=p.findIndex((E,M)=>E!==y[M]);f.push({id:Z(n),index:f.length+1,word:m.w,original:m.w,changed:h,changedFrom:S>=0?p[S]:"",changedTo:S>=0?y[S]:"",distractors:w.distractors.slice(1)})}return f}async function Wr(e){return Wn(2,e,"CS2-item")}async function Yr(e){return Wn(3,e,"CS3-item")}async function Kr(e){const t=(await ne({...e,difficulty:"count",contrastCount:1})).filter(n=>n.word.s===1&&n.usable.length>=1);return Vn(t,e.count??10,"CP1-item")}async function Ur(e){const t=e.difficulty&&e.difficulty!=="random"?e.difficulty:"count",n=(await ne({...e,difficulty:t,contrastCount:1})).filter(o=>o.word.s===2&&o.usable.length>=1);return Vn(n,e.count??10,"CP2-item")}async function zr(e){const{count:t=10}=e,n=(await ne({...e})).filter(o=>o.word.s===2);return re(n,t).map((o,r)=>({id:Z("M2S-item"),index:r+1,word:o.word.w,answer:o.word.w,parts:[...o.word.w]}))}async function qr(e){const{count:t=10}=e,n=(await ne({...e})).filter(o=>o.word.s===3);return re(n,t).map((o,r)=>({id:Z("M3S-item"),index:r+1,word:o.word.w,answer:o.word.w,parts:[...o.word.w]}))}function kt(e){const t=de.map(n=>n.w);return e.excludeNoImage?Te(t):new Set(t)}async function Jr(e){const{count:t=10}=e,n=(await ne({...e})).filter(i=>i.word.s===2),o=me(),r=kt(e),a=e.phonemeView??"char",u=[];for(const i of H(n)){if(u.length>=t)break;const l=Or(i.word.w,e.composition??null,o,a,r);if(!l)continue;const[c,...g]=l.distractors,d=[...i.word.w],C=d[0]===c?d[1]:d[0];u.push({id:Z("D2-item"),index:u.length+1,original:i.word.w,word:i.word.w,dropped:C,missingResult:c,distractors:g})}return u}async function Qr(e){const{count:t=10}=e,n=(await ne({...e})).filter(i=>i.word.s===3),o=me(),r=kt(e),a=e.phonemeView??"char",u=[];for(const i of H(n)){if(u.length>=t)break;const l=Rr(i.word.w,e.composition??null,o,a,r);if(!l)continue;const[c,...g]=l.distractors,d=[...i.word.w];let C="";for(let f=0;f<d.length;f++)if(d.filter((m,w)=>w!==f).join("")===c){C=d[f];break}u.push({id:Z("D3-item"),index:u.length+1,original:i.word.w,word:i.word.w,dropped:C,missingResult:c,distractors:g})}return u}async function Zr(e){const{count:t=10}=e,n=(await ne({...e})).filter(i=>i.word.s>=3),o=me(),r=kt(e),a=e.phonemeView??"char",u=[];for(const i of H(n)){if(u.length>=t)break;const l=Pr(i.word.w,e.composition??null,o,a,r);if(!l)continue;const[c,...g]=l.distractors,d=i.word.w,C=l.dropped??(d.startsWith(c)?d.slice(c.length):d.endsWith(c)?d.slice(0,d.length-c.length):"");u.push({id:Z("DPC-item"),index:u.length+1,original:d,word:d,dropped:C,missingResult:c,distractors:g})}return u}async function Xr(e){const{count:t=10}=e,n=(await ne({...e})).map(o=>o.word.w);return n.length<3?[]:Array.from({length:t},(o,r)=>{const a=re(n,3);return{id:Z("LRO-item"),index:r+1,sequence:a,choices:H(a)}})}function dt(e,t,n){const o=de.filter(i=>i.w&&i.s===e),r=t.excludeNoImage?Te(o.map(i=>i.w)):null,a=Hn(t),u=[];for(const i of o)if(!(r&&!r.has(i.w))&&!(a&&!a(i))){if(n){const l=V(i.w);if(!l||!n(l))continue}u.push(i)}return u}function ea(e){const t=dt(1,e,ut.MERGE_2_PHONEMES.syllable);return re(t,e.count??10).map((n,o)=>{const r=V(n.w);return{id:Z("M2P-item"),index:o+1,parts:[Q[r.cho],te[r.jung]],answer:n.w,word:n.w}})}function ta(e){const t=dt(1,e,ut.MERGE_3_PHONEMES.syllable);return re(t,e.count??10).map((n,o)=>{const r=V(n.w);return{id:Z("M3P-item"),index:o+1,parts:[Q[r.cho],te[r.jung],oe[r.jong]],answer:n.w,word:n.w}})}function na(e){const t=ut.DROP_FINAL_CONSONANT_FROM_1SYLL,n=dt(t.syllables,e,t.syllable),o=me(),r=[];for(const a of H(n)){if(r.length>=(e.count??10))break;const u=Mr(a.w,null,o);if(!u)continue;const[i,...l]=u.distractors;r.push({id:Z("DFC-item"),index:r.length+1,original:a.w,word:a.w,result:i,distractors:l})}return r}function oa(e){const t=ut.REMOVE_CONSONANT_AND_IDENTIFY_PHONEME,n=dt(t.syllables,e,t.syllable),o=me(),r=[];for(const a of H(n)){if(r.length>=(e.count??10))break;const u=Ir(a.w,null,o);if(!u)continue;const i=V(o.get(a.w)||a.w);if(!i)continue;const[l,...c]=u.distractors;r.push({id:Z("RCP-item"),index:r.length+1,base:a.w,word:a.w,missingConsonant:Q[i.cho],remaining:l,distractors:c})}return r}const Ct=new Map;let Yn=null,Kn=null;async function Un(e,t={}){const n=at(),o=ke();(n!==Yn||o!==Kn)&&(Ct.clear(),Yn=n,Kn=o);const r=`${e}:${Fn(t)}`;if(Ct.has(r))return Ct.get(r);const a=await aa(e,t);return Ct.set(r,a),a}const ra={SAME_SOUND_PICK:e=>Gn("SSP",e),HEAR_AND_PICK_SAME:e=>Gn("HPS",e),HEAR_AND_PICK_INCLUDED:e=>Hr(e),SAME_OR_DIFF:e=>Gr(e),STARTS_WITH_SAME_SOUND:e=>Vr(e),LISTEN_AND_REMEMBER_ORDER:e=>Xr(e),MERGE_2_SYLLABLES:e=>zr(e),MERGE_3_SYLLABLES:e=>qr(e),MERGE_2_PHONEMES:e=>ea(e),MERGE_3_PHONEMES:e=>ta(e),DROP_1_FROM_2SYLL:e=>Jr(e),DROP_1_FROM_3SYLL:e=>Qr(e),DROP_PART_FROM_COMPOUND:e=>Zr(e),DROP_FINAL_CONSONANT_FROM_1SYLL:e=>na(e),REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:e=>oa(e),CHANGE_1_SYLL_IN_2SYLL:e=>Wr(e),CHANGE_1_SYLL_IN_3SYLL:e=>Yr(e),CHANGE_1_PHONEME_IN_1SYLL:e=>Kr(e),CHANGE_1_PHONEME_IN_2SYLL:e=>Ur(e)};async function aa(e,t={}){const n=ra[e];return n?await n(t):[]}async function ua(e){const t=["random","count"],n=Object.keys(Tt);let o=0;for(const r of t)for(const a of n){const u=Tt[a];Un(a,{difficulty:u.difficulty?r:null,contrastCount:1,composition:null,count:5,excludeNoImage:e,sameStructureOnly:!0,phonemeView:"char",grade:null}).catch(()=>{}),++o%6===0&&await new Promise(i=>setTimeout(i,0))}}async function ia(e){const t=await ne({...e,fullCount:!0}),n=e.choicesPerItem!=null?Math.max(1,e.choicesPerItem-1):1;return t.filter(o=>new Set(o.usable.map(r=>q(r))).size>=n).length}async function la(e={}){const t=[];for(const i of de)i.w&&t.push(i.w);const n=e.excludeNoImage?Te(t):t,o=new Set,r=new Set,a=new Set,u=new Set;for(const i of n){u.add(Me(i));for(const l of i){const c=V(l);if(c&&(Q[c.cho]!=="\u3147"&&o.add(Q[c.cho]),r.add(te[c.jung]),c.jong>0)){a.add(oe[c.jong]);const g=Pe[c.jong];g&&g.forEach(d=>a.add(d))}}}return{cho:o,jung:r,jong:a,syllable:u}}const ue="\uC804\uCCB4";var sa={statusFilter:"\uC0C1\uD0DC \uD544\uD130",pageSizeSelect:"\uD398\uC774\uC9C0\uB2F9 \uD45C\uC2DC \uAC1C\uC218",selectedCount:"{{count}}\uAC1C \uC120\uD0DD\uB428",cancel:"\uCDE8\uC18C",info:"\uC124\uBA85",errorState:{message:"\uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.",retry:"\uB2E4\uC2DC \uC2DC\uB3C4"},save:"\uC800\uC7A5",confirm:"\uD655\uC778",close:"\uB2EB\uAE30",back:"\uB4A4\uB85C",emptyTrainingName:"\uD6C8\uB828 \uC774\uB984\uC774 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.",remove:"\uC81C\uAC70",image:"\uC774\uBBF8\uC9C0",delete:"\uC0AD\uC81C",reset:"\uCD08\uAE30\uD654",update:"\uC5C5\uB370\uC774\uD2B8",download:"\uB2E4\uC6B4\uB85C\uB4DC",search:"\uAC80\uC0C9",empty:"\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",yes:"\uC608",no:"\uC544\uB2C8\uC624",all:"\uC804\uCCB4",none:"\uC5C6\uC74C",days:"{{count}}\uC77C",loadMore:"\uB354\uBCF4\uAE30",more:"\uB354\uBCF4\uAE30",moreFor:"{{name}} \uB354\uBCF4\uAE30",retry:"\uB2E4\uC2DC \uC2DC\uB3C4",prevPage:"\uC774\uC804 \uD398\uC774\uC9C0",nextPage:"\uB2E4\uC74C \uD398\uC774\uC9C0",play:"\uC7AC\uC0DD",pause:"\uBA48\uCDA4",playPause:"\uC7AC\uC0DD / \uBA48\uCDA4",replay:"\uB2E4\uC2DC\uB4E3\uAE30",subscription:"\uC774\uC6A9\uAD8C",done:"\uC644\uB8CC",failed:"\uC2E4\uD328",continue:"\uACC4\uC18D",notification:"\uC54C\uB9BC",emptyList:"\uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",menu:"\uBA54\uB274",resetSelection:"\uC120\uD0DD \uCD08\uAE30\uD654",pageSizeLabel:"{{n}}\uAC1C\uC529 \uBCF4\uAE30",totalCountPrefix:"\uCD1D ",totalCountSuffix:"\uAC1C",expand:"\uD3BC\uCE58\uAE30",collapse:"\uC811\uAE30",popup:"\uD31D\uC5C5",codeBlock:"\uCF54\uB4DC \uBE14\uB85D",totalPrefix:"\uCD1D ",copyCode:"\uCF54\uB4DC \uBCF5\uC0AC",copied:"\uBCF5\uC0AC\uB428",col:{problem:"\uBB38\uC81C"},phonetics:{place:{labial:"\uC591\uC21C\uC74C",alveolar:"\uCE58\uC870\uC74C",palatal:"\uACBD\uAD6C\uAC1C\uC74C",velar:"\uC5F0\uAD6C\uAC1C\uC74C",glottal:"\uC131\uBB38\uC74C"},vowel:{frontHigh:"\uC804\uC124 \uACE0\uBAA8\uC74C",backHighUnrounded:"\uD6C4\uC124 \uACE0\uBAA8\uC74C \uD3C9\uC21C",backHighRounded:"\uD6C4\uC124 \uACE0\uBAA8\uC74C \uC6D0\uC21C",frontMid:"\uC804\uC124 \uC911\uBAA8\uC74C",backMidUnrounded:"\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C",backMidRounded:"\uD6C4\uC124 \uC911\uBAA8\uC74C \uC6D0\uC21C",low:"\uC800\uBAA8\uC74C"},glide:{j:"j\uD65C\uC74C",w:"w\uD65C\uC74C",velar:"\u0270\uD65C\uC74C"}},unknownError:"\uC54C \uC218 \uC5C6\uB294 \uC624\uB958",networkError:"\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."},ca={rangeSelect:"\uAE30\uAC04 \uC120\uD0DD",dow:["\uC77C","\uC6D4","\uD654","\uC218","\uBAA9","\uAE08","\uD1A0"],yearMonth:"{{year}}\uB144 {{month}}\uC6D4",prevMonth:"\uC774\uC804 \uB2EC",addOnDate:"{{date}}\uC5D0 \uBC29\uBB38 \uB4F1\uB85D",nextMonth:"\uB2E4\uC74C \uB2EC",prevWeek:"\uC774\uC804 \uC8FC",nextWeek:"\uB2E4\uC74C \uC8FC",legend:{visited:"\uBC29\uBB38",scheduled:"\uC608\uC57D",noVisit:"\uBBF8\uBC29\uBB38"},periodSelect:"\uAE30\uAC04 \uB2E8\uC704"},da={planSuffix:"\uC774\uC6A9\uAD8C",labeledPlan:"{{label}} \uC774\uC6A9\uAD8C",couponCode:"\uC774\uC6A9\uAD8C \uCF54\uB4DC",specialLabel:"\uC624\uD508\uD2B9\uAC00",unitDay:"\uC77C",unitYear:"\uB144",remainingDay:"{{n}}\uC77C \uB0A8\uC74C",remainingHour:"{{n}}\uC2DC\uAC04 \uB0A8\uC74C",remainingMinute:"{{n}}\uBD84 \uB0A8\uC74C",remainingSecond:"{{n}}\uCD08 \uB0A8\uC74C",menu:{use:"\uC0AC\uC6A9\uD558\uAE30",refund:"\uD658\uBD88\uD558\uAE30",delete:"\uC0AD\uC81C\uD558\uAE30"}},Ca={clearAriaLabel:"\uAC80\uC0C9\uC5B4 \uC9C0\uC6B0\uAE30"},ga={starLabel:"{{n}}\uBC88\uC9F8 \uBCC4 \uC120\uD0DD",valueLabel:"{{max}}\uC810 \uB9CC\uC810\uC5D0 {{value}}\uC810",groupLabel:"\uBCC4\uC810"},fa={selected:"\uC120\uD0DD\uB428"},ma={placeholder:"\uC120\uD0DD"},pa={collapse:"\uC811\uAE30",expand:"\uD3BC\uCE58\uAE30"},ha={biArea:"BI \uC601\uC5ED",biSymbol:"BI \uC2EC\uBCFC",logoMalgwi:"\uB9D0\uADC0 \uB85C\uACE0",logoManager:"\uB9D0\uADC0\uB9E4\uB2C8\uC800 \uB85C\uACE0",menuOpen:"\uBA54\uB274 \uC5F4\uAE30",utilMenu:"\uC720\uD2F8\uB9AC\uD2F0 \uBA54\uB274",menuClose:"\uBA54\uB274 \uB2EB\uAE30"},ya={mainMenu:"\uBA54\uC778 \uBA54\uB274",bottomNav:"\uD558\uB2E8 \uB124\uBE44\uAC8C\uC774\uC158",goToManager:"\uB9D0\uADC0\uB9E4\uB2C8\uC800\uB85C \uC774\uB3D9",goToMalgwi:"\uB9D0\uADC0\uB85C \uC774\uB3D9",modeLabelManager:"\uB9D0\uADC0 \uB9E4\uB2C8\uC800",modeLabelMalgwi:"\uB9D0\uADC0",training:"\uD6C8\uB828",settings:"\uC124\uC815",notifications:"\uC54C\uB9BC",account:"\uACC4\uC815",help:"\uB3C4\uC6C0\uB9D0",debug:"\uB514\uBC84\uADF8",coupons:"\uCFE0\uD3F0",topic:"\uC8FC\uC81C\uBCC4 \uB4E3\uAE30",trainingType:"\uD6C8\uB828\uBCC4 \uB4E3\uAE30",wordPairs:"\uB300\uB9BD\uC30D \uCC3E\uAE30",wordSearch:"\uB2E8\uC5B4 \uCC3E\uAE30",wordTable:"\uB2E8\uC5B4\uD45C \uB9CC\uB4E4\uAE30",company:"\uC5C5\uCCB4\uC815\uBCF4",more:"\uB354\uBCF4\uAE30",moreMenu:"\uB354\uBCF4\uAE30 \uBA54\uB274",badgeLabel:"{{label}}, {{count}}\uAC1C"},ba={language:{training:{label:"\uD6C8\uB828 \uC5B8\uC5B4",sub:"\uD6C8\uB828\uC5D0 \uC0AC\uC6A9\uB418\uB294 \uB2E8\uC5B4\uC640 \uC74C\uC131 \uC5B8\uC5B4"}},notifications:{title:"\uC54C\uB9BC"},display:{fontSize:{small:"\uC791\uAC8C",large:"\uD06C\uAC8C"}},cache:{title:"\uCE90\uC2DC \uAD00\uB9AC",confirmMessage:"\uCE90\uC2DC({{size}})\uB97C \uC0AD\uC81C\uD569\uB2C8\uB2E4. \uACC4\uC18D\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",delete:"\uC0AD\uC81C",deleting:"\uC0AD\uC81C \uC911",cleared:"\uCE90\uC2DC\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",group:{wordData:{label:"\uB2E8\uC5B4 \uB370\uC774\uD130",sub:"\uB2E8\uC5B4 \uBAA9\uB85D \uBC0F \uBC84\uC804 \uC815\uBCF4"},pairIndex:{label:"\uB2E8\uC5B4\uC30D \uC778\uB371\uC2A4",sub:"\uCD08\uC131\xB7\uC911\uC131\xB7\uC885\uC131 \uB300\uB9BD\uC30D \uBD84\uC11D \uCE90\uC2DC"},imageCache:{label:"\uC774\uBBF8\uC9C0 \uCE90\uC2DC",sub:"\uB2E8\uC5B4\uBCC4 \uC774\uBBF8\uC9C0 \uC874\uC7AC \uC5EC\uBD80 \uD655\uC778 \uACB0\uACFC"},trainingRecord:{label:"\uD6C8\uB828 \uAE30\uB85D",sub:"\uC624\uB298\uC758 \uD6C8\uB828 \uC9C4\uD589\uB960 \uBC0F \uD559\uC2B5 \uC77C\uC218"}}},button:{save:"\uC124\uC815 \uC800\uC7A5"},popup:{clear:{confirm:"\uCD08\uAE30\uD654"},update:{confirm:"\uC5C5\uB370\uC774\uD2B8"},cache:{title:"{{label}} \uC0AD\uC81C",message:"{{label}}({{size}})\uB97C \uC0AD\uC81C\uD569\uB2C8\uB2E4. \uACC4\uC18D\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?"}},saved:"\u2713 \uC800\uC7A5\uB428",account:{title:"\uACC4\uC815",delete:{sub:"\uD0C8\uD1F4 \uD6C4 30\uC77C \uC774\uB0B4 \uC7AC\uAC00\uC785 \uC2DC \uBCF5\uAD6C \uAC00\uB2A5\uD569\uB2C8\uB2E4."}}},Sa={addButton:"\uC774\uC6A9\uAD8C \uCD94\uAC00\uD558\uAE30",couponButton:"\uCFE0\uD3F0 \uC785\uB825",loading:"\uBD88\uB7EC\uC624\uB294 \uC911\u2026",segment:{personal:"\uB9D0\uADC0",org:"\uB9D0\uADC0\uB9E4\uB2C8\uC800"},org:{title:"\uD604\uC7AC \uC774\uC6A9\uAD8C",disc:"\uAE30\uAD00\uC5D0\uC11C \uC0AC\uC6A9 \uC911\uC778 \uC774\uC6A9\uAD8C \uC815\uBCF4\uC785\uB2C8\uB2E4.",empty:"\uB4F1\uB85D\uB41C \uAE30\uAD00 \uC774\uC6A9\uAD8C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",fallbackTitle:"\uAE30\uAD00 \uC774\uC6A9\uAD8C",startDate:"\uC2DC\uC791\uC77C",endDate:"\uB9CC\uB8CC\uC77C",remaining:"\uB0A8\uC740 \uAE30\uAC04",duration:"\uC774\uC6A9 \uAE30\uAC04"},active:{infoTitle:"\uC774\uC6A9 \uC815\uBCF4",refund:"\uD658\uBD88 \uC694\uCCAD",startDate:"\uC0AC\uC6A9 \uC2DC\uC791\uC77C",endDate:"\uC885\uB8CC\uC77C",remaining:"\uB0A8\uC740 \uAE30\uAC04"},pending:{title:"\uBCF4\uC720",empty:"\uB300\uAE30 \uC911\uC778 \uC774\uC6A9\uAD8C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."}},wa={profile:{planSuffix:"\uD50C\uB79C",plan:"\uD50C\uB79C"},basicInfo:{name:{placeholder:"\uD64D\uAE38\uB3D9"}},security:{title:"\uBCF4\uC548",password:{label:"\uBE44\uBC00\uBC88\uD638",currentRequired:"\uD604\uC7AC \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694.",newRequired:"\uC0C8 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694.",mismatch:"\uC0C8 \uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",changed:"\uBE44\uBC00\uBC88\uD638\uAC00 \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},twoFactor:{label:"2\uB2E8\uACC4 \uC778\uC99D",sub:"\uACC4\uC815 \uBCF4\uC548\uC744 \uAC15\uD654\uD558\uC138\uC694"}}},Ea={guide:{faq:{title:"\uC790\uC8FC \uBB3B\uB294 \uC9C8\uBB38",desc:"FAQ \uBAA8\uC544\uBCF4\uAE30"}}},Aa={settings:"\uC124\uC815",start:{title:"\uB2E8\uC5B4\uD6C8\uB828 \uC2DC\uC791",description:"\uC544\uB798 \uD6C8\uB828 \uC720\uD615\uC744 \uC120\uD0DD\uD574 \uC2DC\uC791\uD558\uC138\uC694"},difficulty:{tooltip:"\uAC00\uC7A5 \uC26C\uC6B4 \uB09C\uC774\uB3C4\uB294 '\uBB34\uC791\uC704', \uAC00\uC7A5 \uC5B4\uB824\uC6B4 \uB09C\uC774\uB3C4\uB294 '\uCD08\uC131\uCC28\uC774' \uC785\uB2C8\uB2E4."},contrast:{label:"\uB300\uB9BD",type:"\uB300\uB9BD \uC885\uB958",count:"\uB300\uB9BD \uAC2F\uC218",n:"{{n}}\uAC1C"},filter:{random:"\uBB34\uC791\uC704",trainOnset:"\uCD08\uC131",trainVowel:"\uBAA8\uC74C",trainCoda:"\uC885\uC131",phonemeGroup:"\uD6C8\uB828 \uC74C\uC808",noLimit:"\uBB34\uAD00",codaExclude:"\uC81C\uC678",gradeLabel:"\uB4F1\uAE09",excludeImageInfo:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC: \uB2E8\uC5B4 \uC911\uC5D0 \uC774\uBBF8\uC9C0\uAC00 \uC788\uB294 \uB2E8\uC5B4\uB9CC \uACB0\uACFC\uC5D0 \uBCF4\uC5EC\uC90D\uB2C8\uB2E4.",sameStructureInfo:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC: \uC815\uB2F5\uACFC \uC624\uB2F5\uC758 \uC74C\uC808 \uAD6C\uC870(\uAE00\uC790 \uC218\xB7\uBC1B\uCE68 \uC720\uBB34 \uB4F1)\uAC00 \uAC19\uC740 \uACB0\uACFC\uB9CC \uB0A8\uACA8\uC694.",selectSection:"\uC120\uD0DD",excludeImage:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC",sameStructure:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC"},noQuestions:"\uBB38\uC81C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",countQuestions:"{{n}}\uBB38\uC81C",countSentences:"{{n}}\uBB38\uC7A5",comingSoon:"\uC900\uBE44 \uC911",nextQuestion:"\uB2E4\uC74C \uBB38\uC81C",noiseRatioTitle:"\uC18C\uC74C \uBE44\uC728",noiseRatioValue:"{{ratio}}\uBC30",noiseTypeTitle:"\uC18C\uC74C \uC885\uB958",playVolumeTitle:"\uC804\uCCB4 \uC18C\uB9AC",playSpeedTitle:"\uC7AC\uC0DD \uC18D\uB3C4",meter:{sentence:"\uC7AC\uC0DD",noise:"\uC18C\uC74C",toggle:"\uC624\uB514\uC624 \uBBF8\uD130 \uD45C\uC2DC"},viewResult:"\uACB0\uACFC\uBCF4\uAE30",problemNotice:"{{n}}\uBC88 \uBB38\uC81C \uC785\uB2C8\uB2E4.",trainingSettingsTitle:"\uD6C8\uB828 \uC124\uC815",sentencePreview:"\uBB38\uC7A5 \uBBF8\uB9AC\uBCF4\uAE30",notHeard:"\uC548 \uB4E4\uB838\uC5B4\uC694.",heardWell:"\uC798 \uB4E4\uB838\uC5B4\uC694.",confirmTitle:"\uBB38\uC7A5\uC744 \uD655\uC778\uD558\uACE0 \uC798 \uB4E4\uB838\uB294\uC9C0 \uC120\uD0DD\uD558\uC138\uC694.",noSoundWaveform:"\uC18C\uB9AC \uBE44\uAD50 \uBB38\uC81C\uB294 \uC6E8\uC774\uBE0C\uD3FC\uC744 \uD45C\uD604\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",noise:{level:{none:"\uC5C6\uC74C",weak:"\uC57D\uD568",medium:"\uBCF4\uD1B5",strong:"\uAC15\uD568",veryStrong:"\uB9E4\uC6B0 \uAC15\uD568"},type:{none:"\uC5C6\uC74C",default:"\uAE30\uBCF8",street:"\uAE38\uAC70\uB9AC",buzz:"\uC640\uAE00\uC640\uAE00",restaurant:"\uC2DD\uB2F9"}},listenTitle:"\uC81C\uC2DC\uD558\uB294 \uBB38\uC7A5\uC744 \uB4E4\uC5B4\uC8FC\uC138\uC694.",listenButton:"\uBB38\uC7A5 \uB4E3\uAE30",playSound:"\uC18C\uB9AC \uB4E3\uAE30",playAll:"\uBAA8\uB450 \uB4E3\uAE30",selectInOrder:"\uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCE74\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694.",stop:"\uC815\uC9C0",preview:"\uBBF8\uB9AC \uB4E3\uAE30",next:"\uB2E4\uC74C",completed:"\uD6C8\uB828 \uC644\uB8CC",selected:"\uC120\uD0DD\uB428",nthSelected:"{{n}}\uBC88\uC9F8 \uC120\uD0DD",fontSizeMin:"\uAE00\uC528 \uD06C\uAE30\uAC00 \uCD5C\uC18C\uC785\uB2C8\uB2E4.",fontSizeMax:"\uAE00\uC528 \uD06C\uAE30\uAC00 \uCD5C\uB300\uC785\uB2C8\uB2E4.",fontSizeDecrease:"\uAE00\uC790 \uD06C\uAE30 \uAC10\uC18C",fontSizeIncrease:"\uAE00\uC790 \uD06C\uAE30 \uC99D\uAC00",toggleBackground:"\uBC30\uACBD \uC804\uD658",cardInstructions:"\uB0B1\uB9D0 \uCE74\uB4DC\uB97C \uBCF4\uACE0 \uC18C\uB9AC\uB97C \uB4E3\uACE0 \uD655\uC778\uD558\uC138\uC694.",noCards:"\uCE74\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",audioFetchError:"\uC0AC\uC6B4\uB4DC \uC18C\uC2A4\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.",ttsUnavailable:"\uC774 \uAE30\uAE30\uC5D0\uC11C\uB294 \uC74C\uC131\uC744 \uB4E4\uB824\uC904 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",selectConfirm:"\uBB38\uC81C\uB97C \uBCF4\uACE0 \uD574\uB2F9\uD558\uB294 \uB0B4\uC6A9\uC744 \uC120\uD0DD\uD558\uC138\uC694.",orderListDefault:"\uBB38\uC7A5\uC744 \uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uBC30\uCE58\uD558\uC138\uC694.",result:{pendingDone:"\uACB0\uACFC\uB97C \uACC4\uC0B0\uD558\uB294 \uC911\uC774\uB77C \uC544\uC9C1 \uC644\uB8CC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",eyebrow:"\uD6C8\uB828 \uC644\uB8CC",title:"\uD6C8\uB828\uC744 \uBAA8\uB450 \uB9C8\uCCE4\uC2B5\uB2C8\uB2E4.",scoreAria:"{{correct}} / {{total}} \uBB38\uD56D",elapsed:"\uC18C\uC694 \uC2DC\uAC04",summary:"{{correct}}\uAC1C\uC758 \uBB38\uD56D\uC744 \uC798 \uB4E4\uC5C8\uC2B5\uB2C8\uB2E4.",tableAriaLabel:"\uBB38\uD56D\uBCC4 \uD310\uC815",colJudge:"\uD310\uC815",colAnswerSelected:"\uC815\uB2F5 \xB7 \uC120\uD0DD",colAnswer:"\uC815\uB2F5",colSelected:"\uC120\uD0DD",heardWell:"\uC798 \uB4E4\uC5C8\uC5B4\uC694",notHeard:"\uBABB \uB4E4\uC5C8\uC5B4\uC694",notJudged:"\uBBF8\uD310\uC815",replay:"\uB2E4\uC2DC\uD558\uAE30",done:"\uC644\uB8CC",viewResult:"\uACB0\uACFC \uD655\uC778",noContent:"(\uB0B4\uC6A9\uC5C6\uC74C)"},up:"\uC704\uB85C",down:"\uC544\uB798\uB85C",prev:"\uC774\uC804",listenLabel:"\uBB38\uC7A5 \uB4E3\uAE30",sourcePlay:"\uC18C\uC2A4 {{n}} \uC7AC\uC0DD",listen:"\uB4E3\uAE30",audioStatus:{idle:"\uB300\uAE30",resolving:"\uB9AC\uC18C\uC2A4 \uB9E4\uD551 \uC911\u2026",checking_exists:"\uD30C\uC77C \uC874\uC7AC \uD655\uC778\u2026",getting_signed_url:"\uC11C\uBA85 URL \uC870\uD68C\u2026",downloading:"\uB2E4\uC6B4\uB85C\uB4DC \uC911\u2026",measuring_duration:"\uC624\uB514\uC624 \uAE38\uC774 \uCE21\uC815\u2026",ready:"\uC900\uBE44 \uC644\uB8CC",error:"\uC624\uB958 \uBC1C\uC0DD"}},va={totalCount:"\uAC1C\uC758 \uD6C8\uB828 \uBB36\uC74C",renameGroup:"\uADF8\uB8F9 \uC774\uB984 \uBC14\uAFB8\uAE30",itemCount:"\uD6C8\uB828 \uAC1C\uC218",menu:{edit:"\uD6C8\uB828 \uBB36\uC74C \uC218\uC815",rename:"\uC774\uB984 \uBC14\uAFB8\uAE30",move:"\uADF8\uB8F9 \uC774\uB3D9",duplicate:"\uD6C8\uB828 \uBB36\uC74C \uBCF5\uC0AC",publish:"\uB9D0\uADC0\uC790\uB8CC\uC2E4\uC5D0 \uC62C\uB9AC\uAE30"},sort:{customers:"\uD6C8\uB828 \uACE0\uAC1D"},copyLink:"\uB9C1\uD06C \uBCF5\uC0AC",removeLink:"\uB9C1\uD06C \uC81C\uAC70",linkRemoved:"\uB9C1\uD06C\uAC00 \uC81C\uAC70\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",linkSaveFirst:"\uBA3C\uC800 \uD6C8\uB828 \uBB36\uC74C\uC744 \uC800\uC7A5\uD574\uC8FC\uC138\uC694.",linkSaveFirstHint:"\uC800\uC7A5\uB41C \uD6C8\uB828 \uBB36\uC74C\uC5D0\uC11C\uB9CC \uACF5\uC720 \uB9C1\uD06C\uB97C \uC0DD\uC131\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",linkCopySelect:"\uBCF5\uC0AC\uAC00 \uB9C9\uD600 \uB9C1\uD06C\uB97C \uC120\uD0DD\uD588\uC2B5\uB2C8\uB2E4. Ctrl/\u2318+C\uB85C \uBCF5\uC0AC\uD558\uC138\uC694.",nameRequired:"\uD6C8\uB828 \uBB36\uC74C \uC774\uB984\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694.",itemRequired:"\uD6C8\uB828\uC744 1\uAC1C \uC774\uC0C1 \uB2F4\uC544\uC8FC\uC138\uC694.",randomAdd:"\uBB34\uC791\uC704 \uCD94\uAC00"},Ba={totalCount:"\uBA85\uC758 \uACE0\uAC1D",loadError:"\uBAA9\uB85D\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.",basicInfo:{editTooltip:"\uC218\uC815\uD558\uAE30"},member:{placeholder:"\uC774\uBA54\uC77C \uB610\uB294 \uC804\uD654",link:"\uC5F0\uACB0",linking:"\uC5F0\uACB0 \uC911\u2026"},device:{title:"\uCCAD\uAC01\uC7AC\uD65C\uAE30\uAE30",addTooltip:"\uC0C8\uB85C \uC0DD\uC131",addButton:"\uAE30\uAE30 \uCD94\uAC00",listTooltip:"\uBAA9\uB85D \uBCF4\uAE30",listTitle:"\uCE21 \uAE30\uAE30 \uBAA9\uB85D",historyEmpty:"\uB4F1\uB85D\uB41C \uAE30\uAE30 \uC774\uB825\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",wearing:"\uCE21 \uCC29\uC6A9\uC911",notRegistered:"\uBBF8\uB4F1\uB85D",unit:"\uAC1C",wearingNow:"\uCC29\uC6A9",wear:"\uCC29\uC6A9",unwear:"\uCC29\uC6A9 \uD574\uC81C",wornSince:"{{date}}\uBD80\uD130",release:"\uD574\uC81C",historyTitle:"\uCCAD\uAC01\uC7AC\uD65C\uAE30\uAE30 \uC774\uB825"},schedule:{title:"\uBC29\uBB38 \uC608\uC815",addTooltip:"\uC608\uC815 \uB4F1\uB85D",listTooltip:"\uC804\uCCB4 \uBCF4\uAE30",empty:"\uC608\uC815\uB41C \uBC29\uBB38\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",registerTitle:" \uACE0\uAC1D\uB2D8 \uBC29\uBB38 \uC608\uC815 \uB4F1\uB85D",memoPlaceholder:"\uBC29\uBB38 \uC608\uC815 \uAD00\uB828 \uBA54\uBAA8\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694."},visitHistory:{title:"\uBC29\uBB38 \uC774\uB825",addTooltip:"\uC2E0\uADDC \uB4F1\uB85D",empty:"\uC544\uC9C1 \uBC29\uBB38 \uAE30\uB85D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",popupTitle:" \uACE0\uAC1D\uB2D8 \uBC29\uBB38 \uC774\uB825",registerTitle:" \uACE0\uAC1D\uB2D8 \uC2E0\uADDC \uBC29\uBB38 \uB4F1\uB85D"},homework:{title:"\uC219\uC81C \uC9C4\uD589\uC0C1\uD669",active:"\uD65C\uC131",inactive:"\uBE44\uD65C\uC131",copy:"\uB9C1\uD06C \uBCF5\uC0AC",copied:"\uB9C1\uD06C\uAC00 \uBCF5\uC0AC\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},moreItems:"\uB354 \uC788\uC74C",viewAll:"\uC804\uCCB4 \uBCF4\uAE30",visits:{title:"\uBC29\uBB38"},trainingRecord:{title:"\uACE0\uAC1D \uD6C8\uB828 \uAE30\uB85D"},status:{trainingSubtitle:"\uD6C8\uB828 \uD604\uD669"},detail:{session:{completedFmt:"\uC644\uB8CC {{done}}/{{total}} \xB7 {{duration}}"},visitSuffix:"\uC758 \uBC29\uBB38"},duration:{minSec:"{{m}}\uBD84 {{s}}\uCD08",min:"{{m}}\uBD84",sec:"{{s}}\uCD08"}},Da={plan:{recommendedFor:"\uC774\uB7F0 \uBD84\uAED8 \uCD94\uCC9C\uD569\uB2C8\uB2E4.",features:"\uD575\uC2EC \uAE30\uB2A5",freePrice:"\uBB34\uB8CC",contact:"\uBB38\uC758\uD558\uAE30",tierFallback:"\uC774\uC6A9\uAD8C",openPromo:"\uC624\uD508 \uD2B9\uAC00"},products:{mgrEnterprise:{tier:{price:"\uBB38\uC758"}}}},Ta={title:"\uCFE0\uD3F0",subtitle:"\uCFE0\uD3F0 \uCF54\uB4DC\uB97C \uC785\uB825\uD558\uAC70\uB098 \uBCF4\uC720 \uCFE0\uD3F0\uC744 \uD655\uC778\uD558\uC138\uC694.",input:{label:"\uCFE0\uD3F0 \uCF54\uB4DC",placeholder:"\uCFE0\uD3F0 \uCF54\uB4DC \uC785\uB825"},applyButton:"\uC801\uC6A9",error:{invalid:"\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uCFE0\uD3F0 \uCF54\uB4DC\uC785\uB2C8\uB2E4.",alreadyUsed:"\uC774\uBBF8 \uC0AC\uC6A9\uB41C \uCFE0\uD3F0\uC785\uB2C8\uB2E4."},success:{applied:'"{{name}}" \uCFE0\uD3F0\uC774 \uC801\uC6A9\uB418\uC5C8\uC2B5\uB2C8\uB2E4.'},section:{owned:"\uBCF4\uC720 \uCFE0\uD3F0"},status:{used:"\uC0AC\uC6A9 \uC644\uB8CC",available:"\uC0AC\uC6A9 \uAC00\uB2A5"}},Na={unitVisit:"\uAC74",periodAll:"\uC804\uCCB4",showN:"{{n}}\uAC1C\uC529"},_a={subtitle:"\uC5C5\uCCB4 \uBC0F \uBC95\uC778 \uC815\uBCF4\uB97C \uAD00\uB9AC\uD558\uC138\uC694.",editButton:"\uC815\uBCF4 \uC218\uC815",basicInfo:{title:"\uAE30\uBCF8 \uC815\uBCF4"},contactInfo:{title:"\uC5F0\uB77D\uCC98 \uC815\uBCF4"}},La={title:"\uD6C8\uB828\uBCC4 \uB4E3\uAE30",subtitle:"\uC6D0\uD558\uB294 \uD6C8\uB828 \uC720\uD615\uC744 \uC120\uD0DD\uD558\uC138\uC694.",listenInNoise:{title:"\uC18C\uC74C \uD558 \uBB38\uC7A5 \uB4E3\uAE30",desc:"\uB2E4\uC591\uD55C \uC18C\uC74C \uD658\uACBD\uC5D0\uC11C \uBB38\uC7A5 \uCCAD\uB825\uC744 \uD6C8\uB828\uD569\uB2C8\uB2E4."},shortStory:{title:"\uC9E7\uC740 \uC774\uC57C\uAE30 \uB4E3\uAE30",desc:"\uC9E7\uC740 \uC774\uC57C\uAE30\uB97C \uB4E3\uACE0 \uB0B4\uC6A9\uC744 \uC774\uD574\uD569\uB2C8\uB2E4."},longStory:{title:"\uAE34 \uC774\uC57C\uAE30 \uB4E3\uAE30",desc:"\uAE34 \uC774\uC57C\uAE30\uB97C \uC9D1\uC911\uD574\uC11C \uB4E3\uACE0 \uB0B4\uC6A9\uC744 \uD30C\uC545\uD569\uB2C8\uB2E4."},orderingSentence:{title:"\uBB38\uC7A5 \uC21C\uC11C\uD654",desc:"\uB4E4\uC740 \uBB38\uC7A5\uB4E4\uC744 \uC62C\uBC14\uB978 \uC21C\uC11C\uB85C \uBC30\uC5F4\uD569\uB2C8\uB2E4."},SAME_SOUND_PICK:{label:"\uAC19\uC740 \uC18C\uB9AC \uACE0\uB974\uAE30",sub:"\uB4E4\uC740 \uC18C\uB9AC\uC640 \uAC19\uC740 \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},SAME_OR_DIFF:{label:"\uAC19\uC740\uC9C0 \uB2E4\uB978\uC9C0 \uB9DE\uD788\uAE30",sub:"\uB450 \uC18C\uB9AC\uAC00 \uAC19\uC740\uC9C0, \uB2E4\uB978\uC9C0 \uAD6C\uBD84\uD558\uC138\uC694."},HEAR_AND_PICK_SAME:{label:"\uC77C\uCE58\uD558\uB294 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",sub:"\uB4E4\uC740 \uC18C\uB9AC\uC758 \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},HEAR_AND_PICK_INCLUDED:{label:"\uD55C \uC74C\uC808 \uD3EC\uD568 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",sub:"\uB4E4\uC740 \uC74C\uC808\uC774 \uD3EC\uD568\uB41C \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},STARTS_WITH_SAME_SOUND:{label:"\uCCAB \uC74C\uC808\uC774 \uAC19\uC740 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",sub:"\uB4E4\uC740 \uB2E8\uC5B4\uC640 \uAC19\uC740 \uC18C\uB9AC\uB85C \uC2DC\uC791\uD558\uB294 \uB2E8\uC5B4\uB97C \uACE0\uB974\uC138\uC694."},LISTEN_AND_REMEMBER_ORDER:{label:"\uB4E3\uACE0 \uC21C\uC11C\uB300\uB85C \uAE30\uC5B5\uD558\uAE30",sub:"\uC138 \uB2E8\uC5B4\uB97C \uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCE74\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694."},MERGE_2_SYLLABLES:{label:"\uC74C\uC808 2\uAC1C \uD569\uCE58\uAE30",sub:"\uB450 \uC74C\uC808\uC744 \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},MERGE_3_SYLLABLES:{label:"\uC74C\uC808 3\uAC1C \uD569\uCE58\uAE30",sub:"\uC138 \uC74C\uC808\uC744 \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},MERGE_2_PHONEMES:{label:"\uC74C\uC18C 2\uAC1C \uD569\uCE58\uAE30",sub:"\uB450 \uC74C\uC18C\uB97C \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},MERGE_3_PHONEMES:{label:"\uC74C\uC18C 3\uAC1C \uD569\uCE58\uAE30",sub:"\uC138 \uC74C\uC18C\uB97C \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},DROP_1_FROM_2SYLL:{label:"2\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uD0C8\uB77D",sub:"2\uC74C\uC808 \uB2E8\uC5B4\uC5D0\uC11C \uD55C \uC74C\uC808\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},DROP_1_FROM_3SYLL:{label:"3\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uD0C8\uB77D",sub:"3\uC74C\uC808 \uB2E8\uC5B4\uC5D0\uC11C \uD55C \uC74C\uC808\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},DROP_PART_FROM_COMPOUND:{label:"\uD569\uC131\uC5B4\uC5D0\uC11C \uBD80\uBD84 \uD0C8\uB77D",sub:"\uD569\uC131\uC5B4\uC758 \uC77C\uBD80\uB97C \uBE7C\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},DROP_FINAL_CONSONANT_FROM_1SYLL:{label:"1\uC74C\uC808\uC5D0\uC11C \uBC1B\uCE68 \uD0C8\uB77D",sub:"\uBC1B\uCE68\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:{label:"1\uC74C\uC808\uC5D0\uC11C \uC790\uC74C \uD0C8\uB77D",sub:"\uC790\uC74C\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB0A8\uC744\uAE4C\uC694?"},CHANGE_1_SYLL_IN_2SYLL:{label:"2\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uBC14\uAFB8\uAE30",sub:"2\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC808\uC744 \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."},CHANGE_1_SYLL_IN_3SYLL:{label:"3\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uBC14\uAFB8\uAE30",sub:"3\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC808\uC744 \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."},CHANGE_1_PHONEME_IN_1SYLL:{label:"1\uC74C\uC808 \uB2E8\uC5B4 \uC911 1\uAC1C \uC74C\uC18C \uBC14\uAFB8\uAE30",sub:"1\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC18C\uB97C \uBC14\uAFD4 \uC0C8 \uC18C\uB9AC\uB97C \uB9CC\uB4DC\uC138\uC694."},CHANGE_1_PHONEME_IN_2SYLL:{label:"2\uC74C\uC808 \uB2E8\uC5B4 \uC911 1\uAC1C \uC74C\uC18C \uBC14\uAFB8\uAE30",sub:"2\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC18C\uB97C \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."}},Oa={comingSoon:"\uB2E8\uC5B4\uD6C8\uB828 \uAE30\uB2A5\uC744 \uC900\uBE44 \uC911\uC785\uB2C8\uB2E4."},Ra={colName:"\uB2E8\uC5B4\uD45C \uC774\uB984",open:"\uC5F4\uAE30",countSuffix:"\uAC1C\uC758 \uB2E8\uC5B4\uD45C",tab:{cards:"\uB2E8\uC5B4\uD45C \uCE74\uB4DC",tables:"\uB2E8\uC5B4\uD45C"},cardsEmpty:"\uC544\uC9C1 \uB9CC\uB4E0 \uB2E8\uC5B4\uD45C \uCE74\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",addCard:"\uB2E8\uC5B4\uD45C \uCE74\uB4DC \uCD94\uAC00",menu:{publishStore:"\uB9D0\uADC0\uC790\uB8CC\uC2E4\uC5D0 \uC62C\uB9AC\uAE30",unpublishStore:"\uB9D0\uADC0\uC790\uB8CC\uC2E4\uC5D0\uC11C \uB0B4\uB9AC\uAE30"},newBadge:"\uC0C8\uB85C \uB9CC\uB4E0 \uD45C",publishedBadge:"\uBC1C\uD589\uB428",sharedBadge:"\uACF5\uC720 \uC911"},Pa={title:"\uC8FC\uC694 \uB2E8\uC5B4",empty:"\uCD94\uCD9C\uB41C \uC8FC\uC694 \uB2E8\uC5B4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},Ma={defaultName:"\uB2E8\uC5B4 \uD45C",title:"\uB2E8\uC5B4 \uD45C \uB9CC\uB4E4\uAE30",subtitle:"\uCE78\uC744 \uC124\uC815\uD558\uACE0 \uB2E8\uC5B4\uB97C \uCD94\uAC00\uD558\uC5EC \uD45C\uB97C \uB9CC\uB4ED\uB2C8\uB2E4.",filterTitle:"\uD45C \uC124\uC815",filter:{composition:"\uAD6C\uC131",image:"\uC774\uBBF8\uC9C0",word:"\uB2E8\uC5B4",standardPron:"\uD45C\uC900 \uBC1C\uC74C",colloquialPron:"\uAD6C\uC5B4\uCCB4 \uBC1C\uC74C",paperOrientation:"\uC6A9\uC9C0 \uBC29\uD5A5",landscape:"\uAC00\uB85C",portrait:"\uC138\uB85C",columns:"\uCE78 \uC218",column:"{{count}}\uCE78",itemsPerPageWord:"\uD398\uC774\uC9C0\uB2F9 \uB2E8\uC5B4 \uC218",itemsPerPagePair:"\uD398\uC774\uC9C0\uB2F9 \uB300\uB9BD\uC30D \uC218",itemsPerPageOption:"{{count}}\uAC1C",pageIndicator:"{{current}} / {{total}}",pageNumber:"\uD398\uC774\uC9C0 \uBC88\uD638",pageNumberLeft:"\uC67C\uCABD",pageNumberCenter:"\uC911\uC559",pageNumberRight:"\uC624\uB978\uCABD",border:"\uC678\uACFD\uC120",cutLine:"\uC808\uCDE8\uC120",show:"\uD45C\uC2DC",hide:"\uBBF8\uD45C\uC2DC",dotted:"\uC810\uC120",corner:"\uCF54\uB108"},addWord:"\uCD94\uAC00\uD558\uAE30",wordInfo:"{{word}} \uB0B1\uB9D0 \uC815\uBCF4",emptyItems:"\uB2E8\uC5B4\uB97C 1\uAC1C \uC774\uC0C1 \uCD94\uAC00\uD574\uC8FC\uC138\uC694.",load:"\uBD88\uB7EC\uC624\uAE30",openNewWindow:"\uC0C8 \uCC3D\uC73C\uB85C \uBCF4\uAE30",saveButton:"\uC800\uC7A5\uD558\uAE30",saveAsNewButton:"\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5",print:"\uC778\uC1C4\uD558\uAE30",popupBlocked:"\uD31D\uC5C5\uC774 \uCC28\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uBE0C\uB77C\uC6B0\uC800 \uC124\uC815\uC5D0\uC11C \uD31D\uC5C5\uC744 \uD5C8\uC6A9\uD574 \uC8FC\uC138\uC694.",printFileNameSingle:"\uB2E8\uC5B4\uD45C",printFileNamePair:"\uB300\uB9BD\uC30D\uD45C",save:{title:"\uB2E8\uC5B4\uD45C \uC800\uC7A5\uD558\uAE30",nameLabel:"\uC774\uB984",desc:"\uC800\uC7A5\uD560 \uB2E8\uC5B4 \uD45C\uC758 \uC774\uB984\uC744 \uC785\uB825\uD558\uC138\uC694.",placeholder:"\uC774 \uB2E8\uC5B4\uD45C\uC5D0 \uB300\uD55C \uC81C\uBAA9\uC744 \uC785\uB825\uD558\uC138\uC694.",descriptionLabel:"\uC124\uBA85",descriptionPlaceholder:"\uC774 \uB2E8\uC5B4\uD45C\uC5D0 \uB300\uD55C \uC124\uBA85\uC744 \uC785\uB825\uD558\uC138\uC694.",duplicateName:"\uC774\uBBF8 \uC0AC\uC6A9 \uC911\uC778 \uC774\uB984\uC785\uB2C8\uB2E4.",nameRequired:"\uD45C \uC774\uB984\uC744 \uC785\uB825\uD574 \uC8FC\uC138\uC694.",autoFillHint:" (Tab \uB610\uB294 space \uC785\uB825\uC2DC \uC790\uB3D9 \uC785\uB825)",copyName:"{{name}} (\uBCF5\uC0AC)"},loadTable:{title:"\uC800\uC7A5\uB41C \uB2E8\uC5B4 \uD45C \uBD88\uB7EC\uC624\uAE30",empty:"\uC800\uC7A5\uB41C \uB2E8\uC5B4 \uD45C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",loadButton:"\uBD88\uB7EC\uC624\uAE30",itemCount:"{{count}}\uAC1C",deleteAriaLabel:"{{name}} \uC0AD\uC81C",sort:{newest:"\uCD5C\uC2E0\uC21C",oldest:"\uC624\uB798\uB41C\uC21C",name:"\uC774\uB984\uC21C",count:"\uB2E8\uC5B4 \uC218"},view:{grid:"\uD45C\uB85C \uBCF4\uAE30",list:"\uB9AC\uC2A4\uD2B8\uB85C \uBCF4\uAE30"}},groupDeleteMessage:"\uADF8\uB8F9 \uB0B4 \uB2E8\uC5B4\uD45C\uB294 '\uADF8\uB8F9 \uC5C6\uC74C'\uC73C\uB85C \uC774\uB3D9\uD569\uB2C8\uB2E4.",groupNamePlaceholder:"\uADF8\uB8F9 \uC774\uB984",store:{badge:"\uB9D0\uADC0\uC790\uB8CC\uC2E4"},card:{sub:"\uB2E8\uC5B4\uD45C \uCE74\uB4DC",empty:"\uC774 \uCE74\uB4DC\uC5D0 \uB2E8\uC5B4\uD45C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},toast:{renameError:"\uC774\uB984 \uBCC0\uACBD\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4",saveError:"\uC800\uC7A5\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4",deleteError:"\uC0AD\uC81C\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4",duplicateError:"\uBCF5\uC81C\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4",saveSuccess:"\uB2E8\uC5B4\uD45C\uAC00 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},scoring:{o:"{{word}} \uB9DE\uC74C",triangle:"{{word}} \uC560\uB9E4",x:"{{word}} \uD2C0\uB9BC",button:"\uCC44\uC810\uD558\uAE30",pickTitle:"\uB204\uAD6C\uB97C \uCC44\uC810\uD560\uAE4C\uC694?",pickSubtitle:"\u2018{{name}}\u2019 \uD45C\uB85C \uD6C8\uB828\uD55C \uACE0\uAC1D\uC744 \uACE0\uB974\uC138\uC694.",pickSearch:"\uC774\uB984 \uB610\uB294 \uC804\uD654\uBC88\uD638\uB85C \uCC3E\uAE30",pickEmpty:"\uB4F1\uB85D\uB41C \uACE0\uAC1D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",pickNoMatch:"\uCC3E\uB294 \uACE0\uAC1D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",pickAgain:"\uACE0\uAC1D \uB2E4\uC2DC \uACE0\uB974\uAE30",scoringFor:"{{name}} \uB2D8 \uCC44\uC810 \uC911",none:"\uCE78\uC744 \uB20C\uB7EC \u25CB \xB7 \u25B3 \xB7 \u2715 \uB97C \uB9E4\uAE30\uC138\uC694.",tally:"{{marked}}\uCE78 \uCC44\uC810 \xB7 \u25CB {{o}} \xB7 \u25B3 {{triangle}} \xB7 \u2715 {{x}} \xB7 \uC815\uB2F5\uB960 {{rate}}%",save:"\uCC44\uC810 \uC800\uC7A5",saved:"{{name}} \uB2D8\uC758 \uCC44\uC810 {{count}}\uCE78\uC744 \uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4.",reviewTitle:"\uBCF5\uC2B5\uD45C\uB97C \uB9CC\uB4E4\uAE4C\uC694?",reviewMessage:"{{name}} \uB2D8\uC774 \uD2C0\uB9AC\uAC70\uB098 \uC560\uB9E4\uD588\uB358 {{count}}\uCE78\uC73C\uB85C \uC0C8 \uD45C\uB97C \uB9CC\uB4ED\uB2C8\uB2E4. \uB9DE\uD78C \uCE78\uC740 \uBE60\uC9D1\uB2C8\uB2E4.",reviewConfirm:"\uBCF5\uC2B5\uD45C \uB9CC\uB4E4\uAE30",reviewDescription:"\u2018{{name}}\u2019 \uCC44\uC810\uC5D0\uC11C \uD2C0\uB9AC\uAC70\uB098 \uC560\uB9E4\uD588\uB358 {{count}}\uCE78\uC744 \uBAA8\uC740 \uD45C\uC785\uB2C8\uB2E4.",reviewCreated:"\u2018{{name}}\u2019\uC744(\uB97C) \uB9CC\uB4E4\uC5C8\uC2B5\uB2C8\uB2E4 \u2014 {{count}}\uCE78.",discardTitle:"\uB9E4\uAE34 \uCC44\uC810\uC744 \uBC84\uB9B4\uAE4C\uC694?",discardMessage:"{{count}}\uCE78\uC744 \uB9E4\uACBC\uC9C0\uB9CC \uC544\uC9C1 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uB098\uAC00\uBA74 \uC0AC\uB77C\uC9D1\uB2C8\uB2E4.",discardConfirm:"\uBC84\uB9AC\uACE0 \uB098\uAC00\uAE30"},info:{grade:"\uB09C\uC774\uB3C4: {{n}}\uB4F1\uAE09",syllables:"\uC74C\uC808 \uC218: {{n}}\uC74C\uC808",pos:"\uD488\uC0AC: {{v}}",wordType:"\uC720\uD615: {{v}}"},pos:{noun:"\uBA85\uC0AC",verb:"\uB3D9\uC0AC",adjective:"\uD615\uC6A9\uC0AC",adverb:"\uBD80\uC0AC",numeral:"\uC218\uC0AC",determiner:"\uAD00\uD615\uC0AC",interjection:"\uAC10\uD0C4\uC0AC",particle:"\uC870\uC0AC",affix:"\uC811\uC0AC",dependentNoun:"\uC758\uC874\uBA85\uC0AC",pronoun:"\uB300\uBA85\uC0AC",auxVerb:"\uBCF4\uC870\uB3D9\uC0AC",auxAdjective:"\uBCF4\uC870\uD615\uC6A9\uC0AC"}},Ia={editBanner:{message:"\uC800\uC7A5\uD558\uBA74 \uC9C0\uAE08 \uC218\uC815 \uC911\uC778 \uB2E8\uC5B4\uD45C\uAC00 \uAC31\uC2E0\uB429\uB2C8\uB2E4."},filterTitle:"\uB2E8\uC5B4 \uAC80\uC0C9 \uC124\uC815",filter:{positionAny:"\uBB34\uAD00",positionHead:"\uC5B4\uB450",positionMid:"\uC5B4\uC911",positionTail:"\uC5B4\uB9D0",difficulty:"\uB4F1\uAE09",grade:"{{n}}\uB4F1\uAE09",syllables:"\uC74C\uC808 \uC218",syllable:"{{n}}\uC74C\uC808",syllable5plus:"5\uC74C\uC808 \uC774\uC0C1",partOfSpeech:"\uD488\uC0AC",pos:{noun:"\uCCB4\uC5B8(\uBA85\uC0AC, \uC218\uC0AC)",verb:"\uC6A9\uC5B8(\uB3D9\uC0AC, \uD615\uC6A9\uC0AC)",modifier:"\uC218\uC2DD\uC5B8(\uBD80\uC0AC, \uAD00\uD615\uC0AC)"},wordType:"\uC720\uD615",type:{native:"\uACE0\uC720\uC5B4",sino:"\uD55C\uC790\uC5B4",foreign:"\uC678\uB798\uC5B4",mixed:"\uD63C\uC885\uC5B4"},exclude:"\uC81C\uC678",excludeNoImage:"\uC774\uBBF8\uC9C0 \uC5C6\uC74C"},searchButton:"\uAC80\uC0C9\uD558\uAE30",resultUnit:"\uB2E8\uC5B4",remaining:"{{count}}\uAC1C \uB0A8\uC74C",resultDisc:"\uC6D0\uD558\uB294 {{unit}} \uC120\uD0DD\uD558\uC138\uC694. {{max}}\uAC1C\uAE4C\uC9C0 \uC120\uD0DD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. ({{selected}}/{{max}})",resultTitlePrefix:"\uCD1D ",resultTitleSuffix:"\uAC1C\uC758 {{unit}} \uAC80\uC0C9\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",emptyResult:"\uAC80\uC0C9 \uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",groupCount:"{{count}}\uAC1C",sort:{aria:"\uC815\uB82C",match:"\uC2DC\uC791 \uC6B0\uC120",ganada:"\uAC00\uB098\uB2E4\uC21C \u2191",ganadaDesc:"\uAC00\uB098\uB2E4\uC21C \u2193",syllable:"\uC74C\uC808 \uC218 \u2191",syllableDesc:"\uC74C\uC808 \uC218 \u2193",grade:"\uB4F1\uAE09\uC21C \u2191",gradeDesc:"\uB4F1\uAE09\uC21C \u2193",original:"\uBC1B\uC740 \uC21C\uC11C"},pageSize:"{{count}}\uAC1C\uC529 \uBCF4\uAE30",pageSizeAria:"\uD398\uC774\uC9C0 \uD06C\uAE30",popup:{title:"{{n}}\uBC88 \uCE78\uC5D0 \uB123\uC744 \uB2E8\uC5B4\uB97C \uC120\uD0DD\uD558\uC138\uC694"}},ka={clearAllSelection:"\uBAA8\uB450 \uC120\uD0DD \uD574\uC81C",divLine:"\uB300\uB9BD\uC120",removePair:"\uB300\uB9BD\uC30D \uBE7C\uAE30",removeWord:"\uB2E8\uC5B4 \uBE7C\uAE30"},xa={title:"\uC8FC\uC81C\uBCC4 \uB4E3\uAE30",subtitle:"\uC8FC\uC81C\uB97C \uC120\uD0DD\uD558\uACE0 \uB4E3\uAE30 \uD6C8\uB828\uC744 \uC2DC\uC791\uD558\uC138\uC694.",noiseTitle:"\uC18C\uC74C \uD558 \uBB38\uC7A5\uB4E3\uAE30",shortStoryTitle:"\uC9E7\uC740 \uC774\uC57C\uAE30 \uB4E3\uAE30",FOOD:"\uC74C\uC2DD",HLTH:"\uAC74\uAC15",WETH:"\uB0A0\uC528",PRSN:"\uC778\uBB3C",KRCT:"\uD55C\uAD6D\uBB38\uD654",STRY:"\uC774\uC57C\uAE30",LOCA:"\uC9C0\uC5ED",SOAR:"\uC0AC\uD68C\uC640 \uC608\uC220",NTSC:"\uC790\uC5F0\uACFC \uACFC\uD559",SPRT:"\uC2A4\uD3EC\uCE20",sub:{TRKRFD:"\uD55C\uAD6D \uC804\uD1B5\uC74C\uC2DD",MDKRFD:"\uD55C\uAD6D \uD604\uB300\uC74C\uC2DD",WRLDFD:"\uC138\uACC4\uC758 \uC74C\uC2DD",MTRFRT:"\uC2DD\uC7AC\uB8CC\uC640 \uACFC\uC77C",GEFDKL:"\uC74C\uC2DD \uC0C1\uC2DD",HTETHB:"\uAC74\uAC15\uD55C \uC2DD\uC2B5\uAD00",DISILL:"\uBCD1\uACFC \uC9C8\uD658",EXCISE:"\uC6B4\uB3D9",GEHTKL:"\uAC74\uAC15\uC0C1\uC2DD",GESSKL:"\uACC4\uC808\uC0C1\uC2DD",SNWRAN:"\uB208\uACFC \uBE44",WTHFCT:"\uC77C\uAE30\uC608\uBCF4",GEWTKL:"\uB0A0\uC528\uC0C1\uC2DD",JODYPS:"\uC870\uC120\uC2DC\uB300",MDKRPS:"\uD55C\uAD6D \uADFC\uD604\uB300",THKDPS:"\uC0BC\uAD6D\uC2DC\uB300",WRLART:"\uC138\uACC4\uC758 \uC608\uC220\uAC00",WRLPSN:"\uC138\uACC4\uC758 \uC778\uBB3C",KRLANG:"\uC6B0\uB9AC\uB9D0",TRPLCT:"\uC804\uD1B5\uB180\uC774",HERITG:"\uBB38\uD654\uC7AC",EVTFES:"\uD589\uC0AC\uC640 \uCD95\uC81C",GECTKL:"\uC0C1\uC2DD",FRYTAL:"\uB3D9\uD654",AMZING:"\uC2E0\uAE30\uD55C \uC774\uC57C\uAE30",DAYSTR:"\uC77C\uC0C1 \uC18D \uC774\uC57C\uAE30",KRLDMK:"\uD55C\uAD6D\uC758 \uBA85\uC18C",SELNMK:"\uC11C\uC6B8\uC758 \uBA85\uC18C",WRDTRB:"\uC138\uACC4\uC5EC\uD589",NAVIGT:"\uAE38 \uCC3E\uAE30",KRSOCI:"\uD55C\uAD6D",ECONEW:"\uACBD\uC81C\uC640 \uB274\uC2A4",GENART:"\uC608\uC220",GELFKL:"\uC0DD\uD65C \uC0C1\uC2DD",ANIMAL:"\uB3D9\uBB3C",PLANTS:"\uC2DD\uBB3C",ETHPLT:"\uC9C0\uAD6C",TOLELC:"\uB3C4\uAD6C\uC640 \uC804\uC790\uC81C\uD488",GESCKL:"\uACFC\uD559\uC0C1\uC2DD",INVDSP:"\uAC1C\uC778\uACBD\uAE30",MARART:"\uACA9\uD22C\uAE30",TEAMSP:"\uB2E8\uCCB4\uACBD\uAE30",FOOTBL:"\uCD95\uAD6C",GESPKL:"\uC2A4\uD3EC\uCE20 \uC0C1\uC2DD"}},ja={maxUses:"\uCD5C\uB300 \uC0AC\uC6A9 \uD69F\uC218 (\uBE44\uC6CC\uB450\uBA74 \uBB34\uC81C\uD55C)",redirect:"\uC774\uB3D9\uD560 \uD398\uC774\uC9C0 URL (\uBE44\uC6CC\uB450\uBA74 \uC571 \uBA54\uC778)",creating:"\uC0DD\uC131 \uC911\u2026",create:"\uB9C1\uD06C \uC0DD\uC131",created:"\u2713 \uB9C1\uD06C\uAC00 \uC0DD\uC131\uB418\uC5C8\uC2B5\uB2C8\uB2E4",copied:"\uBCF5\uC0AC\uB428!",copy:"\uBCF5\uC0AC",loading:"\uBD88\uB7EC\uC624\uB294 \uC911\u2026",empty:"\uC0DD\uC131\uB41C \uB9C1\uD06C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",uses:"{{count}}\uD68C \uC0AC\uC6A9",expiresAt:"\uB9CC\uB8CC: {{date}}",createdAt:"\uC0DD\uC131: {{date}}",confirmDelete:"\uC0AD\uC81C\uD560\uAE4C\uC694?",deactivate:"\uBE44\uD65C\uC131\uD654",delete:"\uC0AD\uC81C",status:{active:"\uC720\uD6A8",expired:"\uB9CC\uB8CC",inactive:"\uBE44\uD65C\uC131"}},Fa={passwordPlaceholder:"\uBE44\uBC00\uBC88\uD638 \uC785\uB825"},$a={subtitle:"\uC8FC\uC81C\uB97C \uC120\uD0DD\uD558\uC5EC \uB4E3\uAE30 \uC5F0\uC2B5\uC744 \uC9C4\uD589\uD558\uC138\uC694."},Ha={direction:{left:"\uC88C",right:"\uC6B0",label:"\uBC29\uD5A5"},wornDate:"\uCC29\uC6A9\uC77C",deviceType:"\uC885\uB958",brand:"\uBE0C\uB79C\uB4DC",fitType:"\uCC29\uC6A9\uD615\uD0DC",productName:"\uC81C\uD488\uBA85",validationError:{brandAndProduct:"\uBE0C\uB79C\uB4DC\uC640 \uC81C\uD488\uBA85\uC744 \uC785\uB825\uD574 \uC8FC\uC138\uC694."},addNew:"\uC0C8 \uAE30\uAE30 \uCD94\uAC00",selectFromList:"\uBAA9\uB85D\uC5D0\uC11C \uC120\uD0DD",removeDevice:"\uCC29\uC6A9 \uD574\uC81C",type:{hearingAid:"\uBCF4\uCCAD\uAE30",cochlearImplant:"\uC778\uACF5\uC640\uC6B0"}},Ga={stat:{totalCustomers:"\uCD1D \uACE0\uAC1D",monthlyVisits:"\uC774\uB2EC \uCD1D \uBC29\uBB38"},chart:{visitDetail:"\uC0C1\uC138 \uBC29\uBB38 \uD604\uD669",trainingDetail:"\uC0C1\uC138 \uD6C8\uB828 \uD604\uD669",weekly:"\uC8FC\uBCC4",daily:"\uC77C\uBCC4",periodMonth:"\uC6D4",periodWeek:"\uC8FC",weeklyPrefix:"\uC8FC\uAC04",monthlyPrefix:"\uC6D4\uAC04",visit:"\uBC29\uBB38",reservation:"\uC608\uC57D",trainingDone:"\uD6C8\uB828 \uC644\uB8CC",trainingInProgress:"\uD6C8\uB828 \uC911",weekRange:"{{start}}~{{end}}",week:"{{n}}\uC8FC"},subscriptionStatus:{active:"{{pct}}% \uD65C\uC131",expired:"{{pct}}% \uB9CC\uB8CC",unused:"{{pct}}% \uBBF8\uC0AC\uC6A9"}},Va={editBanner:{message:"\uC800\uC7A5\uD558\uBA74 \uC9C0\uAE08 \uC218\uC815 \uC911\uC778 \uB300\uB9BD\uC30D\uD45C\uAC00 \uAC31\uC2E0\uB429\uB2C8\uB2E4."},phonemeSelect:{title:"\uC74C\uC18C \uC120\uD0DD",vs:"\uB300"},caution:"\uC720\uC758\uC0AC\uD56D",mode:{include:"\uC74C\uC18C \uD3EC\uD568",pick:"\uC74C\uC18C \uB300\uB9BD",contrast:"\uC74C\uC18C \uB300\uB9BD \uC9C0\uC815",infoTitle:"\uB300\uB9BD \uBC29\uC2DD",infoInclude:"\uC74C\uC18C \uD3EC\uD568 \u2014 \uC120\uD0DD\uD55C \uC74C\uC18C\uAC00 \uBAA8\uB450 \uB4E4\uC5B4\uAC04 \uB2E8\uC5B4\uC640 \uADF8 \uB300\uB9BD\uC30D\uC744 \uCC3E\uC544\uC694.",infoPick:"\uC74C\uC18C \uB300\uB9BD \u2014 \uC120\uD0DD\uD55C \uC74C\uC18C\uAC00 \uB300\uB9BD\uC30D \uB450 \uB2E8\uC5B4\uC758 \uC2E4\uC81C \uCC28\uC774\uC810\uC77C \uB54C\uB9CC \uB9E4\uCE6D\uB3FC\uC694.",infoContrast:"\uC74C\uC18C \uB300\uB9BD \uC9C0\uC815 \u2014 \uAE30\uC900 \uB2E8\uC5B4\uC640 \uB300\uB9BD \uB2E8\uC5B4\uC758 \uC74C\uC18C\uB97C \uAC01\uAC01 \uC9C1\uC811 \uC120\uD0DD\uD574 \uB300\uB9BD\uC30D\uC744 \uCC3E\uC544\uC694."},count:"{{n}}\uAC1C",input:{char:"\uAE00\uC790 \uC120\uD0DD",pron:"\uBC1C\uC74C \uC120\uD0DD",infoTitle:"\uC785\uB825 \uBC29\uC2DD",infoChar:"\uAE00\uC790 \uC120\uD0DD \u2014 \uC120\uD0DD\uD55C \uC74C\uC18C\uB85C \uB2E8\uC5B4(\uAE00\uC790 \uAE30\uC900)\uB97C \uCC3E\uC740 \uD6C4, \uB2E8\uC5B4\uC758 \uD45C\uC900 \uBC1C\uC74C \uB300\uB9BD\uC30D\uC744 \uCC3E\uC2B5\uB2C8\uB2E4.",infoPron:"\uBC1C\uC74C \uC120\uD0DD \u2014 \uC120\uD0DD\uD55C \uC74C\uC18C\uB85C \uD45C\uC900 \uBC1C\uC74C \uB300\uB9BD\uC30D\uC744 \uCC3E\uC2B5\uB2C8\uB2E4."},phonemeN:"{{n}}\uBC88 \uC74C\uC808",phonemeSingleLabel:"\uC74C\uC808",phonemeContrastSingleLabel:"\uB300\uB9BD \uC74C\uC808",ordinals:["\uCCAB\uBC88\uC9F8","\uB450\uBC88\uC9F8","\uC138\uBC88\uC9F8","\uB124\uBC88\uC9F8"],phonemeOrdinalLabel:"{{ordinal}} \uC74C\uC808",phonemeContrastOrdinalLabel:"\uB300\uB9BD {{ordinal}} \uC74C\uC808",composition:"\uC815\uB2F5 \uB2E8\uC5B4 \uAD6C\uC131",syllableCount:"\uC74C\uC808 \uC218",syllableN:"{{n}}\uC74C\uC808",syllableNPlus:"{{n}}\uC74C\uC808 \uC774\uC0C1",onset:"\uCD08\uC131",vowel:"\uBAA8\uC74C",coda:"\uC885\uC131",filter:{searchOptionsTitle:"\uB300\uB9BD \uC124\uC815",searchModeLabel:"\uB300\uB9BD \uBC29\uC2DD",countLabel:"\uC785\uB825 \uC74C\uC808 \uAC2F\uC218",inputModeLabel:"\uC785\uB825 \uBC29\uC2DD",phonemeOrder:"\uC785\uB825 \uC74C\uC808 \uC704\uCE58",phonemeOrderInfo:["\uC77C\uCE58: \uB300\uB9BD\uC30D\uC774 \uC815\uD655\uD788 \uAC19\uC740 \uC704\uCE58(\uC74C\uC808)\uC5D0\uC11C\uB9CC \uCC28\uC774 \uB098\uC57C \uB9E4\uCE6D\uB3FC\uC694.","\uBB34\uAD00: \uCC28\uC774 \uB098\uB294 \uC704\uCE58\uB294 \uC0C1\uAD00\uC5C6\uC774 \uB9E4\uCE6D\uB3FC\uC694."],orderAny:"\uBB34\uAD00",orderMatch:"\uC77C\uCE58",difficultyInfo:"\uAD6D\uB9BD\uAD6D\uC5B4\uC6D0\uC758 \uAE30\uCD08 \uC5B4\uD718 \uB4F1\uAE09\uC774 \uACB0\uACFC\uC5D0 \uBC18\uC601\uB429\uB2C8\uB2E4.",selectLabel:"\uC120\uD0DD",onlyHasImage:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC",onlySameStructure:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC"},searchLabel:{error:"\uB370\uC774\uD130 \uBD88\uB7EC\uC624\uAE30 \uC2E4\uD328",loading:"\uBD88\uB7EC\uC624\uB294 \uC911\u2026"},confirmMessage:"\uC120\uD0DD\uD55C {{unit}} {{count}}\uAC1C\uB97C \uD3EC\uD568\uD55C \uB2E8\uC5B4 \uD45C \uC815\uBCF4\uAC00 \uC0AC\uB77C\uC9D1\uB2C8\uB2E4.",resetOptions:"\uAC80\uC0C9 \uC635\uC158 \uCD08\uAE30\uD654",phonemeContrast:"\uB300\uB9BD {{n}}\uBC88 \uC74C\uC808",infoNotes:["\uBBF8\uB9AC\uBCF4\uAE30 \uAE00\uC790\uB294 \uC120\uD0DD\uD55C \uC74C\uC18C\uC758 \uC870\uD569 \uC608\uC2DC\uC785\uB2C8\uB2E4. \uC2E4\uC81C \uAC80\uC0C9\uC740 \uD574\uB2F9 \uC74C\uC18C\uAC00 \uD3EC\uD568\uB41C \uBAA8\uB4E0 \uB2E8\uC5B4\uB97C \uB300\uC0C1\uC73C\uB85C \uD569\uB2C8\uB2E4.","\uCD08\uC131 '\u3147'\uC740 \uC120\uD0DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB2E8\uC5B4 \uC55E\uC5D0 \uC624\uB294 \u3147\uC740 \uC2E4\uC9C8\uC801\uC73C\uB85C \uBB34\uC74C\uC774\uC5B4\uC11C \uB300\uB9BD\uC30D \uC131\uB9BD\uC5D0 \uC601\uD5A5\uC744 \uC8FC\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","\uCD08\uC131\uACFC \uC885\uC131\uB9CC \uC120\uD0DD\uD558\uBA74 \uBAA8\uC74C\uC740 '\u314F'\uB85C \uC790\uB3D9 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","\uC74C\uC18C \uAC1C\uC218\uB97C \uB298\uB9AC\uBA74 \uAC01 \uC74C\uC18C \uC0AC\uC774\uC758 \uB300\uB9BD\uC30D\uC744 \uAC80\uC0C9\uD569\uB2C8\uB2E4."]},Wa={sentenceTyping:{roundCount:"{{rounds}}\uBB38\uC81C \xB7 \uBB38\uC81C\uB2F9 {{timeLimit}}\uCD08"},wordDefense:{me:"\uB098"},dictation:{title:"\uBC1B\uC544\uC4F0\uAE30",desc:"\uBB38\uC7A5\uC744 \uB4E3\uACE0 \uC815\uD655\uD788 \uBC1B\uC544\uC801\uB294 \uC5F0\uC2B5\uC785\uB2C8\uB2E4.",comingSoon:"\uAD6C\uD604 \uC608\uC815: \uC74C\uC131 \uC7AC\uC0DD, \uC785\uB825 \uD544\uB4DC, \uC815\uB2F5 \uBE44\uAD50"},result:{heading:"{{number}}\uB2E8\uACC4 \uD574\uB2F5",retry:"\uB2E4\uC2DC \uD480\uAE30"},common:{accuracy:"{{pct}}% \uC815\uD655\uB3C4"},soundMatch:{title:"\uC18C\uB9AC \uB9E4\uCE6D",desc:"\uAC19\uC740 \uC18C\uB9AC\uB97C \uAC00\uC9C4 \uB2E8\uC5B4 \uB610\uB294 \uBB38\uC7A5\uC744 \uBE60\uB974\uAC8C \uB9E4\uCE6D\uD558\uB294 \uAC8C\uC784\uC785\uB2C8\uB2E4.",comingSoon:"\uAD6C\uD604 \uC608\uC815: \uD50C\uB808\uC774 \uBC84\uD2BC, \uD0C0\uC774\uBA38, \uC810\uC218 \uC9D1\uACC4"},orderSequence:{title:"\uBB38\uC7A5 \uC21C\uC11C\uD654",desc:"\uD769\uC5B4\uC9C4 \uBB38\uC7A5 \uC870\uAC01\uC744 \uC62C\uBC14\uB978 \uC21C\uC11C\uB85C \uBC30\uC5F4\uD558\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",comingSoon:"\uAD6C\uD604 \uC608\uC815: \uBB38\uC7A5 \uC138\uD2B8, \uC21C\uC11C \uD655\uC778 \uC778\uD130\uD398\uC774\uC2A4"},speedListen:{title:"\uC18D\uB3C4 \uB4E3\uAE30",desc:"\uC2DC\uAC04 \uC81C\uD55C \uB0B4\uC5D0 \uBB38\uC7A5\uC758 \uB2E8\uC5B4 \uC218\uB97C \uB9DE\uCD94\uB294 \uB3C4\uC804\uD615 \uAC8C\uC784\uC785\uB2C8\uB2E4.",comingSoon:"\uAD6C\uD604 \uC608\uC815: \uC81C\uD55C\uC2DC\uAC04, \uC810\uC218\uD310"},noiseChallenge:{title:"\uC18C\uC74C \uCC4C\uB9B0\uC9C0",desc:"\uBC30\uACBD \uC18C\uC74C \uC18D\uC5D0\uC11C \uBB38\uC7A5\uC744 \uBD84\uBCC4\uD558\uB294 \uC5F0\uC2B5\uC785\uB2C8\uB2E4.",comingSoon:"\uAD6C\uD604 \uC608\uC815: \uB2E4\uC591\uD55C \uC18C\uC74C \uB808\uBCA8, \uC810\uC218 \uC9D1\uACC4"},fastListen:{title:"\uBE60\uB978 \uB4E3\uAE30",desc:"\uC9E7\uC740 \uBB38\uC7A5\uC744 \uBE60\uB974\uAC8C \uB4E4\uB824\uC8FC\uACE0 \uD575\uC2EC \uB2E8\uC5B4\uB97C \uC120\uD0DD\uD558\uB294 \uAC8C\uC784\uC785\uB2C8\uB2E4.",comingSoon:"\uAD6C\uD604 \uC608\uC815: \uB09C\uC774\uB3C4\uBCC4 \uC18D\uB3C4, \uD0C0\uC774\uBA38"},shadowing:{title:"\uC250\uB3C4\uC789",desc:"\uBB38\uC7A5\uC744 \uB530\uB77C \uB9D0\uD558\uBA70 \uBC1C\uC74C\uACFC \uC5B5\uC591\uC744 \uC5F0\uC2B5\uD558\uB294 \uBAA8\uB4DC\uC785\uB2C8\uB2E4.",comingSoon:"\uAD6C\uD604 \uC608\uC815: \uC7AC\uC0DD, \uB179\uC74C, \uBE44\uAD50 \uD53C\uB4DC\uBC31"},phonemeHunt:{title:"\uC74C\uC6B4 \uCC3E\uAE30",desc:"\uD2B9\uC815 \uC74C\uC6B4(\uBC1C\uC74C)\uC744 \uD3EC\uD568\uD55C \uB2E8\uC5B4\uB97C \uCC3E\uC544\uB0B4\uB294 \uAC8C\uC784\uC785\uB2C8\uB2E4.",comingSoon:"\uAD6C\uD604 \uC608\uC815: \uC74C\uC6B4 \uD544\uD130, \uD78C\uD2B8 \uAE30\uB2A5"}},Ya={lead:`\uC544\uC774\uD574\uBE0C\uB294 \uC18C\uB9AC\uB97C \uD1B5\uD574
|
|
2
|
+
\uC2E0\uB8B0\uB97C \uC313\uACE0
|
|
3
|
+
\uD68C\uBCF5\uC744 \uB3D5\uC2B5\uB2C8\uB2E4.`,site:{title:"\uC0AC\uC774\uD2B8",malgwi:"\uB9D0\uADC0",soundDirection:"\uC18C\uB9AC\uBC29\uD5A5\uC131\uC2DC\uC2A4\uD15C",vrSoundDirection:"VR\uC18C\uB9AC\uBC29\uD5A5\uC131\uC2DC\uC2A4\uD15C",hearingTest:"\uCCAD\uB825\uD14C\uC2A4\uD2B8 \uD504\uB85C"},sns:{title:"SNS",naverBlog:"\uB124\uC774\uBC84 \uBE14\uB85C\uADF8",kakao:"KAKAO Talk \uC624\uD508\uCC44\uD305"},policy:{title:"\uC815\uCC45",terms:"\uC774\uC6A9\uC57D\uAD00",privacy:"\uAC1C\uC778\uC815\uBCF4 \uCC98\uB9AC\uBC29\uCE68"},ceo:"\uB300\uD45C",address:"\uC8FC\uC18C",support:"\uACE0\uAC1D\uC13C\uD130",ceoName:"\uD55C\uC9C0\uD61C",addressValue:"\uAC15\uC6D0\uB3C4 \uCD98\uCC9C\uC2DC \uC2DC\uCCAD\uAE38 32 \uD574\uCC2C\uBE4C\uB529 3\uCE35 302\uD638"},Ka={trainingPhone:{topic:"\uD143\uBC2D\uAC00\uAFB8\uAE30",prev:"\uC774\uC804",next:"\uB2E4\uC74C",speed:"\uBE60\uB974\uAE30 3",noiseType:"\uC640\uAE00\uC640\uAE00",settings:"\uC124\uC815",start:{caption:"\uC544\uB798 \uD50C\uB808\uC774(\u25B6) \uBC84\uD2BC\uC744 \uB20C\uB7EC \uBB38\uC7A5\uC744 \uC798 \uB4E4\uC5B4\uBCF4\uC138\uC694. \uC798 \uB4E4\uC73C\uC2E0 \uB4A4 \uBB38\uC7A5\uC744 \uD655\uC778\uD558\uC138\uC694."},feedback:{caption:"\uC798 \uD0A4\uC6B4 \uBAA8\uC885\uC744 \uD143\uBC2D\uC5D0 \uC2EC\uACE0 \uBE44\uB2D0\uC744 \uC798 \uB36E\uC5B4 \uC90D\uB2C8\uB2E4."},done:{heardWell:"\uC798 \uB4E4\uB9B0 \uBB38\uC7A5",listenAgain:"\uD55C \uBC88 \uB354 \uB4E3\uAE30"}}},Ua={timeHM:"{{h}}\uC2DC {{m}}\uBD84",timeH:"{{h}}\uC2DC"},za={options:"\uD6C8\uB828 \uC635\uC158",difficulty:"\uB09C\uC774\uB3C4",exclude:"\uC81C\uC678",chosung:"\uCD08\uC131",excludeOptions:{none:"\uC5C6\uC74C",noImage:"\uC774\uBBF8\uC9C0 \uC5C6\uC74C"}},qa={answer:"\uC815\uB2F5",distractor:"\uC624\uB2F5"},Ja={phaseWordDownload:"\uB2E8\uC5B4 \uB370\uC774\uD130 \uB2E4\uC6B4\uB85C\uB4DC",phaseImageCheck:"\uC774\uBBF8\uC9C0 \uD655\uC778",phasePairAnalysis:"\uB2E8\uC5B4\uC30D \uBD84\uC11D",downloadingCount:"{{n}}\uAC1C \uB2E4\uC6B4\uB85C\uB4DC \uC911",checkingPage:"{{page}}\uD398\uC774\uC9C0 \uBAA9\uB85D \uD655\uC778 \uC911",imageCount:"{{done}} / {{total}}\uAC1C"},Qa={clearAriaLabel:"\uC785\uB825\uAC12 \uC9C0\uC6B0\uAE30"},Za={ariaLabel:"\uC120\uD0DD \uD0ED"},Xa={ariaLabel:"\uD0ED"},eu={dragPrompt:"\uD30C\uC77C\uC744 \uC774\uACF3\uC5D0 \uB4DC\uB798\uADF8\uD558\uC5EC \uC5C5\uB85C\uB4DC",browseButton:"\uD30C\uC77C \uC120\uD0DD",removeAriaLabel:"{{name}} \uC81C\uAC70"},tu={ariaLabel:"\uC0AC\uC6A9\uC790 \uC544\uBC14\uD0C0"},nu={relativeDay:{today:"\uC624\uB298",yesterday:"\uC5B4\uC81C",daysAgo:"{{n}}\uC77C \uC804"},reason:{notLoggedIn:"\uB85C\uADF8\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4."},list:{title:"\uBC1B\uC740 \uC219\uC81C"},status:{expired:"\uB9CC\uB8CC\uB428",done:"\uC644\uB8CC {{count}}\uD68C \xB7 {{date}}",notDone:"\uBBF8\uC644\uB8CC"}},ou={weekly:{title:"\uC8FC\uAC04 \uD6C8\uB828 \uD604\uD669",daily:"\uC624\uB298\uC758 \uB4E3\uAE30",crossword:"\uAC00\uB85C\uC138\uB85C"},homework:{title:"\uC219\uC81C \uC9C4\uD589\uD604\uD669",totalRate:"\uC804\uCCB4 \uC644\uB8CC\uC728",count:"\uC804\uCCB4",done:"\uC644\uB8CC",remaining:"\uBBF8\uC644\uB8CC"},today:{tooltipTotal:"\uC804\uCCB4",tooltipDone:"\uC644\uB8CC"},filter:{countSuffix:" \uD6C8\uB828"},time:{countLabel:"{{n}}\uD68C \uD6C8\uB828",empty:"\uD6C8\uB828 \uAE30\uB85D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."},daily:{title:"\uC624\uB298\uC758 \uB4E3\uAE30 \uAE30\uB85D",empty:"\uC644\uB8CC\uD55C \uD68C\uCC28\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},crossword:{title:"\uAC00\uB85C\uC138\uB85C\uD034\uC988",empty:"\uC644\uB8CC\uD55C \uB808\uBCA8\uC774 \uC5C6\uC2B5\uB2C8\uB2E4"},visit:{title:"\uBC29\uBB38 \uC5F0\uB3D9 \uAE30\uB85D"},detail:"\uC0C1\uC138\uBCF4\uAE30",trainingType:{LISTEN_IN_NOISE:"\uC18C\uC74C \uD558 \uBB38\uC7A5",SHORT_STORY:"\uC9E7\uC740 \uC774\uC57C\uAE30",LONG_STORY:"\uAE34 \uC774\uC57C\uAE30",ORDERING_SENTENCE:"\uBB38\uC7A5 \uC21C\uC11C\uD654"}},ru={publish:{descPlaceholder:"\uB9D0\uADC0\uC790\uB8CC\uC2E4\uC5D0 \uD45C\uC2DC\uD560 \uD55C \uC904 \uC124\uBA85 (\uC120\uD0DD)"},import:"\uB0B4 \uD6C8\uB828\uC5D0 \uAC00\uC838\uC624\uAE30",publisher:"\uAC8C\uC2DC\uC790",time:{justNow:"\uBC29\uAE08 \uC804",minutesAgo:"{{n}}\uBD84 \uC804",hoursAgo:"{{n}}\uC2DC\uAC04 \uC804",daysAgo:"{{n}}\uC77C \uC804",weeksAgo:"{{n}}\uC8FC \uC804",monthsAgo:"{{n}}\uAC1C\uC6D4 \uC804",yearsAgo:"{{n}}\uB144 \uC804"},badge:{shared:"\uB9D0\uADC0\uC790\uB8CC\uC2E4"}},au={manage:{unit:"\uAC74"}},uu={cancelLabel:"\uCDE8\uC18C"},iu={steps:"\uC9C4\uD589 \uB2E8\uACC4 {{current}} / {{total}}"},lu={panelTitle:"\uD6C8\uB828 \uC624\uB2F5",viewItems:"\uBB38\uD56D",viewTypes:"\uC720\uD615",colPending:"\uB0A8\uC740 \uAC83",colTrend:"\uBCC0\uD654",colRuns:"\uD310",unitItem:"\uAC1C",skippedOnly:"\uC61B \uAE30\uB85D {{n}}\uAC74\uC740 \uBB34\uC5C7\uC744 \uD47C \uAC83\uC778\uC9C0 \uC548 \uB0A8\uC544 \uC788\uC5B4 \uC148\uC5D0\uC11C \uBE90\uC2B5\uB2C8\uB2E4.",summaryLabel:"\uC313\uC778 \uAE30\uB85D",summaryValue:"{{items}}\uBB38\uD56D \xB7 \uC544\uC9C1 \uBABB \uC7A1\uC740 \uAC83 {{pending}}\uAC1C",nextLabel:"\uB2E4\uC74C\uC5D0 \uBCFC \uAC83",nextCount:"{{count}}\uAC1C",nextCountCapped:"{{total}}\uAC1C \uC911 {{shown}}\uAC1C",picked:"\u2192 {{what}}",typeClear:"\uB2E4 \uC7A1\uC558\uC5B4\uC694",typePending:"{{total}}\uAC1C \uC911 {{pending}}\uAC1C \uB0A8\uC74C",flat:"\uBCC0\uD654 \uC5C6\uC74C",runs:"{{count}}\uD310",avgDuration:"\uD3C9\uADE0 {{sec}}\uCD08"},su={resetColumns:"\uCE78 \uB108\uBE44 \uCD08\uAE30\uD654"},cu={panelTitle:"\uB2E8\uC5B4\uD45C \uCC44\uC810",viewWords:"\uB0B1\uB9D0",viewTables:"\uD45C",colLatest:"\uB9C8\uC9C0\uB9C9",colTrend:"\uBCC0\uD654",unitTime:"\uD68C",summaryLabel:"\uC313\uC778 \uCC44\uC810",summaryValue:"{{times}}\uD68C \xB7 \uB0B1\uB9D0 {{words}}\uAC1C",nextLabel:"\uB2E4\uC74C\uC5D0 \uBCFC \uAC83",nextCount:"{{count}}\uAC1C",allClear:"\uC9C0\uB09C\uBC88\uC5D0 \uBAA8\uB450 \uB9DE\uD614\uC2B5\uB2C8\uB2E4.",times:"{{count}}\uD68C",flat:"\uBCC0\uD654 \uC5C6\uC74C",recentLabel:"\uCD5C\uADFC \uCC44\uC810",nextCountCapped:"{{total}}\uAC1C \uC911 {{shown}}\uAC1C"},du={ariaLabel:"\uBC30\uB108",dotAriaLabel:"{{count}}\uAC1C \uC911 {{index}}\uBC88\uC9F8 \uBC30\uB108"},Cu={selectYearMonth:"\uC5F0\uC6D4 \uC120\uD0DD",chooseDate:"\uB0A0\uC9DC \uC120\uD0DD"},gu={previewRegion:"\uBCF4\uACE0\uC11C \uBBF8\uB9AC\uBCF4\uAE30 \u2014 \uC88C\uC6B0\uB85C \uAD74\uB824 \uBCFC \uC218 \uC788\uC2B5\uB2C8\uB2E4"},fu={description:"\uC124\uBA85",textbox:"\uBCF8\uBB38",training:"\uD6C8\uB828 \uC548\uB0B4",menu:"\uBA54\uB274"},mu={devNone:"\uBC1C\uB2EC \uC790\uB8CC \uC5C6\uC74C",place:{labial:"\uC591\uC21C\uC74C",alveolar:"\uCE58\uC870\uC74C",palatal:"\uACBD\uAD6C\uAC1C\uC74C",velar:"\uC5F0\uAD6C\uAC1C\uC74C",glottal:"\uC131\uBB38\uC74C"}},pu={clearSelection:"\uC120\uD0DD \uD574\uC81C"},hu={showResult:"{{type}} \uACB0\uACFC\uBCF4\uAE30"},yu={selected:"\uC120\uD0DD\uB428",remove:"\uC81C\uAC70",exclude:"\uC81C\uC678",nthSelected:"{{n}}\uBC88\uC9F8 \uC120\uD0DD"},bu={loading:"\uBD88\uB7EC\uC624\uB294 \uC911\u2026"},Su={state:{active:"\uC18C\uB9AC \uB098\uB294 \uC911",played:"\uB4E4\uC74C",correct:"\uC815\uB2F5",wrong:"\uC624\uB2F5"}},wu={ariaLabel:"\uC774\uB3D9 \uACBD\uB85C"},Eu={empty:"\uB4F1\uB85D\uB41C \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."},Au={main:"\uBA54\uC778 \uADF8\uB77C\uB514\uC5B8\uD2B8",soft:"\uC18C\uD504\uD2B8",sub:"\uC11C\uBE0C \uCEEC\uB7EC",deep:"\uB525 \uADF8\uB77C\uB514\uC5B8\uD2B8",softSub:"\uC18C\uD504\uD2B8 \uC11C\uBE0C",warm:"\uC6DC(\uAC15\uC870)",dark:"\uB2E4\uD06C",radial:"\uBC29\uC0AC\uD615 \uADF8\uB77C\uB514\uC5B8\uD2B8",diagonal:"\uB300\uAC01\uC120 \uD328\uD134",dots:"\uB3C4\uD2B8 \uD328\uD134",outline:"\uC544\uC6C3\uB77C\uC778",success:"\uC131\uACF5/\uC644\uB8CC",naver:"\uB124\uC774\uBC84 \uBE14\uB85C\uADF8 \uC548\uB0B4",instagram:"\uC778\uC2A4\uD0C0\uADF8\uB7A8 \uC548\uB0B4"},vu={common:sa,calendar:ca,passCard:da,searchField:Ca,rating:ga,colorPicker:fa,dropdown:ma,accordion:pa,header:ha,nav:ya,settings:ba,usage:Sa,account:wa,help:Ea,training:Aa,trainingSettings:va,customers:Ba,payment:Da,coupons:Ta,visits:Na,company:_a,trainingType:La,myWordTraining:Oa,myWordTable:Ra,keyWords:Pa,wordTable:Ma,wordSearch:Ia,wordPrint:ka,topic:xa,accessLinkManager:ja,login:Fa,trainingPlanRun:$a,device:Ha,manager:Ga,wordPairs:Va,game:Wa,footer:Ya,landing:Ka,date:Ua,trainingSetPage:za,wordTrainingPreview:qa,wordData:Ja,textField:Qa,segmentedControl:Za,tabs:Xa,fileUpload:eu,avatar:tu,myHomework:nu,trainingStatus:ou,store:ru,homework:au,inquiry:uu,progress:iu,trainingMiss:lu,table:su,wordScore:cu,topBanner:du,datePicker:Cu,report:gu,tooltip:fu,phonemeProfile:mu,bulkBar:pu,debug:hu,badge:yu,loader:bu,soundCompass:Su,breadcrumb:wu,board:Eu,promoBannerBg:Au},Bu={statusFilter:"Filter by status",pageSizeSelect:"Items per page",selectedCount_one:"{{count}} selected",selectedCount_other:"{{count}} selected",moreFor:"More options for {{name}}",cancel:"Cancel",info:"Info",errorState:{message:"Couldn't load this.",retry:"Try again"},save:"Save",confirm:"Confirm",close:"Close",back:"Back",emptyTrainingName:"Training name is empty.",remove:"Remove",image:"Image",delete:"Delete",reset:"Reset",update:"Update",download:"Download",search:"Search",empty:"No data.",yes:"Yes",no:"No",all:"All",none:"None",days_one:"{{count}} day",days_other:"{{count}} days",loadMore:"Load More",retry:"Try Again",prevPage:"Previous page",nextPage:"Next page",play:"Play",pause:"Pause",playPause:"Play / Pause",replay:"Replay",subscription:"Subscription",done:"Done",failed:"Failed",continue:"Continue",notification:"Notice",emptyList:"No items",menu:"Menu",resetSelection:"Reset Selection",pageSizeLabel:"Show {{n}}",totalCountPrefix:"Total: ",totalCountSuffix:"",expand:"Expand",collapse:"Collapse",popup:"Popup",more:"More",codeBlock:"Code block",totalPrefix:"",copyCode:"Copy code",copied:"Copied",col:{problem:"Question"},phonetics:{place:{labial:"Bilabial",alveolar:"Alveolar",palatal:"Palatal",velar:"Velar",glottal:"Glottal"},vowel:{frontHigh:"Front high vowel",backHighUnrounded:"Back high unrounded vowel",backHighRounded:"Back high rounded vowel",frontMid:"Front mid vowel",backMidUnrounded:"Back mid unrounded vowel",backMidRounded:"Back mid rounded vowel",low:"Low vowel"},glide:{j:"j-glide",w:"w-glide",velar:"\u0270-glide"}},unknownError:"Unknown error",networkError:"The network connection is unstable. Check your connection and try again."},Du={rangeSelect:"Select period",dow:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],yearMonth:"{{month}}/{{year}}",prevMonth:"Previous month",addOnDate:"Add a visit on {{date}}",nextMonth:"Next month",prevWeek:"Previous week",nextWeek:"Next week",legend:{visited:"Visited",scheduled:"Scheduled",noVisit:"No Show"},periodSelect:"Period unit"},Tu={planSuffix:"Plan",labeledPlan:"{{label}} Plan",couponCode:"Pass Code",specialLabel:"Open Special",unitDay:"d",unitYear:"yr",remainingDay:"{{n}}d left",remainingHour:"{{n}}h left",remainingMinute:"{{n}}m left",remainingSecond:"{{n}}s left",menu:{use:"Activate",refund:"Refund",delete:"Delete"}},Nu={clearAriaLabel:"Clear search"},_u={starLabel:"Select star {{n}}",valueLabel:"{{value}} out of {{max}}",groupLabel:"Rating"},Lu={selected:"selected"},Ou={placeholder:"Select"},Ru={collapse:"Collapse",expand:"Expand"},Pu={biArea:"BI area",biSymbol:"BI symbol",logoMalgwi:"Malgwi logo",logoManager:"Malgwi Manager logo",menuOpen:"Open menu",utilMenu:"Utility menu",menuClose:"Close menu"},Mu={mainMenu:"Main menu",bottomNav:"Bottom navigation",goToManager:"Go to Malgwi Manager",goToMalgwi:"Go to Malgwi",modeLabelManager:"Malgwi Manager",modeLabelMalgwi:"Malgwi",training:"Training",settings:"Settings",notifications:"Notifications",account:"Account",help:"Help",debug:"Debug",coupons:"Coupons",topic:"By Topic",trainingType:"By Training Type",wordPairs:"Word Pairs",wordSearch:"Word Search",wordTable:"Word Table Creator",company:"Company Info",more:"More",moreMenu:"More menu",badgeLabel:"{{label}}, {{count}}"},Iu={language:{training:{label:"Training Language",sub:"Language used for training words and speech"}},notifications:{title:"Notifications"},display:{fontSize:{small:"Small",large:"Large"}},cache:{title:"Cache Management",confirmMessage:"Delete cache ({{size}}). Do you want to continue?",delete:"Delete",deleting:"Deleting",cleared:"Cache cleared successfully.",group:{wordData:{label:"Word Data",sub:"Word list and version info"},pairIndex:{label:"Pair Index",sub:"Onset\xB7vowel\xB7coda minimal pair analysis cache"},imageCache:{label:"Image Cache",sub:"Word image existence check results"},trainingRecord:{label:"Training Record",sub:"Daily training progress and streak"}}},button:{save:"Save Settings"},popup:{clear:{confirm:"Reset"},update:{confirm:"Update"},cache:{title:"Delete {{label}}",message:"Delete {{label}} ({{size}}). Do you want to continue?"}},saved:"\u2713 Saved",account:{title:"Account",delete:{sub:"You can restore your account within 30 days of withdrawal."}}},ku={addButton:"Add Subscription",couponButton:"Enter Coupon",active:{infoTitle:"Subscription Info",refund:"Request Refund",startDate:"Start Date",endDate:"End Date",remaining:"Remaining"},pending:{title:"Pending",empty:"No pending subscriptions."},loading:"Loading\u2026",segment:{personal:"Malgwi",org:"Malgwi Manager"},org:{title:"Current Plan",disc:"Subscription plan in use by your organization.",empty:"No organization plan registered.",fallbackTitle:"Organization Plan",startDate:"Start Date",endDate:"End Date",remaining:"Remaining",duration:"Duration"}},xu={profile:{planSuffix:"",plan:"Plan"},basicInfo:{name:{placeholder:"John Doe"}},security:{title:"Security",password:{label:"Password",currentRequired:"Enter your current password.",newRequired:"Enter a new password.",mismatch:"The new passwords do not match.",changed:"Your password has been changed."},twoFactor:{label:"Two-Factor Authentication",sub:"Strengthen your account security"}}},ju={guide:{faq:{title:"FAQ",desc:"View all frequently asked questions"}}},Fu={settings:"Settings",start:{title:"Start Word Training",description:"Select a training type below to begin"},difficulty:{tooltip:"The easiest difficulty is 'Random', the hardest is 'Initial Consonant Difference'."},contrast:{label:"Contrast",type:"Contrast Type",count:"Contrast Count",n:"{{n}}"},filter:{random:"Random",trainOnset:"Onset",trainVowel:"Vowel",trainCoda:"Coda",phonemeGroup:"Training phonemes",noLimit:"Any",codaExclude:"Exclude",gradeLabel:"Grade",excludeImageInfo:"Only words with images: keeps only results with a registered word image.",sameStructureInfo:"Only same phoneme structure: keeps only pairs where the correct and wrong answers share the same syllable structure (length, batchim, etc.).",selectSection:"Select",excludeImage:"Only words with images",sameStructure:"Only same phoneme structure"},noQuestions:"No questions available.",countQuestions:"{{n}} questions",countSentences:"{{n}} sentences",comingSoon:"Coming Soon",nextQuestion:"Next",noiseRatioTitle:"Noise Ratio",noiseRatioValue:"{{ratio}}\xD7",noiseTypeTitle:"Noise Type",playVolumeTitle:"Volume",playSpeedTitle:"Speed",meter:{sentence:"Playback",noise:"Noise",toggle:"Show Audio Meter"},viewResult:"View Results",problemNotice:"Problem {{n}}.",trainingSettingsTitle:"Training Settings",sentencePreview:"Sentence Preview",notHeard:"Didn't hear it.",heardWell:"Heard it well.",confirmTitle:"Check the sentence and select whether you heard it.",noSoundWaveform:"Waveform is not shown for sound-comparison questions.",noise:{level:{none:"None",weak:"Weak",medium:"Medium",strong:"Strong",veryStrong:"Very Strong"},type:{none:"None",default:"Default",street:"Street",buzz:"Buzzing",restaurant:"Restaurant"}},listenTitle:"Please listen to the sentence.",listenButton:"Listen",playSound:"Play Sound",playAll:"Play All",selectInOrder:"Select the cards in the order you heard.",stop:"Stop",preview:"Preview",next:"Next",completed:"Completed",selected:"Selected",nthSelected:"Selection {{n}}",fontSizeMin:"Font size is at the minimum.",fontSizeMax:"Font size is at the maximum.",fontSizeDecrease:"Decrease font size",fontSizeIncrease:"Increase font size",toggleBackground:"Toggle background",cardInstructions:"Look at the word card, listen to the sound, and check it.",noCards:"No cards.",audioFetchError:"Failed to load the sound source.",ttsUnavailable:"Speech playback isn't available on this device.",selectConfirm:"Look at the question and select the answer.",orderListDefault:"Arrange the sentences in the order you heard.",result:{pendingDone:"Results are still being calculated, so you can't finish yet.",eyebrow:"Training Complete",title:"You've finished all the training!",scoreAria:"{{correct}} / {{total}} questions",elapsed:"Time Elapsed",summary:"You heard {{correct}} item(s) correctly.",tableAriaLabel:"Per-question judgement",colJudge:"Judgement",colAnswerSelected:"Answer \xB7 Selected",colAnswer:"Answer",colSelected:"Selected",heardWell:"Heard well",notHeard:"Didn't hear",notJudged:"Not judged",replay:"Replay",done:"Done",viewResult:"View Results",noContent:"(No content)"},up:"Move up",down:"Move down",prev:"Previous",listenLabel:"Listen",sourcePlay:"Play source {{n}}",listen:"Listen",audioStatus:{idle:"Idle",resolving:"Resolving\u2026",checking_exists:"Checking file\u2026",getting_signed_url:"Getting URL\u2026",downloading:"Downloading\u2026",measuring_duration:"Measuring length\u2026",ready:"Ready",error:"Error"}},$u={totalCount:" training bundles",sort:{customers:"Customers"},copyLink:"Copy Link",removeLink:"Remove Link",linkRemoved:"Link removed.",linkSaveFirst:"Please save the training bundle first.",linkSaveFirstHint:"You can only create a shared link from a saved training bundle.",linkCopySelect:"Copy blocked \u2014 link selected. Press Ctrl/\u2318+C to copy.",nameRequired:"Please enter a training bundle name.",itemRequired:"Please add at least one training item.",randomAdd:"Random Add",menu:{publish:"Post to Store",duplicate:"Duplicate Training Bundle",edit:"Edit Training Bundle",move:"Move Group",rename:"Rename"},itemCount:"Number of Items",renameGroup:"Rename Group"},Hu={totalCount:" customers",loadError:"Failed to load list",basicInfo:{editTooltip:"Edit"},member:{placeholder:"Email or phone",link:"Link",linking:"Linking\u2026"},device:{title:"Hearing Devices",addTooltip:"Add New",addButton:"Add device",listTooltip:"View List",listTitle:" Device List",historyEmpty:"No device history registered",wearing:" in use",notRegistered:"Not registered",unit:"",wearingNow:"In use",wear:"Wear",unwear:"Remove",wornSince:"Since {{date}}",release:"Release",historyTitle:"Hearing device history"},schedule:{title:"Upcoming Visits",addTooltip:"Add Schedule",listTooltip:"View All",empty:"No upcoming visits",registerTitle:" Register Schedule",memoPlaceholder:"Enter a memo for this visit."},visitHistory:{title:"Visit History",addTooltip:"Add Visit",empty:"No visit history yet",popupTitle:" Visit History",registerTitle:" Register Visit"},moreItems:"more",viewAll:"View All",visits:{title:"Visits"},trainingRecord:{title:"Customer Training Records"},status:{trainingSubtitle:"Training Status"},detail:{session:{completedFmt:"Done {{done}}/{{total}} \xB7 {{duration}}"},visitSuffix:" visits"},homework:{active:"Active",copied:"Link copied.",copy:"Copy Link",inactive:"Inactive",title:"Homework Progress"},duration:{minSec:"{{m}}m {{s}}s",min:"{{m}}m",sec:"{{s}}s"}},Gu={plan:{recommendedFor:"Recommended for",features:"Key Features",freePrice:"Free",contact:"Contact Us",tierFallback:"Plan",openPromo:"Launch offer"},products:{mgrEnterprise:{tier:{price:"Contact us"}}}},Vu={title:"Coupons",subtitle:"Enter a coupon code or view your coupons",input:{label:"Coupon code",placeholder:"Enter coupon code"},applyButton:"Apply",error:{invalid:"Invalid coupon code.",alreadyUsed:"This coupon has already been used."},success:{applied:'"{{name}}" coupon applied.'},section:{owned:"My Coupons"},status:{used:"Used",available:"Available"}},Wu={unitVisit:"",periodAll:"All",showN:"Show {{n}}"},Yu={subtitle:"Manage company and business information",editButton:"Edit Info",basicInfo:{title:"Basic Info"},contactInfo:{title:"Contact Info"}},Ku={title:"Training by Type",subtitle:"Select the training type you want",listenInNoise:{title:"Sentence Listening in Noise",desc:"Train sentence comprehension in various noise environments."},shortStory:{title:"Short Story Listening",desc:"Listen to short stories and understand the content."},longStory:{title:"Long Story Listening",desc:"Focus on listening to long stories and grasp the content."},orderingSentence:{title:"Sentence Ordering",desc:"Arrange heard sentences in the correct order."},SAME_SOUND_PICK:{label:"Listen & Pick Same Sound",sub:"Pick the word card that matches what you heard."},SAME_OR_DIFF:{label:"Same or Different?",sub:"Decide whether the two sounds are the same or different."},HEAR_AND_PICK_SAME:{label:"Hear & Match Word",sub:"Pick the word card that matches the sound you heard."},HEAR_AND_PICK_INCLUDED:{label:"Find Word Containing Sound",sub:"Pick the word card that contains the syllable you heard."},STARTS_WITH_SAME_SOUND:{label:"Find Word Starting with Same Sound",sub:"Pick a word that starts with the same sound as what you heard."},LISTEN_AND_REMEMBER_ORDER:{label:"Listen & Recall Order",sub:"Select the cards in the order you heard the three words."},MERGE_2_SYLLABLES:{label:"Combine 2 Syllables",sub:"What word do two syllables make?"},MERGE_3_SYLLABLES:{label:"Combine 3 Syllables",sub:"What word do three syllables make?"},MERGE_2_PHONEMES:{label:"Combine 2 Phonemes",sub:"What sound do two phonemes make?"},MERGE_3_PHONEMES:{label:"Combine 3 Phonemes",sub:"What sound do three phonemes make?"},DROP_1_FROM_2SYLL:{label:"Drop 1 Syllable from 2-Syllable",sub:"What sound remains when you remove a syllable from a 2-syllable word?"},DROP_1_FROM_3SYLL:{label:"Drop 1 Syllable from 3-Syllable",sub:"What sound remains when you remove a syllable from a 3-syllable word?"},DROP_PART_FROM_COMPOUND:{label:"Drop Part of Compound Word",sub:"What word remains when you remove part of a compound word?"},DROP_FINAL_CONSONANT_FROM_1SYLL:{label:"Drop Final Consonant",sub:"What sound remains when you remove the final consonant?"},REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:{label:"Drop Consonant",sub:"What sound remains when you remove the consonant?"},CHANGE_1_SYLL_IN_2SYLL:{label:"Change 1 Syllable (2-Syllable)",sub:"Change one syllable in a 2-syllable word to make a new word."},CHANGE_1_SYLL_IN_3SYLL:{label:"Change 1 Syllable (3-Syllable)",sub:"Change one syllable in a 3-syllable word to make a new word."},CHANGE_1_PHONEME_IN_1SYLL:{label:"Change 1 Phoneme (1-Syllable)",sub:"Change one phoneme in a 1-syllable word to make a new sound."},CHANGE_1_PHONEME_IN_2SYLL:{label:"Change 1 Phoneme (2-Syllable)",sub:"Change one phoneme in a 2-syllable word to make a new word."}},Uu={comingSoon:"Word training is coming soon."},zu={colName:"Table Name",open:"Open",countSuffix:" tables",addCard:"Add Word Table Card",cardsEmpty:"No word table cards created yet.",menu:{publishStore:"Post to Training Store",unpublishStore:"Remove from Training Store"},newBadge:"Newly created",tab:{cards:"Word Table Cards",tables:"Word Tables"},publishedBadge:"Published",sharedBadge:"Shared"},qu={title:"Key Words",empty:"No key words available."},Ju={defaultName:"Word Table",title:"Word Table Builder",subtitle:"Set columns and add words to build a table.",filterTitle:"Table Settings",filter:{composition:"Composition",image:"Image",word:"Word",standardPron:"Standard Pronunciation",colloquialPron:"Colloquial Pronunciation",paperOrientation:"Paper Orientation",landscape:"Landscape",portrait:"Portrait",columns:"Columns",column:"{{count}} col",itemsPerPageWord:"Words per page",itemsPerPagePair:"Pairs per page",itemsPerPageOption:"{{count}}",pageIndicator:"{{current}} / {{total}}",pageNumber:"Page Number",pageNumberLeft:"Left",pageNumberCenter:"Center",pageNumberRight:"Right",border:"Border",cutLine:"Cut Line",show:"Show",hide:"Hide",dotted:"Dotted",corner:"Corner"},addWord:"Add",wordInfo:"Info for {{word}}",emptyItems:"Please add at least one word.",load:"Load",openNewWindow:"Open in New Window",saveButton:"Save",saveAsNewButton:"Save as New",print:"Print",popupBlocked:"Popup was blocked. Please allow popups in your browser settings.",printFileNameSingle:"Word Table",printFileNamePair:"Contrast Pair Table",save:{title:"Save Word Table",nameLabel:"Name",desc:"Enter a name for the word table.",placeholder:"Enter a title for this word table.",descriptionLabel:"Description",descriptionPlaceholder:"Enter a description for this word table.",duplicateName:"This name is already in use.",nameRequired:"Please enter a table name.",autoFillHint:" (Press Tab or Space to autofill)",copyName:"{{name}} (copy)"},loadTable:{title:"Load Saved Word Table",empty:"No saved word tables.",loadButton:"Load",itemCount:"{{count}} words",deleteAriaLabel:"Delete {{name}}",sort:{newest:"Newest",oldest:"Oldest",name:"Name",count:"Word Count"},view:{grid:"Grid View",list:"List View"}},groupDeleteMessage:"Word tables in this group will be moved to 'No Group'.",groupNamePlaceholder:"Group name",store:{badge:"Training Store"},card:{sub:"Word Table Card",empty:"No word tables in this card."},toast:{renameError:"Failed to rename",saveError:"Failed to save",deleteError:"Failed to delete",duplicateError:"Failed to duplicate",saveSuccess:"Word table saved."},scoring:{o:"{{word}} correct",triangle:"{{word}} partial",x:"{{word}} incorrect",button:"Score",pickTitle:"Who are you scoring?",pickSubtitle:"Choose the customer who trained with \u201C{{name}}\u201D.",pickSearch:"Search by name or phone",pickEmpty:"No customers registered.",pickNoMatch:"No matching customer.",pickAgain:"Choose another",scoringFor:"Scoring {{name}}",none:"Tap a cell to mark \u25CB \xB7 \u25B3 \xB7 \u2715.",tally:"{{marked}} scored \xB7 \u25CB {{o}} \xB7 \u25B3 {{triangle}} \xB7 \u2715 {{x}} \xB7 {{rate}}%",save:"Save score",saved:"Saved {{count}} marks for {{name}}.",reviewTitle:"Create a review table?",reviewMessage:"Builds a new table from the {{count}} cells {{name}} got wrong or partial. Correct ones are left out.",reviewConfirm:"Create review table",reviewDescription:"Cells marked wrong or partial in \u201C{{name}}\u201D \u2014 {{count}} of them.",reviewCreated:"Created \u201C{{name}}\u201D \u2014 {{count}} cells.",discardTitle:"Discard this scoring?",discardMessage:"You marked {{count}} cells but have not saved. Leaving discards them.",discardConfirm:"Discard and leave"},info:{grade:"Grade: {{n}}",syllables:"Syllables: {{n}}",pos:"Part of speech: {{v}}",wordType:"Type: {{v}}"},pos:{noun:"Noun",verb:"Verb",adjective:"Adjective",adverb:"Adverb",numeral:"Numeral",determiner:"Determiner",interjection:"Interjection",particle:"Particle",affix:"Affix",dependentNoun:"Dependent noun",pronoun:"Pronoun",auxVerb:"Auxiliary verb",auxAdjective:"Auxiliary adjective"}},Qu={editBanner:{message:"Saving will update the word table you're editing."},filterTitle:"Word Search Settings",filter:{positionAny:"Any",positionHead:"Start",positionMid:"Middle",positionTail:"End",difficulty:"Grade",grade:"Grade {{n}}",syllables:"Syllables",syllable:"{{n}} Syll.",syllable5plus:"5+ Syllables",partOfSpeech:"Part of Speech",pos:{noun:"Noun/Numeral",verb:"Verb/Adjective",modifier:"Adverb/Determiner"},wordType:"Word Type",type:{native:"Native Korean",sino:"Sino-Korean",foreign:"Loanword",mixed:"Hybrid"},exclude:"Exclude",excludeNoImage:"No Image"},searchButton:"Search",resultUnit:"words",remaining:"{{count}} remaining",resultDisc:"Select {{unit}}. Up to {{max}} items. ({{selected}}/{{max}})",resultTitlePrefix:"",resultTitleSuffix:" {{unit}} found.",emptyResult:"No results found.",groupCount:"{{count}}",sort:{aria:"Sort",match:"Best Match",ganada:"A\u2013Z \u2191",ganadaDesc:"A\u2013Z \u2193",syllable:"Syllables \u2191",syllableDesc:"Syllables \u2193",grade:"Grade \u2191",gradeDesc:"Grade \u2193",original:"Original order"},pageSize:"Show {{count}}",pageSizeAria:"Page size",popup:{title:"Select a word for cell {{n}}"}},Zu={clearAllSelection:"Clear All Selections",divLine:"Contrast Line",removePair:"Remove pair",removeWord:"Remove word"},Xu={title:"By Topic",subtitle:"Select a topic to start listening training",noiseTitle:"Sentence Listening in Noise",shortStoryTitle:"Short Story Listening",FOOD:"Food",HLTH:"Health",WETH:"Weather",PRSN:"People",KRCT:"Korean Culture",STRY:"Stories",LOCA:"Locations",SOAR:"Society & Arts",NTSC:"Nature & Science",SPRT:"Sports",sub:{TRKRFD:"Traditional Korean Food",MDKRFD:"Modern Korean Food",WRLDFD:"World Cuisine",MTRFRT:"Ingredients & Fruits",GEFDKL:"Food Facts",HTETHB:"Healthy Eating",DISILL:"Diseases",EXCISE:"Exercise",GEHTKL:"Health Facts",GESSKL:"Seasons",SNWRAN:"Snow & Rain",WTHFCT:"Weather Forecast",GEWTKL:"Weather Facts",JODYPS:"Joseon Dynasty",MDKRPS:"Modern Korea",THKDPS:"Three Kingdoms",WRLART:"World Artists",WRLPSN:"World Figures",KRLANG:"Korean Language",TRPLCT:"Traditional Games",HERITG:"Heritage",EVTFES:"Events & Festivals",GECTKL:"General Knowledge",FRYTAL:"Fairy Tales",AMZING:"Amazing Stories",DAYSTR:"Everyday Stories",KRLDMK:"Korean Landmarks",SELNMK:"Seoul Landmarks",WRDTRB:"World Travel",NAVIGT:"Navigation",KRSOCI:"Korea",ECONEW:"Economy & News",GENART:"Arts",GELFKL:"Life Tips",ANIMAL:"Animals",PLANTS:"Plants",ETHPLT:"Earth",TOLELC:"Tools & Electronics",GESCKL:"Science Facts",INVDSP:"Individual Sports",MARART:"Martial Arts",TEAMSP:"Team Sports",FOOTBL:"Soccer",GESPKL:"Sports Facts"}},ei={maxUses:"Max uses (leave blank for unlimited)",redirect:"Redirect URL (leave blank for app home)",creating:"Creating\u2026",create:"Create link",created:"\u2713 Link created",copied:"Copied!",copy:"Copy",loading:"Loading\u2026",empty:"No links created yet.",uses:"Used {{count}} times",expiresAt:"Expires: {{date}}",createdAt:"Created: {{date}}",confirmDelete:"Delete this link?",deactivate:"Deactivate",delete:"Delete",status:{active:"Active",expired:"Expired",inactive:"Inactive"}},ti={passwordPlaceholder:"Enter password"},ni={direction:{left:"L",right:"R",label:"Side"},wornDate:"Date Worn",deviceType:"Device Type",brand:"Brand",fitType:"Fit Type",productName:"Product Name",validationError:{brandAndProduct:"Please enter brand and product name."},addNew:"Add New Device",selectFromList:"Select from List",removeDevice:"Remove",type:{hearingAid:"Hearing Aid",cochlearImplant:"Cochlear Implant"}},oi={stat:{totalCustomers:"Total Customers",monthlyVisits:"This Month's Visits"},chart:{visitDetail:"Visit Details",trainingDetail:"Training Details",weekly:"Weekly",daily:"Daily",periodMonth:"Month",periodWeek:"Week",weeklyPrefix:"Weekly",monthlyPrefix:"Monthly",visit:"Visits",reservation:"Reservations",trainingDone:"Completed",trainingInProgress:"In Progress",weekRange:"{{start}}\u2013{{end}}",week:"W{{n}}"},subscriptionStatus:{active:"{{pct}}% Active",expired:"{{pct}}% Expired",unused:"{{pct}}% Unused"}},ri={editBanner:{message:"Saving will update the contrast pair table you're editing."},phonemeSelect:{title:"Phoneme Selection",vs:"vs"},caution:"Caution",mode:{include:"Phoneme Include",pick:"Phoneme Contrast",contrast:"Specify Contrast",infoTitle:"Contrast Mode",infoInclude:"Include \u2014 finds words containing all selected phonemes, plus their minimal pair.",infoPick:"Contrast \u2014 matches only if the selected phoneme is the actual point of difference in the pair.",infoContrast:"Specify Contrast \u2014 directly choose phonemes for the base word and the contrasting word to find pairs."},count:"{{n}}",input:{char:"Choose Letters",pron:"Choose Sound",infoTitle:"Input mode",infoChar:"Choose Letters \u2014 finds words by the selected phonemes (spelling), then finds their standard-pronunciation contrast pairs.",infoPron:"Choose Sound \u2014 finds standard-pronunciation contrast pairs directly from the selected phonemes."},phonemeN:"Syllable {{n}}",phonemeSingleLabel:"Syllable",phonemeContrastSingleLabel:"Contrast Syllable",ordinals:["First","Second","Third","Fourth"],phonemeOrdinalLabel:"{{ordinal}} Syllable",phonemeContrastOrdinalLabel:"Contrast {{ordinal}} Syllable",composition:"Answer Word Composition",syllableCount:"Syllables",syllableN:"{{n}} syll.",syllableNPlus:"{{n}}+ syll.",onset:"Onset",vowel:"Vowel",coda:"Coda",filter:{searchOptionsTitle:"Contrast Settings",searchModeLabel:"Contrast Mode",countLabel:"Input Syllable Count",inputModeLabel:"Input mode",phonemeOrder:"Input Syllable Position",phonemeOrderInfo:["Match: the pair must differ at exactly the same position (syllable).","Any: the differing position doesn't matter."],orderAny:"Any",orderMatch:"Match",difficultyInfo:"Reflects the National Institute of Korean Language's basic vocabulary grade.",selectLabel:"Select",onlyHasImage:"Only words with images",onlySameStructure:"Only same phoneme structure"},searchLabel:{error:"Failed to load data",loading:"Loading\u2026"},confirmMessage:"The word table with {{count}} selected {{unit}} will be lost.",resetOptions:"Reset Options",phonemeContrast:"Contrast Syllable {{n}}",infoNotes:["The preview character is an example of the selected phoneme combination. The actual search covers all words containing the phoneme.","Initial consonant '\u3147' cannot be selected. \u3147 at the start of a word is effectively silent.","If only onset and coda are selected, the vowel is automatically displayed as '\u314F'.","Increasing the phoneme count searches for minimal pairs between each phoneme."]},ai={sentenceTyping:{roundCount:"{{rounds}} rounds \xB7 {{timeLimit}}s each"},wordDefense:{me:"Me"},dictation:{title:"Dictation",desc:"Practice writing down exactly what you hear.",comingSoon:"Coming soon: audio playback, input field, answer comparison"},result:{heading:"Level {{number}} Answer",retry:"Try Again"},common:{accuracy:"{{pct}}% accuracy"},soundMatch:{title:"Sound Match",desc:"Quickly match words or sentences that share the same sound.",comingSoon:"Coming soon: play button, timer, score tracking"},orderSequence:{title:"Sentence Ordering",desc:"Arrange scattered sentence fragments in the correct order.",comingSoon:"Coming soon: sentence sets, ordering interface"},speedListen:{title:"Speed Listen",desc:"A challenge game to count the number of words in a sentence within a time limit.",comingSoon:"Coming soon: time limit, scoreboard"},noiseChallenge:{title:"Noise Challenge",desc:"Practice distinguishing sentences amid background noise.",comingSoon:"Coming soon: various noise levels, score tracking"},fastListen:{title:"Fast Listen",desc:"Listen to short sentences at speed and select the key word.",comingSoon:"Coming soon: speed by difficulty, timer"},shadowing:{title:"Shadowing",desc:"Practice pronunciation and intonation by repeating sentences aloud.",comingSoon:"Coming soon: playback, recording, comparison feedback"},phonemeHunt:{title:"Phoneme Hunt",desc:"Find words that contain a specific phoneme (sound).",comingSoon:"Coming soon: phoneme filter, hint feature"}},ui={lead:`IHAB builds trust
|
|
4
|
+
through sound
|
|
5
|
+
and aids recovery.`,site:{title:"Site",malgwi:"Malgwi",soundDirection:"Sound Direction System",vrSoundDirection:"VR Sound Direction System",hearingTest:"Hearing Test Pro"},sns:{title:"SNS",naverBlog:"Naver Blog",kakao:"KAKAO Talk Open Chat"},policy:{title:"Policy",terms:"Terms of Service",privacy:"Privacy Policy"},ceo:"CEO",address:"Address",support:"Support",ceoName:"Ji-hye Han",addressValue:"302, 3F, Haechan Bldg, 32 Siocheong-gil, Chuncheon, Gangwon, Korea"},ii={trainingPhone:{topic:"Gardening",prev:"Prev",next:"Next",speed:"Speed 3",noiseType:"Crowd noise",settings:"Settings",start:{caption:"Press the play (\u25B6) button below and listen carefully. After listening, check the sentence."},feedback:{caption:"Plant the well-grown seedlings in the garden bed and cover them carefully with plastic film."},done:{heardWell:"Heard clearly",listenAgain:"Listen again"}}},li={timeHM:"{{hh}}:{{mm}}",timeH:"{{hh}}:{{mm}}"},si={options:"Training Options",difficulty:"Difficulty",exclude:"Exclude",chosung:"Initial Consonant",excludeOptions:{none:"None",noImage:"No Image"}},ci={answer:"Answer",distractor:"Distractor"},di={phaseWordDownload:"Download Word Data",phaseImageCheck:"Check Images",phasePairAnalysis:"Analyze Word Pairs",downloadingCount:"Downloading {{n}} words",checkingPage:"Checking page {{page}} list",imageCount:"{{done}} / {{total}} items"},Ci={clearAriaLabel:"Clear input"},gi={ariaLabel:"Select tab"},fi={ariaLabel:"Tabs"},mi={dragPrompt:"Drag and drop files here",browseButton:"Choose Files",removeAriaLabel:"Remove {{name}}"},pi={ariaLabel:"User avatar"},hi={relativeDay:{today:"Today",yesterday:"Yesterday",daysAgo:"{{n}}d ago"},reason:{notLoggedIn:"Login required."},list:{title:"Received Homework"},status:{expired:"Expired",done:"Done {{count}}\xD7 \xB7 {{date}}",notDone:"Not done"}},yi={weekly:{title:"Weekly Training",daily:"Daily Listening",crossword:"Crossword"},homework:{title:"Homework Progress",totalRate:"Overall rate",count:"Total",done:"Done",remaining:"Remaining"},today:{tooltipTotal:"Total",tooltipDone:"Done"},filter:{countSuffix:" sessions"},time:{countLabel:"{{n}} sessions",empty:"No training records"},daily:{title:"Today's Listening Record",empty:"No completed sessions"},crossword:{title:"Crossword Quiz",empty:"No completed levels"},visit:{title:"Linked Visit Records"},detail:"Details",trainingType:{LISTEN_IN_NOISE:"Sentence in Noise",SHORT_STORY:"Short Story",LONG_STORY:"Long Story",ORDERING_SENTENCE:"Sentence Ordering"}},bi={import:"Add to my trainings",publisher:"Publisher",time:{justNow:"just now",minutesAgo:"{{n}}m ago",hoursAgo:"{{n}}h ago",daysAgo:"{{n}}d ago",weeksAgo:"{{n}}w ago",monthsAgo:"{{n}}mo ago",yearsAgo:"{{n}}y ago"},badge:{shared:"Store"},publish:{descPlaceholder:"One-line description for the Training Store (optional)"}},Si={manage:{unit:"item(s)"}},wi={cancelLabel:"Cancel"},Ei={subtitle:"Select a topic to start listening practice."},Ai={steps:"Step {{current}} of {{total}}"},vi={panelTitle:"Training misses",viewItems:"Items",viewTypes:"Types",colPending:"Left",colTrend:"Change",colRuns:"Runs",unitItem:" items",skippedOnly:"{{n}} older record(s) were excluded \u2014 they do not say what was answered.",summaryLabel:"Recorded",summaryValue:"{{items}} items \xB7 {{pending}} still missed",nextLabel:"Next to work on",nextCount:"{{count}}",nextCountCapped:"{{shown}} of {{total}}",picked:"\u2192 {{what}}",typeClear:"All caught up",typePending:"{{pending}} of {{total}} left",flat:"no change",runs:"{{count}} run(s)",avgDuration:"{{sec}}s avg"},Bi={resetColumns:"Reset column widths"},Di={panelTitle:"Word table scores",viewWords:"Words",viewTables:"Tables",colLatest:"When",colTrend:"Change",unitTime:" times",summaryLabel:"Scored",summaryValue:"{{times}} times \xB7 {{words}} words",nextLabel:"Focus next",nextCount:"{{count}}",allClear:"All correct last time.",times:"{{count}}x",flat:"no change",recentLabel:"Recent scorings",nextCountCapped:"{{shown}} of {{total}}"},Ti={ariaLabel:"Banner",dotAriaLabel:"Banner {{index}} of {{count}}"},Ni={selectYearMonth:"Select year and month",chooseDate:"Choose a date"},_i={previewRegion:"Report preview \u2014 scrollable sideways"},Li={description:"Description",textbox:"Text",training:"Training guide",menu:"Menu"},Oi={devNone:"No acquisition data",place:{labial:"Bilabial",alveolar:"Alveolar",palatal:"Palatal",velar:"Velar",glottal:"Glottal"}},Ri={clearSelection:"Clear selection"},Pi={showResult:"Show {{type}} result"},Mi={selected:"Selected",remove:"Remove",exclude:"Excluded",nthSelected:"Selection {{n}}"},Ii={loading:"Loading"},ki={state:{active:"playing",played:"heard",correct:"correct",wrong:"wrong"}},xi={ariaLabel:"Breadcrumb"},ji={empty:"No items yet."},Fi={main:"Main gradient",soft:"Soft",sub:"Sub color",deep:"Deep gradient",softSub:"Soft sub",warm:"Warm (accent)",dark:"Dark",radial:"Radial gradient",diagonal:"Diagonal pattern",dots:"Dot pattern",outline:"Outline",success:"Success / done",naver:"Naver blog notice",instagram:"Instagram notice"},$i={common:Bu,calendar:Du,passCard:Tu,searchField:Nu,rating:_u,colorPicker:Lu,dropdown:Ou,accordion:Ru,header:Pu,nav:Mu,settings:Iu,usage:ku,account:xu,help:ju,training:Fu,trainingSettings:$u,customers:Hu,payment:Gu,coupons:Vu,visits:Wu,company:Yu,trainingType:Ku,myWordTraining:Uu,myWordTable:zu,keyWords:qu,wordTable:Ju,wordSearch:Qu,wordPrint:Zu,topic:Xu,accessLinkManager:ei,login:ti,device:ni,manager:oi,wordPairs:ri,game:ai,footer:ui,landing:ii,date:li,trainingSetPage:si,wordTrainingPreview:ci,wordData:di,textField:Ci,segmentedControl:gi,tabs:fi,fileUpload:mi,avatar:pi,myHomework:hi,trainingStatus:yi,store:bi,homework:Si,inquiry:wi,trainingPlanRun:Ei,progress:Ai,trainingMiss:vi,table:Bi,wordScore:Di,topBanner:Ti,datePicker:Ni,report:_i,tooltip:Li,phonemeProfile:Oi,bulkBar:Ri,debug:Pi,badge:Mi,loader:Ii,soundCompass:ki,breadcrumb:xi,board:ji,promoBannerBg:Fi};const Hi="0.151.0",Gi=[{code:"ko",label:"\uD55C\uAD6D\uC5B4"},{code:"en",label:"English"}],xt="ko",Vi="ihab_display_language";function zn(){if(typeof window>"u")return xt;try{const e=localStorage.getItem(Vi);if(e&&Gi.some(t=>t.code===e))return e}catch{}return xt}function qn(e){try{document.documentElement.lang=e}catch{}}ae.on("languageChanged",qn),qn(zn()),ae.use(se.initReactI18next).init({resources:{ko:{translation:vu},en:{translation:$i}},lng:zn(),fallbackLng:xt,interpolation:{escapeValue:!1},react:{useSuspense:!1}});const We=["grade","syllables","pos","wordType"],Jn=["1","2","3","4"],Wi=["1","2","3","4","5+"],Yi=["noun","verb","modifier"],Ki=["native","sino","foreign","mixed"],Ui={grade:Jn,syllables:Wi,pos:Yi,wordType:Ki},zi={noun:["\uBA85","\uC218"],verb:["\uB3D9","\uD615"],modifier:["\uBD80","\uAD00"]},qi={native:"\uACE0\uC720",sino:"\uD55C\uC790",foreign:"\uC678\uB798",mixed:"\uD63C\uC885"},Ji={grade:["\uB09C\uC774\uB3C4 \uB4F1\uAE09"]},Qi={pos:{noun:["\uCCB4\uC5B8(\uBA85\uC0AC,\uC218\uC0AC)"],verb:["\uC6A9\uC5B8(\uB3D9\uC0AC,\uD615\uC6A9\uC0AC)"],modifier:["\uC218\uC2DD\uC5B8(\uBD80\uC0AC,\uAD00\uD615\uC0AC)"]}},jt=new Map;try{ae.store?.on?.("added",()=>jt.clear())}catch{}function gt(e){const t=jt.get(e);if(t)return t;const n=ae.getFixedT(e),o={\uC139\uC158:{grade:n("wordSearch.filter.difficulty","\uB4F1\uAE09"),syllables:n("wordSearch.filter.syllables","\uC74C\uC808 \uC218"),pos:n("wordSearch.filter.partOfSpeech","\uD488\uC0AC"),wordType:n("wordSearch.filter.wordType","\uC720\uD615")},\uAC12:{grade:Object.fromEntries(Jn.map(r=>[r,n("wordSearch.filter.grade",{n:Number(r),defaultValue:`${r}\uB4F1\uAE09`})])),syllables:{...Object.fromEntries(["1","2","3","4"].map(r=>[r,n("wordSearch.filter.syllable",{n:Number(r),defaultValue:`${r}\uC74C\uC808`})])),"5+":n("wordSearch.filter.syllable5plus","5\uC74C\uC808 \uC774\uC0C1")},pos:{noun:n("wordSearch.filter.pos.noun","\uCCB4\uC5B8(\uBA85\uC0AC, \uC218\uC0AC)"),verb:n("wordSearch.filter.pos.verb","\uC6A9\uC5B8(\uB3D9\uC0AC, \uD615\uC6A9\uC0AC)"),modifier:n("wordSearch.filter.pos.modifier","\uC218\uC2DD\uC5B8(\uBD80\uC0AC, \uAD00\uD615\uC0AC)")},wordType:{native:n("wordSearch.filter.type.native","\uACE0\uC720\uC5B4"),sino:n("wordSearch.filter.type.sino","\uD55C\uC790\uC5B4"),foreign:n("wordSearch.filter.type.foreign","\uC678\uB798\uC5B4"),mixed:n("wordSearch.filter.type.mixed","\uD63C\uC885\uC5B4")}}};return jt.set(e,o),o}const Ft=()=>Array.from(new Set([ae.language,"ko","en"].filter(e=>!!e)));function Ye(e){if(We.includes(e))return e;for(const t of Ft()){const n=gt(t);for(const o of We)if(n.\uC139\uC158[o]===e)return o}for(const t of We)if(Ji[t]?.includes(e))return t;return null}function Ne(e,t){if(Ui[e].includes(t))return t;for(const n of Ft()){const o=gt(n).\uAC12[e];for(const[r,a]of Object.entries(o))if(a===t)return r}for(const[n,o]of Object.entries(Qi[e]??{}))if(o.includes(t))return n;if(e==="grade"||e==="syllables"){const n=parseInt(t.replace(/\D/g,""),10);if(Number.isFinite(n)&&n>=1)return e==="grade"?n<=4?String(n):null:n>=5?"5+":String(n)}return null}const Zi=e=>Array.isArray(e)?e.filter(t=>typeof t=="string"):typeof e=="string"&&e?[e]:[];function $t(e){const t={};for(const[n,o]of Object.entries(e??{})){const r=Ye(n);if(r)for(const a of Zi(o)){const u=Ne(r,a);if(!u)continue;const i=t[r]??(t[r]=[]);i.includes(u)||i.push(u)}}return t}function Ht(e,t=ae.language){const n=gt(t||"ko"),o={};for(const r of We){const a=(e?.[r]??[]).map(u=>n.\uAC12[r][u]).filter(u=>!!u);a.length&&(o[n.\uC139\uC158[r]]=a)}return o}function Xi(e,t=ae.language){const n={};for(const[o,r]of Object.entries(e??{}))Ye(o)||(n[o]=r);return{...n,...Ht($t(e),t)}}function el(e){for(const t of Ft()){const n=gt(t);if(We.some(o=>n.\uC139\uC158[o]===e))return t}return ae.language||"ko"}function Qn(){const{t:e}=se.useTranslation();return s.useMemo(()=>({difficulty:e("wordSearch.filter.difficulty","\uB4F1\uAE09"),syllables:e("wordSearch.filter.syllables","\uC74C\uC808 \uC218"),syllable5plus:e("wordSearch.filter.syllable5plus","5\uC74C\uC808 \uC774\uC0C1"),partOfSpeech:e("wordSearch.filter.partOfSpeech","\uD488\uC0AC"),wordType:e("wordSearch.filter.wordType","\uC720\uD615"),posMap:{[e("wordSearch.filter.pos.noun","\uCCB4\uC5B8(\uBA85\uC0AC, \uC218\uC0AC)")]:["\uBA85","\uC218"],[e("wordSearch.filter.pos.verb","\uC6A9\uC5B8(\uB3D9\uC0AC, \uD615\uC6A9\uC0AC)")]:["\uB3D9","\uD615"],[e("wordSearch.filter.pos.modifier","\uC218\uC2DD\uC5B8(\uBD80\uC0AC, \uAD00\uD615\uC0AC)")]:["\uBD80","\uAD00"]},typeMap:{[e("wordSearch.filter.type.native","\uACE0\uC720\uC5B4")]:"\uACE0\uC720",[e("wordSearch.filter.type.sino","\uD55C\uC790\uC5B4")]:"\uD55C\uC790",[e("wordSearch.filter.type.foreign","\uC678\uB798\uC5B4")]:"\uC678\uB798",[e("wordSearch.filter.type.mixed","\uD63C\uC885\uC5B4")]:"\uD63C\uC885"}}),[e])}function Zn(e,t,n){return{label:t.difficulty,items:[1,2,3,4].map(o=>e("wordSearch.filter.grade",{n:o})),multiple:!0,allOption:!0,allLabel:n?.allLabel,labelAction:n?.labelAction,labelInfo:n?.labelInfo}}function Xn(e){return{label:e.partOfSpeech,items:Object.keys(e.posMap),multiple:!0,allOption:!0}}function eo(e){return{label:e.wordType,items:Object.keys(e.typeMap),multiple:!0,allOption:!0}}function tl(e,t){return{label:t.syllables,items:[e("wordSearch.filter.syllable",{n:1}),e("wordSearch.filter.syllable",{n:2}),e("wordSearch.filter.syllable",{n:3}),e("wordSearch.filter.syllable",{n:4}),t.syllable5plus],multiple:!0,allOption:!0}}function nl(e,t){const n=[e("wordPairs.filter.onlyHasImage","\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC")];return t?.includeStructure&&n.push(e("wordPairs.filter.onlySameStructure","\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC")),{label:e("wordPairs.filter.selectLabel","\uC120\uD0DD"),items:n,multiple:!0,labelAction:t?.labelAction,labelInfo:t?.labelInfo}}function ol(e,t){const{label:n,headValue:o,midValue:r,tailValue:a,includeMid:u=!0,headDisabled:i,midDisabled:l,tailDisabled:c,allOptionDisabled:g,groupLabel:d,labelAction:C}=t;return{label:n,...d?{groupLabel:d}:{},...C?{labelAction:C}:{},allOption:!0,allLabel:e("wordSearch.filter.positionAny",{defaultValue:"\uBB34\uAD00"}),...g?{allOptionDisabled:g}:{},items:[{value:o,displayLabel:e("wordSearch.filter.positionHead",{defaultValue:"\uC5B4\uB450"}),disabled:i},...u?[{value:r,displayLabel:e("wordSearch.filter.positionMid",{defaultValue:"\uC5B4\uC911"}),disabled:l}]:[],{value:a,displayLabel:e("wordSearch.filter.positionTail",{defaultValue:"\uC5B4\uB9D0"}),disabled:c}]}}function rl(e,t,n){const o=Ye(n),r=o&&t!==ue?Ne(o,t):null;if(o&&(t===ue||r)){const i={},l={};for(const[f,m]of Object.entries(e))(Ye(f)===o?l:i)[f]=m;if(t===ue)return i;const c=$t(l)[o]??[],g=c.includes(r)?c.filter(f=>f!==r):[...c,r];if(g.length===0)return i;const d=Ht({[o]:g},el(n)),C=Object.values(d)[0]??[];return{...i,[n]:C}}if(t===ue){const{[n]:i,...l}=e;return l}const a=e[n]??[],u=a.includes(t)?a.filter(i=>i!==t):[...a,t];if(u.length===0){const{[n]:i,...l}=e;return l}return{...e,[n]:u}}Object.fromEntries(Object.entries(_t).map(([e,{nucleus:t}])=>[e,t]));const al={\uACE0\uC720\uC5B4:"\uACE0\uC720",\uD55C\uC790\uC5B4:"\uD55C\uC790",\uC678\uB798\uC5B4:"\uC678\uB798",\uD63C\uC885\uC5B4:"\uD63C\uC885"},ul={"\uCCB4\uC5B8(\uBA85\uC0AC,\uC218\uC0AC)":["\uBA85","\uC218"],"\uC6A9\uC5B8(\uB3D9\uC0AC,\uD615\uC6A9\uC0AC)":["\uB3D9","\uD615"],"\uC218\uC2DD\uC5B8(\uBD80\uC0AC,\uAD00\uD615\uC0AC)":["\uBD80","\uAD00"]},il={difficulty:"\uB09C\uC774\uB3C4 \uB4F1\uAE09",syllables:"\uC74C\uC808 \uC218",syllable5plus:"5\uC74C\uC808 \uC774\uC0C1",partOfSpeech:"\uD488\uC0AC",wordType:"\uC720\uD615",posMap:ul,typeMap:al},to=new WeakMap;function ll(e,t){const n=to.get(e);if(n&&n.keys===t)return n.\uAC12;const o={grades:[],syls:[],poses:[],types:[]},r={grade:o.grades,syllables:o.syls,pos:o.poses,wordType:o.types};for(const[a,u]of Object.entries(e??{})){const i=a===t.difficulty?"grade":a===t.syllables?"syllables":a===t.partOfSpeech?"pos":a===t.wordType?"wordType":Ye(a);if(i)for(const l of Array.isArray(u)?u:typeof u=="string"?[u]:[])r[i].includes(l)||r[i].push(l)}return to.set(e,{keys:t,\uAC12:o}),o}function sl(e,t,n=il){const{grades:o,syls:r,poses:a,types:u}=ll(t,n);if(o.length&&!o.some(i=>e.grade===(Ne("grade",i)??i.replace(/\D/g,""))))return!1;if(r.length){const i=e.syllables??0;if(!r.some(l=>{const c=l===n.syllable5plus?"5+":Ne("syllables",l);return c==="5+"?i>=5:i===parseInt(c??l)}))return!1}return!(a.length&&!a.flatMap(i=>n.posMap[i]??zi[Ne("pos",i)??""]??[i]).some(i=>(e.pos??"").includes(i))||u.length&&!u.some(i=>e.wordType===(n.typeMap[i]??qi[Ne("wordType",i)??""])))}const cl={labial:e=>e("common.phonetics.place.labial",{defaultValue:"\uC591\uC21C\uC74C"}),alveolar:e=>e("common.phonetics.place.alveolar",{defaultValue:"\uCE58\uC870\uC74C"}),palatal:e=>e("common.phonetics.place.palatal",{defaultValue:"\uACBD\uAD6C\uAC1C\uC74C"}),velar:e=>e("common.phonetics.place.velar",{defaultValue:"\uC5F0\uAD6C\uAC1C\uC74C"}),glottal:e=>e("common.phonetics.place.glottal",{defaultValue:"\uC131\uBB38\uC74C"})},dl={frontHigh:e=>e("common.phonetics.vowel.frontHigh",{defaultValue:"\uC804\uC124 \uACE0\uBAA8\uC74C"}),backHighUnrounded:e=>e("common.phonetics.vowel.backHighUnrounded",{defaultValue:"\uD6C4\uC124 \uACE0\uBAA8\uC74C \uD3C9\uC21C"}),backHighRounded:e=>e("common.phonetics.vowel.backHighRounded",{defaultValue:"\uD6C4\uC124 \uACE0\uBAA8\uC74C \uC6D0\uC21C"}),frontMid:e=>e("common.phonetics.vowel.frontMid",{defaultValue:"\uC804\uC124 \uC911\uBAA8\uC74C"}),backMidUnrounded:e=>e("common.phonetics.vowel.backMidUnrounded",{defaultValue:"\uD6C4\uC124 \uC911\uBAA8\uC74C \uD3C9\uC21C"}),backMidRounded:e=>e("common.phonetics.vowel.backMidRounded",{defaultValue:"\uD6C4\uC124 \uC911\uBAA8\uC74C \uC6D0\uC21C"}),low:e=>e("common.phonetics.vowel.low",{defaultValue:"\uC800\uBAA8\uC74C"})},Cl={j:e=>e("common.phonetics.glide.j",{defaultValue:"j\uD65C\uC74C"}),w:e=>e("common.phonetics.glide.w",{defaultValue:"w\uD65C\uC74C"}),velar:e=>e("common.phonetics.glide.velar",{defaultValue:"\u0270\uD65C\uC74C"})};function no(e,t){if("place"in t)return cl[t.place](e);const n=dl[t.vowel](e);return t.glide?`${n} \xB7 ${Cl[t.glide](e)}`:n}const gl=(e,{defaultValue:t})=>t,oo=(e,t)=>({jamos:e,phonetic:t,tooltip:no(gl,t)}),Ce=(e,t)=>t.map(n=>oo([n],{place:e})),J=(e,t,n)=>oo([...e],n?{vowel:t,glide:n}:{vowel:t}),Gt={cho:[Ce("labial",["\u3142","\u3143","\u314D","\u3141"]),Ce("alveolar",["\u3137","\u3138","\u314C","\u3134","\u3139"]),Ce("alveolar",["\u3145","\u3146"]),Ce("palatal",["\u3148","\u3149","\u314A"]),Ce("velar",["\u3131","\u3132","\u314B"]),Ce("glottal",["\u314E"])],jung:[[J("\u3163","frontHigh"),J("\u315F","frontHigh","w"),J("\u3162","frontHigh","velar")],[J("\u3161","backHighUnrounded")],[J("\u315C","backHighRounded"),J("\u3160","backHighRounded","j")],[J("\u3154\u3150","frontMid"),J("\u3156\u3152","frontMid","j"),J("\u3159\u315A\u315E","frontMid","w")],[J("\u3153","backMidUnrounded"),J("\u3155","backMidUnrounded","j"),J("\u315D","backMidUnrounded","w")],[J("\u3157","backMidRounded"),J("\u315B","backMidRounded","j")],[J("\u314F","low"),J("\u3151","low","j"),J("\u3158","low","w")]],jong:[Ce("labial",["\u3142","\u3141"]),Ce("alveolar",["\u3137","\u3134","\u3139"]),Ce("velar",["\u3131","\u3147"])]},fl=[...Q],ml=[...te],pl=oe.filter(e=>e!==""),ge=e=>e===ie?[]:Array.from(e),ie="__NO_CODA__",ro=[1,2,3,4],le=5,hl=12,ao="SYL_",Vt=e=>`${ao}${e}`,yl=e=>Number(e.slice(ao.length));function Wt(e){return e>=le?Array.from({length:hl-le+1},(t,n)=>le+n):[e]}const uo={cho:fl,jung:ml,jong:pl},Yt=e=>e.map(t=>t.map(({jamos:n,phonetic:o,tooltip:r})=>({v:n.join(""),phonetic:o,tooltip:r}))),Kt={cho:Yt(Gt.cho),jung:Yt(Gt.jung),jong:Yt(Gt.jong)},io={};Kt.jung.flat().forEach(({v:e})=>{for(const t of ge(e))io[t]=e});const bl=new Set(Kt.cho.flat().map(e=>e.v));function lo(e,t){return e==="cho"?bl.has(t)?t:null:e==="jung"?io[t]??t:Lt(t)}function so(e,t,n){if(e==="jung"){const o=ge(t);return n&&o.includes(n)?n:o[0]??t}return e==="jong"&&n&&Lt(n)===t?n:t}function co(e,t,n,o){const r=(a,u)=>u?a==="jong"&&u===ie?ie:t==="pron"?lo(a,u):so(a,u,a==="jung"?n:a==="jong"?o:null):null;return{...e,cho:r("cho",e.cho),jung:r("jung",e.jung),jong:r("jong",e.jong)}}const Ut={cho:null,jung:null,jong:null,syllable:null},Sl="wt_filter",Co=e=>`wt_filter_${e}`,zt=["noun","verb","modifier"],qt=["native","sino","foreign","mixed"];function go(e,t,n,o,r){if(!Array.isArray(e))return[];const a=[];for(const u of e){if(typeof u!="string")continue;const i=t.includes(u)?u:t.find(l=>r.some(c=>o(c,n(l))===u));i&&!a.includes(i)&&a.push(i)}return a}function fo(e){try{const t=localStorage.getItem(Co(e))??localStorage.getItem(Sl);if(t)return JSON.parse(t)}catch{}return null}function mo(e){const t=e?.phonemeView;return t==="pron"?"pron":t==="direct"?"direct":"char"}function wl(e){const t=e;return t?.composition?{cho:t.composition.cho??null,jung:t.composition.jung??null,jong:t.composition.jong??null,syllable:t.composition.syllable??null}:t?.choseong?{...Ut,cho:t.choseong}:Ut}function El(e,t,n){const{t:o,i18n:r}=se.useTranslation(),[a]=s.useState(()=>n?.resetOnMount?null:fo(e)),[u,i]=s.useState(mo(a)),[l,c]=s.useState(()=>wl(a)),g=s.useCallback(()=>t.requireSyllable?{cho:"\u3131",jung:"\u314F",jong:ie,syllable:t.fixedSyllable??null}:{cho:null,jung:null,jong:t.fixedNoCoda?ie:null,syllable:t.fixedSyllable??null},[t.requireSyllable,t.fixedSyllable,t.fixedNoCoda]);s.useEffect(()=>{!t.requireSyllable&&t.fixedSyllable==null&&!t.fixedNoCoda||c(b=>b.cho||b.jung||b.syllable!=null||b.jong?b:g())},[]);const d=s.useMemo(()=>z(l.cho)||z(l.jung)||z(l.jong)?"count":"random",[l.cho,l.jung,l.jong]),C=s.useRef(u==="char"?l.jung:null),f=s.useRef(u==="char"?l.jong:null);s.useEffect(()=>{u==="char"&&(C.current=l.jung,f.current=l.jong)},[u,l.jung,l.jong]);const[m,w]=s.useState(n?.resetOnMount?!!n?.defaultImageOnly:a?.excludeNoImage??!0),[h,p]=s.useState(n?.resetOnMount?!1:a?.sameStructureOnly??!0),[y,S]=s.useState(Array.isArray(a?.gradeFilter)?a.gradeFilter:[]),E=Array.from(new Set([r.language,"ko","en"].filter(Boolean))),M=(b,N)=>r.getFixedT(b)(N),B=b=>go(b,zt,N=>`wordSearch.filter.pos.${N}`,M,E),T=b=>go(b,qt,N=>`wordSearch.filter.type.${N}`,M,E),[D,I]=s.useState(()=>B(a?.posFilter)),[A,$]=s.useState(()=>T(a?.wordTypeFilter)),F=s.useRef(n?.resetKey);s.useEffect(()=>{F.current!==n?.resetKey&&(F.current=n?.resetKey,c(g()),w(!!n?.defaultImageOnly),p(!1),S([]),I([]),$([]))},[n?.resetKey]);const R=Qn(),L=s.useMemo(()=>Object.keys(R.posMap),[R]),k=s.useMemo(()=>Object.keys(R.typeMap),[R]),W=s.useMemo(()=>D.map(b=>L[zt.indexOf(b)]).filter(Boolean),[D,L]),X=s.useMemo(()=>A.map(b=>k[qt.indexOf(b)]).filter(Boolean),[A,k]),[U,he]=s.useState({cho:new Set,jung:new Set,jong:new Set,syllable:new Set}),[v,O]=s.useState(!1),[P,G]=s.useState(null),Y=1,ee=Math.max(1,[l.cho,l.jung,l.jong].filter(Boolean).length),[ye,Le]=s.useState(e);s.useEffect(()=>{if(ye!==e){if(!n?.resetOnMount){const b=fo(e);c(b?.composition??g()),w(b?.excludeNoImage??!0),p(b?.sameStructureOnly??!0),i(mo(b)),S(Array.isArray(b?.gradeFilter)?b.gradeFilter:[]),I(B(b?.posFilter)),$(T(b?.wordTypeFilter))}Le(e)}},[e,ye,n?.resetOnMount]),s.useEffect(()=>{if(!n?.resetOnMount&&ye===e)try{localStorage.setItem(Co(e),JSON.stringify({contrastCount:ee,composition:l,excludeNoImage:m,sameStructureOnly:h,phonemeView:u,gradeFilter:y,posFilter:D,wordTypeFilter:A}))}catch{}},[n?.resetOnMount,e,ye,ee,l,m,h,u,y,D,A]);const[Ee,nn]=s.useState(0);gn("wordpool:update",()=>nn(b=>b+1));const on=s.useRef(r.language);s.useEffect(()=>{on.current!==r.language&&(on.current=r.language,nn(b=>b+1))},[r.language]),s.useEffect(()=>{if(!t.choseong)return;let b=!1;return la({difficulty:d,excludeNoImage:m}).then(N=>{b||(he(N),N.cho.size+N.jung.size+N.jong.size>0&&O(!0))}).catch(()=>{b||he({cho:new Set,jung:new Set,jong:new Set,syllable:new Set})}),()=>{b=!0}},[t.choseong,d,m,Ee]),s.useEffect(()=>{let b=!1;const N=l,_=N.cho?ge(N.cho):null,x=N.jung?ge(N.jung):null,K=N.jong===ie,Ae=K?null:N.jong?ge(N.jong):null,ve=N.syllable!=null?Wt(N.syllable):null,tt=!!(_||x||Ae||K||ve);return ia({difficulty:t.difficulty?d:null,contrastCount:t.difficulty?ee:1,composition:t.choseong&&tt?{cho:_,jung:x,jong:Ae,jongNone:K,syllable:ve}:null,excludeNoImage:m,sameStructureOnly:h,phonemeView:u==="pron"?"pron":"char",grade:y.length>0?y:null}).then(nt=>{b||G(nt)}).catch(()=>{b||G(null)}),()=>{b=!0}},[t.choseong,t.difficulty,d,ee,l,u,m,h,Ee,y]),s.useEffect(()=>{v&&c(b=>{const N={...b};let _=!1;return["cho","jung","jong"].forEach(x=>{const K=b[x];!K||K===ie||ge(K).some(Ae=>U[x].has(Ae))||(N[x]=null,_=!0)}),b.syllable!=null&&t.fixedSyllable==null&&(b.syllable>=le?[...U.syllable].some(x=>x>=le)||(N.syllable=null,_=!0):(!U.syllable.has(b.syllable)||b.syllable<Y)&&(N.syllable=null,_=!0)),_?N:b})},[U,v,Y,t.fixedSyllable]);const rn=s.useMemo(()=>{const b=N=>{const _=new Set;for(const x of uo[N])U[N].has(x)&&_.add(x);return _};return{cho:b("cho"),jung:b("jung"),jong:b("jong")}},[U]),wt=s.useMemo(()=>({exact:new Set(ro.filter(b=>U.syllable.has(b))),min:[...U.syllable].some(b=>b>=le)}),[U]),j=s.useMemo(()=>({composition:o("wordPairs.composition","\uC815\uB2F5 \uB2E8\uC5B4 \uAD6C\uC131"),syllableCount:o("wordPairs.syllableCount","\uC74C\uC808 \uC218"),onset:o("wordPairs.onset","\uCD08\uC131"),vowel:o("wordPairs.vowel","\uBAA8\uC74C"),coda:o("wordPairs.coda","\uC885\uC131"),phonemeGroup:o("training.filter.phonemeGroup",{defaultValue:"\uD6C8\uB828 \uC74C\uC808"}),trainOnset:o("training.filter.trainOnset",{defaultValue:"\uCD08\uC131"}),trainVowel:o("training.filter.trainVowel",{defaultValue:"\uBAA8\uC74C"}),trainCoda:o("training.filter.trainCoda",{defaultValue:"\uC885\uC131"}),random:o("training.filter.random","\uBB34\uC791\uC704"),exclude:o("wordSearch.filter.exclude","\uC81C\uC678"),selectLabel:o("training.filter.selectSection",{defaultValue:"\uC120\uD0DD"}),none:o("common.none","\uC5C6\uC74C"),noImage:o("wordSearch.filter.excludeNoImage","\uC774\uBBF8\uC9C0 \uC5C6\uC74C"),excludeImage:o("training.filter.excludeImage",{defaultValue:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC"}),sameStructure:o("training.filter.sameStructure",{defaultValue:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC"}),noLimit:o("training.filter.noLimit",{defaultValue:"\uBB34\uAD00"}),codaExclude:o("training.filter.codaExclude",{defaultValue:"\uC81C\uC678"}),gradeLabel:o("training.filter.gradeLabel",{defaultValue:"\uB09C\uC774\uB3C4 \uB4F1\uAE09"})}),[o]),an=s.useMemo(()=>({[j.trainOnset]:"cho",[j.trainVowel]:"jung",[j.trainCoda]:"jong"}),[j]),et=s.useCallback((b,N)=>({title:N,items:b}),[]),Et=s.useMemo(()=>[o("training.filter.excludeImageInfo",{defaultValue:"\uC774\uBBF8\uC9C0 \uC788\uB294 \uB2E8\uC5B4\uB9CC: \uB2E8\uC5B4 \uC911\uC5D0 \uC774\uBBF8\uC9C0\uAC00 \uC788\uB294 \uB2E8\uC5B4\uB9CC \uACB0\uACFC\uC5D0 \uBCF4\uC5EC\uC90D\uB2C8\uB2E4."}),o("training.filter.sameStructureInfo",{defaultValue:"\uC74C\uC18C \uAD6C\uC870 \uAC19\uC740 \uB2E8\uC5B4\uB9CC: \uC815\uB2F5\uACFC \uC624\uB2F5\uC758 \uC74C\uC808 \uAD6C\uC870(\uAE00\uC790 \uC218\xB7\uBC1B\uCE68 \uC720\uBB34 \uB4F1)\uAC00 \uAC19\uC740 \uACB0\uACFC\uB9CC \uB0A8\uACA8\uC694."})],[o]),Eo=s.useMemo(()=>{const b=[];if(t.choseong){const N={value:ie,displayLabel:j.codaExclude},_=t.fixedNoCoda===!0,x=(K,Ae)=>{const ve=_&&K==="jong",tt={label:Ae,groupLabel:j.phonemeGroup,allOption:!t.requireSyllable,allLabel:j.noLimit,allOptionDisabled:ve};if(u==="pron"){const Be=Kt[K].map(_o=>_o.map(({v:At,phonetic:Lo})=>{const vt=ge(At),un=no(o,Lo),ln=ve||!vt.some(Oo=>U[K].has(Oo));return vt.length>1?{value:At,labels:vt,tooltip:un,disabled:ln}:{value:At,tooltip:un,disabled:ln}}));return K==="jong"&&!t.requireCoda&&Be.unshift([N]),{...tt,groups:Be}}const nt=uo[K].map(Be=>!ve&&rn[K].has(Be)?Be:{value:Be,disabled:!0});return{...tt,items:K==="jong"&&!t.requireCoda?[N,...nt]:nt}};b.push(x("cho",j.trainOnset)),b.push(x("jung",j.trainVowel)),b.push(x("jong",j.trainCoda))}if(b.push({...Zn(o,R,{labelInfo:et([o("wordPairs.filter.difficultyInfo",{defaultValue:"\uAD6D\uB9BD\uAD6D\uC5B4\uC6D0\uC758 \uAE30\uCD08 \uC5B4\uD718 \uB4F1\uAE09\uC774 \uACB0\uACFC\uC5D0 \uBC18\uC601\uB429\uB2C8\uB2E4."})])}),label:j.gradeLabel}),t.partOfSpeech&&b.push(Xn(R)),t.wordType&&b.push(eo(R)),t.choseong||t.fixedSyllable!=null){const N=t.fixedSyllable;b.push({label:j.syllableCount,items:[...ro.map(_=>({value:Vt(_),displayLabel:o("wordPairs.syllableN",{n:_,defaultValue:"{{n}}\uC74C\uC808"}),disabled:N!=null?_!==N:!wt.exact.has(_)||_<Y})),{value:Vt(le),displayLabel:o("wordPairs.syllableNPlus",{n:le,defaultValue:"{{n}}\uC74C\uC808 \uC774\uC0C1"}),disabled:N!=null?le!==N:!wt.min}],allOption:!0,allOptionDisabled:N!=null})}return t.choseong?b.push({label:j.exclude,displayLabel:j.selectLabel,multiple:!0,items:[j.excludeImage,j.sameStructure],labelInfo:et(Et)}):b.push({label:j.exclude,displayLabel:j.selectLabel,multiple:!0,items:[j.excludeImage],labelInfo:et([Et[0]])}),b},[t.choseong,t.partOfSpeech,t.wordType,t.requireSyllable,t.fixedSyllable,t.fixedNoCoda,t.requireCoda,Y,rn,U,u,wt,j,o,et,Et,R]),Ao={...(t.choseong||t.fixedSyllable!=null)&&l.syllable!=null?{[j.syllableCount]:Vt(l.syllable)}:{},...t.choseong&&l.cho?{[j.trainOnset]:l.cho}:{},...t.choseong&&l.jung?{[j.trainVowel]:l.jung}:{},...t.choseong&&l.jong?{[j.trainCoda]:l.jong}:{},[j.exclude]:[...m?[j.excludeImage]:[],...h?[j.sameStructure]:[]],[j.gradeLabel]:y.map(b=>o("wordSearch.filter.grade",{n:Number(b),defaultValue:"{{n}}\uB4F1\uAE09"})),...t.partOfSpeech?{[R.partOfSpeech]:W}:{},...t.wordType?{[R.wordType]:X}:{}},vo=s.useCallback((b,N)=>{if(N===j.exclude)b===j.excludeImage?w(_=>!_):b===j.sameStructure&&p(_=>!_);else if(N===j.syllableCount)c(_=>{if(!b||b===ue)return{..._,syllable:null};const x=yl(b);return{..._,syllable:_.syllable===x?null:x}});else if(N===j.gradeLabel){if(!b||b===ue){S([]);return}const _=b.replace(/\D/g,"");S(x=>x.includes(_)?x.filter(K=>K!==_):[...x,_])}else if(N===R.partOfSpeech){if(!b||b===ue){I([]);return}const _=zt[L.indexOf(b)]??B([b])[0];if(!_)return;I(x=>x.includes(_)?x.filter(K=>K!==_):[...x,_])}else if(N===R.wordType){if(!b||b===ue){$([]);return}const _=qt[k.indexOf(b)]??T([b])[0];if(!_)return;$(x=>x.includes(_)?x.filter(K=>K!==_):[...x,_])}else{const _=an[N];if(!_)return;c(x=>t.requireSyllable?b&&b!==ue?{...x,[_]:b}:x:!b||b===ue||x[_]===b?{...x,[_]:null}:{...x,[_]:b})}},[j,an,R,L,k,t.requireSyllable]),Bo=s.useCallback(b=>!t.partOfSpeech&&!t.wordType?!0:sl(b,{...t.partOfSpeech?{[R.partOfSpeech]:W}:{},...t.wordType?{[R.wordType]:X}:{}},R),[t.partOfSpeech,t.wordType,W,X,R]),Do=s.useCallback(b=>{b!==u&&(b!=="direct"&&u!=="direct"&&c(N=>co(N,b,C.current,f.current)),i(b))},[u]),To=s.useCallback(()=>({composition:l,contrastCount:ee,excludeNoImage:m,sameStructureOnly:h,phonemeView:u,gradeFilter:y,posFilter:D,wordTypeFilter:A}),[l,ee,m,h,u,y,D,A]),No=s.useCallback(b=>{c(b.composition),w(b.excludeNoImage),p(b.sameStructureOnly??!0),i(b.phonemeView),S(Array.isArray(b.gradeFilter)?b.gradeFilter:[]),Array.isArray(b.posFilter)&&I(B(b.posFilter)),Array.isArray(b.wordTypeFilter)&&$(T(b.wordTypeFilter))},[]);return{difficulty:d,contrastCount:ee,composition:l,choseong:l.cho,excludeNoImage:m,sameStructureOnly:h,gradeFilter:y,posFilter:W,wordTypeFilter:X,matchesWordAttributes:Bo,poolVersion:Ee,filterSections:Eo,filterSelected:Ao,handleFilterSelect:vo,phonemeView:u,setPhonemeView:Do,phonemeGroupLabel:j.phonemeGroup,wordCount:P,getFilterSnapshot:To,restoreFilterSnapshot:No}}function Al(e){const t=i=>i?ge(i):null,n=t(e.cho),o=t(e.jung),r=e.jong===ie,a=r?null:t(e.jong),u=e.syllable!=null?Wt(e.syllable):null;return!n&&!o&&!a&&!r&&!u?null:{cho:n,jung:o,jong:a,jongNone:r,syllable:u}}function vl(e,t,n,o,r,a,u=!0,i="char",l=[]){const[c,g]=s.useState({}),[d,C]=s.useState(!1),{cho:f=null,jung:m=null,jong:w=null,syllable:h=null}=o??{},p=l.length>0?l.slice().sort().join(","):"",y=e.map(E=>E.key).join("|");s.useEffect(()=>{a>0&&ua(r).catch(()=>{})},[a,r]),s.useEffect(()=>{let E=!1;return C(!0),(async()=>{const M=Al({cho:f,jung:m,jong:w,syllable:h}),B=`${f??""}_${m??""}_${w??""}_${h??""}_${p}`,T={};await Promise.all(e.map(async D=>{const I=Tt[D.key];try{const A=await Un(D.key,{difficulty:I.difficulty?t:null,contrastCount:I.difficulty?n:1,composition:I.choseong?M:null,count:5,excludeNoImage:r,sameStructureOnly:u,phonemeView:i,grade:l.length>0?l:null});A&&A.length>0?T[D.key]={id:`wt-${D.key}-${t}-${B}-${Date.now()}`,name:D.label,training_type:D.key,category_main_code:"WORD",iconColor:D.color,subTitle:D.subTitle,items:A,itemCount:A.length}:T[D.key]={id:`wt-${D.key}-empty`,name:D.label,training_type:D.key,category_main_code:"WORD",iconColor:D.color,subTitle:D.subTitle,items:[],itemCount:0,__empty:!0}}catch{T[D.key]=null}})),E||(g(T),C(!1))})(),()=>{E=!0}},[t,n,f,m,w,h,r,u,i,a,p,y]);const S=JSON.stringify(e.map(E=>[E.key,E.label,E.color,E.subTitle]));return{perTypeData:s.useMemo(()=>{const E={};for(const[M,B]of Object.entries(c)){const T=e.find(D=>D.key===M);E[M]=B&&T?{...B,name:T.label,iconColor:T.color,subTitle:T.subTitle}:B}return E},[c,S]),generating:d}}const Ke=[],Ue=[],ze=[],qe=[],ft={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},mt={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},Bl={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let Jt=null,po=null,pe=null;function Dl({counts:e,forceRefresh:t}={}){const n=Object.assign({},Bl,e||{}),o=Oe(),r=Re(new Date(`${o}T00:00:00+09:00`).getTime()-864e5),a=JSON.stringify(n);if(!t&&po===o&&Jt===a&&pe)return Object.assign(ft,pe.today),Object.assign(mt,pe.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:ft,yesterday:mt};const u={LISTEN_IN_NOISE:ce(Ke,Math.max(0,Number(n.LISTEN_IN_NOISE)||0)),SHORT_STORY:ce(Ue,Math.max(0,Number(n.SHORT_STORY)||0)),LONG_STORY:ce(ze,Math.max(0,Number(n.LONG_STORY)||0)),ORDERING_SENTENCE:ce(qe,Math.max(0,Number(n.ORDERING_SENTENCE)||0))};let i=null;return pe&&Jt===a&&pe.yesterday&&pe.yesterday.date===r&&(i=pe.yesterday.selection),i||(i={LISTEN_IN_NOISE:ce(Ke,Math.max(0,Number(n.LISTEN_IN_NOISE)||0)),SHORT_STORY:ce(Ue,Math.max(0,Number(n.SHORT_STORY)||0)),LONG_STORY:ce(ze,Math.max(0,Number(n.LONG_STORY)||0)),ORDERING_SENTENCE:ce(qe,Math.max(0,Number(n.ORDERING_SENTENCE)||0))}),Object.assign(ft,u),Object.assign(mt,i),po=o,Jt=a,pe={today:u,yesterday:{date:r,countsKey:a,selection:i}},{today:ft,yesterday:mt}}let Qt=!1,Je=null;async function Tl(){try{const e={url:typeof document>"u"?require("url").pathToFileURL(__filename).href:Bt&&Bt.tagName.toUpperCase()==="SCRIPT"&&Bt.src||new URL("hooks.cjs.js",document.baseURI).href}&&void 0||"/",t=await fetch(`${e}data/allTrainingData.json`);return t.ok?await t.json():null}catch{return null}}async function Nl(){if(!Qt)return Je||(Je=(async()=>{const e=await Tl();if(!e){Je=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}const t={noise:[],short:[],long:[],order:[]};try{for(const n of Object.keys(e||{})){const o=e[n]||[];for(const r of o){if(!r||typeof r!="object")continue;const a=r,u=String(a.training_type||n),i=String(a.category_main_code||a.category_main||a.category_0||""),l=String(a.category_sub_code||a.category_sub||a.category_1||""),c=Object.assign({},a,{training_type:u,category_0:i,category_1:l});u==="LISTEN_IN_NOISE"?t.noise.push(c):u==="SHORT_STORY"?t.short.push(c):u==="LONG_STORY"?t.long.push(c):u==="ORDERING_SENTENCE"&&t.order.push(c)}}}catch{Je=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}Ke.push(...t.noise),Ue.push(...t.short),ze.push(...t.long),qe.push(...t.order),Qt=!0;try{Dl()}catch{}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}})(),Je)}async function _l(e=3e3){const t=Nl();let n;try{await Promise.race([t,new Promise(o=>{n=setTimeout(o,e)})])}finally{n!==void 0&&clearTimeout(n)}return Qt}function ho(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}function Ll(e){let t=e>>>0;return()=>{t|=0,t=t+1831565813|0;let n=Math.imul(t^t>>>15,1|t);return n=n+Math.imul(n^n>>>7,61|n)^n,((n^n>>>14)>>>0)/4294967296}}const Ol=ce,Rl=e=>{const[t,n,o]=e.split("-").map(Number);return Math.round(Date.UTC(t,(n||1)-1,o||1)/864e5)},Pl=(e,t)=>{const n=e??{};return String(n.id??n.name??t)};function pt(e,t,n,o,r){if(!e.length||t<=0)return[];const a=Ll(ho(`${n}|${o}|${r}`)),u=Rl(o)&1,i=e.filter((c,g)=>(ho(`${n}|${r}|${Pl(c,g)}`)>>>7&1)===u),l=i.length>=t&&e.length-i.length>=t;return Ol(l?i:e,t,a)}function Zt(e,t,n){const o=r=>Math.max(0,e[r]||0);return{LISTEN_IN_NOISE:pt(Ke,o("LISTEN_IN_NOISE"),t,n,"LISTEN_IN_NOISE"),SHORT_STORY:pt(Ue,o("SHORT_STORY"),t,n,"SHORT_STORY"),LONG_STORY:pt(ze,o("LONG_STORY"),t,n,"LONG_STORY"),ORDERING_SENTENCE:pt(qe,o("ORDERING_SENTENCE"),t,n,"ORDERING_SENTENCE")}}function Xt(e){return e?!!(e.LISTEN_IN_NOISE?.length||e.SHORT_STORY?.length||e.LONG_STORY?.length||e.ORDERING_SENTENCE?.length):!1}const Ml={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};function en(e=!1,t=Ml,n){const o=Re(Date.now()),r=Re(Date.now()-864e5),a=n??"";return Ke.length>0||Ue.length>0||ze.length>0||qe.length>0?{today:Zt(t,a,o),yesterday:Zt(t,a,r)}:{today:Zt(t,a,o),yesterday:null}}function Il(e){const t=s.useRef({LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),n=s.useRef(null),[o,r]=s.useState(!1),[a,u]=s.useState(!1),[i,l]=s.useState(0),[c,g]=s.useState(!1),[d,C]=s.useState(()=>Oe());s.useEffect(()=>{const m=()=>{const h=Date.now(),p=new Date(h+9*36e5),y=Date.UTC(p.getUTCFullYear(),p.getUTCMonth(),p.getUTCDate()+1)-9*36e5;return Math.max(1e3,y-h+1e3)};let w=setTimeout(function h(){C(Oe()),w=setTimeout(h,m())},m());return()=>clearTimeout(w)},[]),s.useEffect(()=>{let m=!1,w=!1,h=!1,p,y=0,S=null,E=0;const M=40,B=()=>{p!==void 0&&(clearInterval(p),p=void 0)};let T=!1;try{const F=new URLSearchParams(window.location.search),R=F.get("forceRefresh")||F.get("force");T=R==="1"||R==="true"}catch{}const D=F=>{w||(h=!0,t.current=F.today,n.current=F.yesterday,r(!0),g(!0),l(R=>R+1),m=!0,B())},I=async()=>{if(m)return;if(!T){const R=en(!1,void 0,e);if(Xt(R.today)){D(R);return}}if(S){++y>=M&&A();return}if(y>=E){E=y+8,S=_l(3e3).catch(()=>!1);try{await S}finally{S=null}if(m)return}const F=en(T,void 0,e);if(Xt(F.today)){D(F);return}++y>=M&&A()};function A(){r(!0),g(!1),m=!0,B()}const $=()=>{if(w||h)return;const F=en(T,void 0,e);Xt(F.today)&&D(F)};try{window.addEventListener("speechear.data.updated",$)}catch{}return I(),p=setInterval(I,250),()=>{m=!0,w=!0,B();try{window.removeEventListener("speechear.data.updated",$)}catch{}}},[e,d]);const f=s.useCallback(m=>{const w=a?n.current:t.current,h=a?t.current:n.current;return w?.[m]?.length?w[m]:h?.[m]?.length?h[m]:void 0},[a,i]);return{loaded:o,hasData:c,showYesterday:a,setShowYesterday:u,getTrainingPerType:f}}const _e=[];let ht=!1;function yo(e){if(e.key!=="Escape"||e.defaultPrevented||e.isComposing||e.keyCode===229)return;const t=_e[_e.length-1];t&&(e.stopPropagation(),t())}function bo(e){return _e.push(e),!ht&&typeof document<"u"&&(document.addEventListener("keydown",yo),ht=!0),()=>{const t=_e.lastIndexOf(e);t>=0&&_e.splice(t,1),_e.length===0&&ht&&typeof document<"u"&&(document.removeEventListener("keydown",yo),ht=!1)}}function kl(e,t=!0){const n=Cn(e);s.useEffect(()=>{if(t)return bo(()=>{n.current?.()})},[t,n])}const tn=(e,t)=>`${e}:${t??1}`,yt=new Map,So=new Set,wo=new Map,xl=6e4;function jl(e,t){const[n,o]=s.useState(0),r=Array.from(new Set(e.map(a=>tn(a.word,a.homonum)))).sort().join("|");return s.useEffect(()=>{const a=r?r.split("|"):[],u=Date.now(),i=a.filter(g=>!yt.has(g)&&!So.has(g)&&!(u-(wo.get(g)??-1/0)<xl));if(i.length===0)return;let l=!1;const c=Array.from(new Set(i.map(g=>g.slice(0,g.lastIndexOf(":")))));return t(c).then(g=>{for(const d of g)d.Meaning&&yt.set(tn(d.Word,d.Homonum??void 0),d.Meaning);if(g.length>0)for(const d of i)yt.has(d)||So.add(d);else{const d=Date.now();for(const C of i)wo.set(C,d)}l||g.length===0||o(d=>d+1)}).catch(()=>{}),()=>{l=!0}},[r,t]),s.useMemo(()=>{const a=r?r.split("|"):[],u=new Map;for(const i of a){const l=yt.get(i);l!=null&&u.set(i,l)}return u},[r,n])}function Fl(){const[e,t]=s.useState(null),n=s.useCallback(a=>t(a.getBoundingClientRect()),[]),o=s.useCallback(()=>t(null),[]),r=s.useCallback(a=>{const u=a.getBoundingClientRect();t(i=>i?null:u)},[]);return{anchorRect:e,isOpen:e!=null,openAt:n,close:o,toggleAt:r}}function $l(e){const[t,n]=s.useState(null),[o,r]=s.useState(null),a=s.useRef(null);s.useEffect(()=>()=>{a.current&&clearTimeout(a.current)},[]);const u=s.useCallback((l,c)=>{a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{n(l),r(c)},e)},[e]),i=s.useCallback(()=>{a.current&&clearTimeout(a.current),n(null),r(null)},[]);return{payload:t,anchorRect:o,openAfterDelay:u,close:i}}function Hl(e,t,n){const o=Number.isFinite(t)&&t>=1?Math.floor(t):1,r=Math.max(1,Math.ceil(e.length/o)),a=Number.isFinite(n)?Math.min(Math.max(1,Math.floor(n)),r):1;return{pageItems:s.useMemo(()=>e.slice((a-1)*o,a*o),[e,a,o]),totalPages:r,curPage:a}}function Gl(e="warning"){const[t,n]=s.useState(""),[o,r]=s.useState(e),[a,u]=s.useState(0),i=s.useCallback((d,C)=>{r(C),n(d),u(f=>f+1)},[]),l=s.useCallback(d=>i(d,"warning"),[i]),c=s.useCallback(d=>i(d,"normal"),[i]),g=s.useCallback(()=>n(""),[]);return{toastMessage:t,toastType:o,toastKey:a,showToast:i,showWarning:l,showNormal:c,clearToast:g}}const Vl=[{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."}],Wl={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};function Yl(e){return Vl.map(t=>{const n=Wl[t.key];return n?{...t,label:e(`trainingType.${n}.title`),desc:e(`trainingType.${n}.desc`)}:t})}const Qe={blue:"#60A5FA",green:"#4ADE80",amber:"#FBBF24",purple:"#A78BFA",pink:"#F472B6"},Ze=Qe.blue,bt=Qe.green,Xe=Qe.amber,St=Qe.purple,Kl=Qe.pink,Ul=[{key:"discrimination",label:"\uBCC0\uBCC4\uD6C8\uB828",disc:"\uB450 \uC18C\uB9AC\uAC00 \uAC19\uC740\uC9C0 \uB2E4\uB978\uC9C0, \uB610\uB294 \uD2B9\uC815 \uC18C\uB9AC\uB97C \uAD6C\uBCC4\uD558\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"ear",types:[{key:"SAME_SOUND_PICK",label:"\uAC19\uC740 \uC18C\uB9AC \uACE0\uB974\uAE30",icon:"volume-2",color:Ze,subTitle:"\uB4E4\uC740 \uC18C\uB9AC\uC640 \uAC19\uC740 \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"SAME_OR_DIFF",label:"\uAC19\uC740\uC9C0 \uB2E4\uB978\uC9C0 \uB9DE\uD788\uAE30",icon:"diff",color:Ze,subTitle:"\uB450 \uC18C\uB9AC\uAC00 \uAC19\uC740\uC9C0, \uB2E4\uB978\uC9C0 \uAD6C\uBD84\uD558\uC138\uC694."},{key:"HEAR_AND_PICK_SAME",label:"\uC77C\uCE58\uD558\uB294 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"headphones",color:Ze,subTitle:"\uB4E4\uC740 \uC18C\uB9AC\uC758 \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"HEAR_AND_PICK_INCLUDED",label:"\uD55C \uC74C\uC808 \uD3EC\uD568 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"scan-search",color:Ze,subTitle:"\uB4E4\uC740 \uC74C\uC808\uC774 \uD3EC\uD568\uB41C \uB2E8\uC5B4 \uCE74\uB4DC\uB97C \uACE0\uB974\uC138\uC694."},{key:"STARTS_WITH_SAME_SOUND",label:"\uCCAB \uC74C\uC808\uC774 \uAC19\uC740 \uB2E8\uC5B4 \uB9DE\uD788\uAE30",icon:"play-circle",color:Ze,subTitle:"\uB4E4\uC740 \uB2E8\uC5B4\uC640 \uAC19\uC740 \uC18C\uB9AC\uB85C \uC2DC\uC791\uD558\uB294 \uB2E8\uC5B4\uB97C \uACE0\uB974\uC138\uC694."}]},{key:"synthesis",label:"\uD569\uC131\uD6C8\uB828",disc:"\uB450 \uAC1C \uC774\uC0C1\uC758 \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uD569\uCCD0 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"git-merge",types:[{key:"MERGE_2_SYLLABLES",label:"\uC74C\uC808 2\uAC1C \uD569\uCE58\uAE30",icon:"link-2",color:bt,subTitle:"\uB450 \uC74C\uC808\uC744 \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_3_SYLLABLES",label:"\uC74C\uC808 3\uAC1C \uD569\uCE58\uAE30",icon:"git-merge",color:bt,subTitle:"\uC138 \uC74C\uC808\uC744 \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_2_PHONEMES",label:"\uC74C\uC18C 2\uAC1C \uD569\uCE58\uAE30",icon:"combine",color:bt,subTitle:"\uB450 \uC74C\uC18C\uB97C \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"MERGE_3_PHONEMES",label:"\uC74C\uC18C 3\uAC1C \uD569\uCE58\uAE30",icon:"braces",color:bt,subTitle:"\uC138 \uC74C\uC18C\uB97C \uD569\uCE58\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"}]},{key:"deletion",label:"\uD0C8\uB77D\uD6C8\uB828",disc:"\uB2E8\uC5B4\uC5D0\uC11C \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uC81C\uAC70\uD588\uC744 \uB54C \uB0A8\uB294 \uC18C\uB9AC\uB97C \uC778\uC2DD\uD558\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"scissors",types:[{key:"DROP_1_FROM_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C 1\uC74C\uC808 \uD0C8\uB77D",icon:"scissors",color:Xe,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC5D0\uC11C \uD55C \uC74C\uC808\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_1_FROM_3SYLL",label:"3\uC74C\uC808\uC5D0\uC11C 1\uC74C\uC808 \uD0C8\uB77D",icon:"minus-circle",color:Xe,subTitle:"3\uC74C\uC808 \uB2E8\uC5B4\uC5D0\uC11C \uD55C \uC74C\uC808\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_PART_FROM_COMPOUND",label:"\uD569\uC131\uC5B4\uC5D0\uC11C \uBD80\uBD84\uD0C8\uB77D",icon:"unlink",color:Xe,subTitle:"\uD569\uC131\uC5B4\uC758 \uC77C\uBD80\uB97C \uBE7C\uBA74 \uC5B4\uB5A4 \uB2E8\uC5B4\uAC00 \uB420\uAE4C\uC694?"},{key:"DROP_FINAL_CONSONANT_FROM_1SYLL",label:"1\uC74C\uC808\uC5D0\uC11C \uBC1B\uCE68 \uD0C8\uB77D",icon:"eraser",color:Xe,subTitle:"\uBC1B\uCE68\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB420\uAE4C\uC694?"},{key:"REMOVE_CONSONANT_AND_IDENTIFY_PHONEME",label:"1\uC74C\uC808\uC5D0\uC11C \uC790\uC74C \uD0C8\uB77D",icon:"audio-lines",color:Xe,subTitle:"\uC790\uC74C\uC744 \uBE7C\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB0A8\uC744\uAE4C\uC694?"}]},{key:"substitution",label:"\uB300\uCE58\uD6C8\uB828",disc:"\uB2E8\uC5B4\uC758 \uC77C\uBD80 \uC74C\uC808\uC774\uB098 \uC74C\uC18C\uB97C \uBC14\uAFB8\uC5B4 \uC0C8\uB85C\uC6B4 \uC18C\uB9AC\uB97C \uB9CC\uB4DC\uB294 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"replace",types:[{key:"CHANGE_1_SYLL_IN_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uBC14\uAFB8\uAE30",icon:"replace",color:St,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC808\uC744 \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_SYLL_IN_3SYLL",label:"3\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC808 \uBC14\uAFB8\uAE30",icon:"shuffle",color:St,subTitle:"3\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC808\uC744 \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_PHONEME_IN_1SYLL",label:"1\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC18C \uBC14\uAFB8\uAE30",icon:"arrow-right-left",color:St,subTitle:"1\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC18C\uB97C \uBC14\uAFD4 \uC0C8 \uC18C\uB9AC\uB97C \uB9CC\uB4DC\uC138\uC694."},{key:"CHANGE_1_PHONEME_IN_2SYLL",label:"2\uC74C\uC808\uC5D0\uC11C \uD55C \uC74C\uC18C \uBC14\uAFB8\uAE30",icon:"flip-horizontal",color:St,subTitle:"2\uC74C\uC808 \uB2E8\uC5B4\uC758 \uD55C \uC74C\uC18C\uB97C \uBC14\uAFD4 \uC0C8 \uB2E8\uC5B4\uB97C \uB9CC\uB4DC\uC138\uC694."}]},{key:"attention",label:"\uCCAD\uAC01\uC801\uC8FC\uC758\uB825\uD6C8\uB828",disc:"\uC5EC\uB7EC \uC18C\uB9AC\uB97C \uB4E3\uACE0 \uC21C\uC11C\uB97C \uAE30\uC5B5\uD558\uB294 \uC8FC\uC758\uB825\uACFC \uB2E8\uAE30 \uAE30\uC5B5 \uD6C8\uB828\uC785\uB2C8\uB2E4.",icon:"list-ordered",types:[{key:"LISTEN_AND_REMEMBER_ORDER",label:"\uB4E3\uACE0 \uC21C\uC11C\uB300\uB85C \uAE30\uC5B5\uD558\uAE30",icon:"list-ordered",color:Kl,subTitle:"\uC138 \uB2E8\uC5B4\uB97C \uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCE74\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694."}]}];function zl(){const{t:e}=se.useTranslation();return s.useMemo(()=>{const t=Object.fromEntries(Yl(e).map(o=>[o.key,o.label])),n={...t};return Ul.flatMap(o=>o.types).forEach(o=>{n[o.key]=e(`trainingType.${o.key}.label`,{defaultValue:o.label})}),{sentence:t,all:n}},[e])}function ql({computeStyle:e,onScroll:t="close",onResize:n="close",ignoreOutsideClickSelector:o}){const[r,a]=s.useState(!1),[u,i]=s.useState({}),l=s.useRef(null),c=s.useRef(null),g=s.useCallback(()=>{l.current&&i(e(l.current.getBoundingClientRect(),l.current))},[e]);s.useEffect(()=>{if(!r)return;g();const f=y=>{const S=y.target;o&&S.closest?.(o)||l.current?.contains(S)||c.current?.contains(S)||a(!1)};document.addEventListener("mousedown",f),document.addEventListener("pointerdown",f);const m=y=>{c.current?.contains(y.target)||(t==="reposition"?g():t==="close"&&a(!1))};t!=="ignore"&&window.addEventListener("scroll",m,!0);const w=()=>{n==="reposition"?g():n==="close"&&a(!1)};let h=null;const p=()=>{w(),h&&clearTimeout(h),h=setTimeout(()=>{h=null,n==="reposition"&&g()},250)};return n!=="ignore"&&(window.addEventListener("resize",w),window.addEventListener("orientationchange",p)),()=>{document.removeEventListener("mousedown",f),document.removeEventListener("pointerdown",f),t!=="ignore"&&window.removeEventListener("scroll",m,!0),n!=="ignore"&&(window.removeEventListener("resize",w),window.removeEventListener("orientationchange",p)),h&&clearTimeout(h)}},[r,g,t,n,o]),s.useEffect(()=>{if(r)return bo(()=>a(!1))},[r]);const d=s.useCallback(()=>a(f=>!f),[]),C=s.useCallback(()=>a(!1),[]);return{open:r,setOpen:a,toggle:d,close:C,style:u,triggerRef:l,menuRef:c}}function Jl(e,{mode:t="playback",autoStart:n=!1,onPlaySpeaker:o,onComplete:r,playMs:a=1100,feedbackMs:u=1500}={}){const[i,l]=s.useState([]),[c,g]=s.useState(0),[d,C]=s.useState("idle"),[f,m]=s.useState(null),[w,h]=s.useState([]),[p,y]=s.useState(null),[S,E]=s.useState(0),M=s.useRef(0),B=s.useCallback(P=>{M.current=typeof P=="function"?P(M.current):P,E(M.current)},[]),T=s.useRef(o),D=s.useRef(r);s.useEffect(()=>{T.current=o,D.current=r},[o,r]);const I=s.useRef([]),A=()=>{I.current.forEach(clearTimeout),I.current=[]},$=(P,G)=>{I.current.push(setTimeout(G,P))};s.useEffect(()=>()=>A(),[]);const F=i[c]?.id??null,R=s.useRef(null),L=s.useCallback(()=>{A(),C("playing"),h([]),y(null),B(0);let P=0;e.forEach((G,Y)=>{$(P,()=>{g(Y),m(G.id),T.current?.(G)}),$(P+1e3,()=>{m(null),h(ee=>[...ee,G.id])}),P+=1300}),$(P,()=>{C("done"),D.current?.({score:0,total:e.length})})},[e,B]),k=s.useCallback((P,G)=>{if(G>=P.length){C("done"),D.current?.({score:M.current,total:P.length});return}R.current=null,g(G),y(null),C("playing"),m(P[G].id),T.current?.(P[G]),$(a,()=>{m(null),C("waiting")})},[a]),W=s.useCallback(()=>{A();const P=H(e);l(P),B(0),h([]),k(P,0)},[e,k,B]),X=s.useCallback(()=>{t==="playback"?(l(e),L()):W()},[t,e,L,W]),U=s.useCallback(()=>{A(),C("idle"),m(null),h([]),y(null),g(0),B(0),l([])},[B]),he=e.map(P=>P.id).join("|");s.useEffect(()=>(n?X():U(),()=>A()),[t,he,n]);const v=s.useCallback(P=>{d!=="waiting"||t==="playback"||R.current===c||(R.current=c,y(P),P===i[c]?.id&&B(G=>G+1),t==="exam"?(C("playing"),$(400,()=>k(i,c+1))):(C("feedback"),$(u,()=>k(i,c+1))))},[d,t,i,c,k,u,B]),O=t==="playback"?e.length:i.length;return{bind:{activeSpeakerId:f,playedIds:w,selectedId:p,answerId:F,showFeedback:d==="feedback",clickable:d==="waiting",onSelectSpeaker:v},index:c,total:O,score:S,phase:d,done:d==="done",start:X,reset:U}}exports.CACHE_GROUPS=Bn,exports.CORE_VERSION=Hi,exports.DocumentTitleSuppressContext=mn,exports.EMPTY_COMPOSITION=Ut,exports.MediaQueryOverrideContext=cn,exports.NO_CODA=ie,exports.SYLLABLE_MIN=le,exports.VAP_PAGE_SIZE_OPTIONS=ot,exports.buildGradeSection=Zn,exports.buildPartOfSpeechSection=Xn,exports.buildPositionSection=ol,exports.buildSelectSection=nl,exports.buildSyllableSection=tl,exports.buildWordTypeSection=eo,exports.charToPronValue=lo,exports.convertComposition=co,exports.fmtBytes=ur,exports.lsBytes=Dn,exports.meaningKey=tn,exports.normalizeWordAttributeFilter=Xi,exports.pronToCharValue=so,exports.syllableToFilter=Wt,exports.toWordAttributeFilterCodes=$t,exports.today=Fe,exports.toggleAttributeFilter=rl,exports.useAnchoredMenu=ql,exports.useCacheManagement=ir,exports.useDailyTrainingSelection=Il,exports.useDelayedHoverAnchor=$l,exports.useDeviceManagement=wr,exports.useDocumentTitle=Fo,exports.useEscToClose=kl,exports.useFontScale=Po,exports.useHoverAnchor=Fl,exports.useMediaQuery=jo,exports.usePagedList=Hl,exports.usePasswordChange=Ko,exports.useRelativeDay=Vo,exports.useSoundCompassExam=Jl,exports.useTablePaging=br,exports.useTableSort=Sr,exports.useToastState=Gl,exports.useTrainingTypeLabels=zl,exports.useVisitAllPanel=gr,exports.useVisitHistory=cr,exports.useVisitSchedule=Cr,exports.useWindowEvent=gn,exports.useWordAttributeFilterKeys=Qn,exports.useWordDataStats=lr,exports.useWordMeanings=jl,exports.useWordTrainingDataGeneration=vl,exports.useWordTrainingFilter=El,exports.valueToJamos=ge,exports.wordAttributeFilterFromCodes=Ht;
|