@ihabdevteam/core 0.202.0 → 0.203.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 +33 -0
- package/dist/components.cjs.js +11 -11
- package/dist/components.esm.css +1 -1
- package/dist/hooks.cjs.js +1 -1
- package/dist/i18n.cjs.js +1 -1
- package/dist/ihabdevteam-core.cjs.js +15 -15
- package/dist/ihabdevteam-core.d.ts +13 -2
- package/dist/packages/core/src/components/Word/WordTableBlock.d.ts +1 -1
- package/dist/packages/core/src/components/Word/WordTableBlock.js +7 -2
- package/dist/packages/core/src/components/Word/wordTableBlockTypes.d.ts +11 -0
- package/dist/packages/core/src/components/WordTable.css +31 -2
- package/dist/packages/core/src/components/WordTable.js +3 -1
- package/dist/packages/core/src/version.d.ts +1 -1
- package/dist/packages/core/src/version.js +1 -1
- package/dist/utils.cjs.js +1 -1
- package/package.json +1 -1
package/dist/components.esm.css
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
/* !important 필요 — 오늘이 일요일/토요일과 겹치면 아래 nth-child 주말 색상 규칙과
|
|
4
4
|
특이도가 동일(3클래스)하고 소스 순서상 뒤라 !important 없이는 흰 글자가 주말색으로
|
|
5
|
-
덮어써짐(오늘 표시가 무의미해짐). 실제 경합 확인됨. */.ihabdevteam-core-scope .calendar-cell.today .calendar-cell__number{align-items:center;background:var(--color-main);border-radius:50%;color:#fff!important;display:flex;height:24px;justify-content:center;width:24px}.ihabdevteam-core-scope .calendar-cell__number{align-items:center;color:var(--color-darkGray);display:flex;font-weight:600;height:24px;justify-content:center;margin-bottom:6px;width:24px}.ihabdevteam-core-scope .calendar-cell:nth-child(7n+8) .calendar-cell__number{color:var(--color-error)}.ihabdevteam-core-scope .calendar-cell:nth-child(7n+14) .calendar-cell__number{color:var(--color-main)}.ihabdevteam-core-scope .calendar-cell__badges{display:flex;flex-direction:column;gap:4px}.ihabdevteam-core-scope .calendar-cell__visit-count{align-items:center;color:var(--color-main);display:none;gap:4px}.ihabdevteam-core-scope .calendar-cell__visit-dot{background:currentColor;border-radius:50%;flex-shrink:0;height:6px;width:6px}@container (max-width: 96px){.ihabdevteam-core-scope .calendar-cell__badges{display:none}.ihabdevteam-core-scope .calendar-cell__visit-count{display:inline-flex}}.ihabdevteam-core-scope .calendar-visit-badge{align-items:center;background:var(--color-main-a10);border-radius:var(--radius-xs);box-sizing:border-box;color:var(--color-main);display:flex;gap:6px;min-height:28px;overflow:hidden;padding:0 8px}.ihabdevteam-core-scope .calendar-visit-badge__time{flex-shrink:0;font-weight:400;opacity:.7}.ihabdevteam-core-scope .calendar-visit-badge__name{flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.ihabdevteam-core-scope .calendar-visit-badge--scheduled{background:var(--color-sub-a10);color:var(--color-sub)}.ihabdevteam-core-scope .calendar-visit-badge--no-visit{background:color-mix(in srgb,var(--color-disabled) 15%,#fff);color:var(--color-disabled)}.ihabdevteam-core-scope .calendar-visit-badge__no-visit{background:var(--color-disabled);border-radius:var(--radius-xs);color:#fff;flex-shrink:0;line-height:1.4;padding:1px 5px}.ihabdevteam-core-scope .calendar-visit-badge--clickable{cursor:pointer;transition:background .12s,color .12s,border-color .12s}.ihabdevteam-core-scope .calendar-visit-badge--clickable:hover{background:var(--color-main);border-color:transparent;color:#fff}.ihabdevteam-core-scope .calendar-visit-badge--scheduled.calendar-visit-badge--clickable:hover{background:var(--color-sub);color:#fff}.ihabdevteam-core-scope .calendar-visit-badge--no-visit.calendar-visit-badge--clickable:hover{background:var(--color-disabled);color:#fff}.ihabdevteam-core-scope .calendar-visit-badge--draggable{cursor:grab}.ihabdevteam-core-scope .calendar-visit-badge--draggable:active{cursor:grabbing;opacity:.5}.ihabdevteam-core-scope .calendar-nav__button{align-items:center;display:inline-flex;justify-content:center}.ihabdevteam-core-scope .calendar-nav__button-icon{display:block}.ihabdevteam-core-scope .calendar-cell--clickable{cursor:pointer}.ihabdevteam-core-scope .calendar-cell--clickable:hover{background:var(--color-darkWhite)}.ihabdevteam-core-scope .calendar-cell--clickable:focus-visible{outline:2px solid var(--color-main);outline-offset:-2px}.ihabdevteam-core-scope .calendar-cell.drag-over{background:var(--color-main-a10);outline:1px solid var(--color-main);outline-offset:-1px}@media (max-width:767px){.ihabdevteam-core-scope .calendar-nav{flex-wrap:wrap}.ihabdevteam-core-scope .calendar-nav__legend{justify-content:center;position:static;width:100%}.ihabdevteam-core-scope .calendar-day-header{min-width:0}.ihabdevteam-core-scope .calendar-cell{min-height:72px;padding:4px}}.ihabdevteam-core-scope .section{display:flex;flex-direction:column;text-align:left;width:100%}.ihabdevteam-core-scope .section--page{gap:var(--spacing-m);padding-bottom:var(--spacing-page)}.ihabdevteam-core-scope .section--pagePopup{gap:var(--spacing-s);padding-bottom:var(--spacing-page)}.ihabdevteam-core-scope .section--popup{gap:var(--spacing-xs);padding-bottom:var(--spacing-page)}.ihabdevteam-core-scope .section--in-grid,.ihabdevteam-core-scope .section:last-child{padding-bottom:0}.ihabdevteam-core-scope .section__header{align-items:center;display:flex;justify-content:space-between;width:100%}.ihabdevteam-core-scope .section__title-row{align-items:flex-start;display:flex;flex:1;gap:var(--spacing-s);min-width:0}.ihabdevteam-core-scope .section__icon{align-items:center;background:var(--t-item-bg,var(--color-deepWhite));color:var(--t-item-fg,var(--color-main));display:flex;flex-shrink:0;height:20px;justify-content:center;margin-top:5px;width:20px}.ihabdevteam-core-scope .section__title-group{display:flex;flex-direction:column;gap:4px;min-width:0}.ihabdevteam-core-scope .section__title{color:var(--color-black);margin:0}.ihabdevteam-core-scope .section__disc{color:var(--color-gray);margin:0}.ihabdevteam-core-scope .section__action{flex-shrink:0}@media (max-width:767px){.ihabdevteam-core-scope .section__header{align-items:flex-start;flex-direction:column;gap:var(--spacing-xs)}}.ihabdevteam-core-scope .training-blocks{align-items:flex-start;display:flex;flex-direction:column}.ihabdevteam-core-scope .training-block{border-radius:var(--radius-card);width:100%}.ihabdevteam-core-scope .training-list{align-items:flex-start;display:flex;flex-wrap:wrap;gap:10px}@media (max-width:767px){.ihabdevteam-core-scope .training-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.ihabdevteam-core-scope .training-list>*{min-width:0}.ihabdevteam-core-scope .training-list>*>.training-block-button,.ihabdevteam-core-scope .training-list>.training-block-button{width:100%}}.ihabdevteam-core-scope .training-block__more{display:flex;justify-content:center;margin-top:var(--spacing-l)}.ihabdevteam-core-scope .training-blocks--top-spaced{margin-top:18px}.ihabdevteam-core-scope .training-word-card{background:var(--color-white);border-radius:var(--radius-m);display:flex;flex:none;flex-direction:column;height:260px;overflow:visible;perspective:900px;position:relative;width:200px}.ihabdevteam-core-scope .training-word-card--disabled{cursor:default}.ihabdevteam-core-scope .training-word-card__flipper{border-radius:var(--radius-m);box-shadow:var(--shadow-card);display:flex;flex:1;flex-direction:column;position:relative;transform-style:preserve-3d;transition:transform .55s cubic-bezier(.4,0,.2,1);will-change:transform}.ihabdevteam-core-scope .training-word-card--flipped .training-word-card__flipper{transform:rotateY(180deg)}.ihabdevteam-core-scope .training-word-card__front{box-sizing:border-box;flex:1;flex-direction:column;gap:var(--spacing-s);min-height:0;padding:10px var(--spacing-m)}.ihabdevteam-core-scope .training-word-card__back,.ihabdevteam-core-scope .training-word-card__front{align-items:center;backface-visibility:hidden;-webkit-backface-visibility:hidden;display:flex;justify-content:center}.ihabdevteam-core-scope .training-word-card__back{background:#f3f5f6;background:var(--color-deepWhite,#f3f5f6);border-radius:var(--radius-m);inset:0;position:absolute;transform:rotateY(180deg)}.ihabdevteam-core-scope .training-word-card__back:before{border:8px solid var(--color-darkWhite);border-radius:var(--radius-m);content:"";inset:0;pointer-events:none;position:absolute}.ihabdevteam-core-scope .training-word-card__disabled-symbol{filter:invert(93%) sepia(6%) saturate(247%) hue-rotate(163deg) brightness(101%) contrast(93%);height:52px;opacity:.6;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:52px}.ihabdevteam-core-scope .training-word-card__selected-badge{position:absolute;right:0;top:0;transform:translate(12%,-12%);z-index:3}.ihabdevteam-core-scope .training-word-card__selected-badge .circle-badge{border:2px solid var(--color-pureWhite)}.ihabdevteam-core-scope .training-word-card--selectable{cursor:pointer;outline:1px solid transparent;overflow:visible;transition:box-shadow .15s,outline-color .15s}.ihabdevteam-core-scope .training-word-card--selectable:not(.training-word-card--disabled):hover{box-shadow:0 4px 16px rgba(9,30,34,.12);outline:1px solid var(--color-main)}.ihabdevteam-core-scope .training-word-card--selectable.training-word-card--selected:hover,.ihabdevteam-core-scope .training-word-card--selected{box-shadow:none;outline:2px solid #4f6ef7;outline:2px solid var(--color-main,#4f6ef7)}.ihabdevteam-core-scope .training-word-card__image-wrap{aspect-ratio:4/3;background:#f3f5f6;border-radius:var(--radius-s);flex-shrink:0;overflow:hidden;padding:0;position:relative;width:100%}.ihabdevteam-core-scope .training-word-card__image{-webkit-user-drag:none;display:block;height:100%;-o-object-fit:cover;object-fit:cover;pointer-events:none;transition:opacity .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.ihabdevteam-core-scope .training-word-card__placeholder{background:linear-gradient(160deg,#f0f2f4,#e4e8ea);height:100%;width:100%}.ihabdevteam-core-scope .training-word-card__text-face{align-items:center;color:#0b2b35;color:var(--color-black,#0b2b35);display:flex;font-size:48px;font-weight:700;height:100%;justify-content:center;line-height:1;text-align:center;width:100%;word-break:keep-all}.ihabdevteam-core-scope .training-word-card__spinner{align-items:center;display:flex;inset:0;justify-content:center;position:absolute;z-index:1}.ihabdevteam-core-scope .training-word-card__spinner:after{animation:twCard__spin .7s linear infinite;border:3px solid rgba(0,0,0,.1);border-radius:50%;border-top:3px solid var(--color-main,#4f6ef7);content:"";height:28px;width:28px}@keyframes twCard__spin{to{transform:rotate(1turn)}}.ihabdevteam-core-scope .training-word-card__body{align-items:center;display:flex;flex-direction:column;gap:3px;padding:0}.ihabdevteam-core-scope .training-word-card__word{color:#0b2b35;color:var(--color-black,#0b2b35);font-size:22px;font-weight:700;line-height:1.25;text-align:center;word-break:keep-all}.ihabdevteam-core-scope .training-word-card__pronunciation{color:#70858a;color:var(--color-gray,#70858a);font-size:13px;font-weight:500;line-height:1.4;text-align:center}.ihabdevteam-core-scope .training-word-card__colloquial{color:#a0b0b5;color:var(--color-lightGray,#a0b0b5);line-height:1.4;text-align:center}.ihabdevteam-core-scope .training-word-card__bottom{display:flex;flex-shrink:0;justify-content:center}@media (max-width:720px){.ihabdevteam-core-scope .training-word-card{border-radius:var(--radius-card)}.ihabdevteam-core-scope .training-word-card__word{font-size:18px}.ihabdevteam-core-scope .training-word-card__body{gap:2px}.ihabdevteam-core-scope .training-word-card__front{gap:var(--spacing-xs)}.ihabdevteam-core-scope .training-word-card__back,.ihabdevteam-core-scope .training-word-card__back:before{border-radius:var(--radius-card)}}@media (max-width:767px){.ihabdevteam-core-scope .training-word-card{border-radius:var(--radius-card);height:auto;width:100%}.ihabdevteam-core-scope .training-word-card__flipper{border-radius:var(--radius-card);box-shadow:0 2px 8px rgba(0,0,0,.03)}.ihabdevteam-core-scope .training-word-card__front{padding:var(--spacing-s)}.ihabdevteam-core-scope .training-word-card__back:before{border-width:4px}.ihabdevteam-core-scope .training-word-card__image-wrap{aspect-ratio:1/1}.ihabdevteam-core-scope .training-word-card__word{font-size:14px}.ihabdevteam-core-scope .training-word-card__text-face{font-size:32px}.ihabdevteam-core-scope .training-word-card__pronunciation{font-size:11px}.ihabdevteam-core-scope .training-word-card__body{gap:2px}.ihabdevteam-core-scope .training-word-card__front{gap:4px}}.ihabdevteam-core-scope .popup{align-items:center;background:rgba(16,24,32,.6);background:var(--color-popupBlock,rgba(16,24,32,.6));display:flex;inset:0;justify-content:center;position:fixed;z-index:var(--z-modal)}.ihabdevteam-core-scope .popup.popup--inline{align-items:stretch;background:transparent;justify-content:stretch;position:relative;z-index:5}.ihabdevteam-core-scope .popup.popup--inline .popup-panel{width:100%}.ihabdevteam-core-scope .popup-panel{background:var(--color-white);border-radius:28px;box-shadow:var(--shadow-popup);display:flex;flex-direction:column;max-height:calc(100% - 60px);max-width:820px;overflow:hidden;position:relative;width:calc(100% - 40px)}.ihabdevteam-core-scope .popup-panel--small{max-width:480px}.ihabdevteam-core-scope .popup-panel--medium{max-width:680px}.ihabdevteam-core-scope .popup-panel--large{max-width:1080px}.ihabdevteam-core-scope .popup-panel--xlarge{max-width:1320px;width:calc(100% - 80px)}.ihabdevteam-core-scope .popup-panel--has-height{height:var(--popup-height)}.ihabdevteam-core-scope .popup-panel--fill-body .popup-content{overflow:hidden}.ihabdevteam-core-scope .popup-panel--fill-body .popup-content__inner{display:flex;flex-direction:column;height:100%;min-height:0}.ihabdevteam-core-scope .popup-panel--fit{max-width:min(1140px,calc(100% - 40px));min-width:min(480px,calc(100% - 40px));width:-moz-fit-content;width:fit-content}.ihabdevteam-core-scope .popup.popup--below-page-popup:not(.popup--inline){z-index:calc(var(--z-page-popup) - 1)}.ihabdevteam-core-scope .popup-close-float{align-items:center;display:flex;gap:var(--spacing-xs);position:absolute;right:8px;top:8px;z-index:1}.ihabdevteam-core-scope .popup-title{display:block;flex-shrink:0;padding:var(--spacing-l);text-align:center}.ihabdevteam-core-scope .popup-header{align-items:center;display:flex;flex-shrink:0;flex-wrap:wrap;gap:var(--spacing-s);padding:var(--spacing-l) var(--spacing-l) 0}.ihabdevteam-core-scope .popup-header--with-subtitle{align-items:flex-start}.ihabdevteam-core-scope .popup-header-main{display:flex;flex:1 1 220px;flex-direction:column;gap:4px;min-width:0}.ihabdevteam-core-scope .popup-title--left{flex:1;min-width:0;padding:0;text-align:left}.ihabdevteam-core-scope .popup-header-main .popup-title--left{flex:none}.ihabdevteam-core-scope .popup-header .popup-title--left{margin:0}.ihabdevteam-core-scope .popup-subtitle{color:var(--color-gray);margin:0;text-align:left}.ihabdevteam-core-scope .popup-header-segment{flex-shrink:0}.ihabdevteam-core-scope .popup-header-actions{align-items:center;display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end;margin-left:auto;min-width:0}.ihabdevteam-core-scope .popup-content{-webkit-overflow-scrolling:touch;display:flex;flex:1;flex-direction:column;min-height:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:20px 20px 0;touch-action:pan-y}.ihabdevteam-core-scope .popup-content__inner{padding-bottom:20px}.ihabdevteam-core-scope .popup-footer{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:center;padding:0 20px 20px}.ihabdevteam-core-scope .popup-footer--fill>*{flex:1}.ihabdevteam-core-scope .popup-footer--between{justify-content:space-between;padding-left:var(--spacing-xl);padding-right:var(--spacing-xl)}.ihabdevteam-core-scope .popup-footer--buttons>*{flex:1 1 auto;max-width:200px;min-width:0}.ihabdevteam-core-scope .popup-footer--bar{flex-wrap:wrap;gap:var(--spacing-l);justify-content:space-between}.ihabdevteam-core-scope .popup-footer__start{align-items:center;display:flex;flex-wrap:wrap;gap:var(--spacing-xs);min-width:0}.ihabdevteam-core-scope .popup-footer__end{align-items:center;display:flex;flex-wrap:wrap;gap:var(--spacing-s);justify-content:flex-end;margin-left:auto;min-width:0}.ihabdevteam-core-scope .popup-footer__end>*,.ihabdevteam-core-scope .popup-footer__start>*{min-width:0}.ihabdevteam-core-scope .popup--closing{opacity:0;transition:opacity .26s ease}@media (max-width:767px){.ihabdevteam-core-scope .popup-panel{max-height:calc(100% - 132px - env(safe-area-inset-bottom))}}.ihabdevteam-core-scope .form-date-row{display:flex;flex:1;gap:6px;min-width:0}.ihabdevteam-core-scope .form-date-row>div{min-width:90px}.ihabdevteam-core-scope .form-date-row--ymd>div:first-child{flex:3}.ihabdevteam-core-scope .form-date-row--ymd>div:nth-child(2),.ihabdevteam-core-scope .form-date-row--ymd>div:nth-child(3){flex:2}.ihabdevteam-core-scope .form-date-row--hm>div{flex:1}.ihabdevteam-core-scope .form-date-row--gap-8{gap:8px}@media (max-width:360px){.ihabdevteam-core-scope .form-date-row--ymd{flex-wrap:wrap}.ihabdevteam-core-scope .form-date-row--ymd>div:first-child{flex:1 0 100%}}.ihabdevteam-core-scope .form-field-error{color:var(--color-error);font-size:13px;margin-bottom:8px;padding:6px 0}.ihabdevteam-core-scope .confirm-popup__message{margin:0 auto;max-width:100%;padding:8px 0;text-align:left;width:-moz-fit-content;width:fit-content}.ihabdevteam-core-scope .confirm-popup .popup-content{padding-top:40px}.ihabdevteam-core-scope .confirm-popup .popup-content__inner{padding-bottom:40px}.ihabdevteam-core-scope .confirm-popup--has-top .popup-content{padding-top:var(--spacing-l)}.ihabdevteam-core-scope .confirm-popup .panel+.confirm-popup__message{margin-top:16px}.ihabdevteam-core-scope .confirm-popup__top{align-items:center;display:flex;flex-direction:column;gap:var(--spacing-m);margin-bottom:20px}.ihabdevteam-core-scope .confirm-popup__top>*{max-width:100%}.ihabdevteam-core-scope .word-table__scaler{overflow:clip;overflow-clip-margin:32px;width:100%}.ihabdevteam-core-scope .word-table{--print-margin:57px;background:#fbfdff;border:1px solid var(--color-whiteLine);box-shadow:var(--shadow-dropdown);box-sizing:border-box;padding:57px;padding:var(--print-margin)}.ihabdevteam-core-scope .word-table-block__content{box-sizing:border-box;display:grid;height:100%;position:relative;width:100%}.ihabdevteam-core-scope .word-table__page-number{bottom:8px;color:var(--color-gray);pointer-events:none;position:absolute;z-index:2}.ihabdevteam-core-scope .word-table__page-number--left{left:12px}.ihabdevteam-core-scope .word-table__page-number--right{right:12px}.ihabdevteam-core-scope .word-table__page-number--center{left:50%;transform:translateX(-50%)}.ihabdevteam-core-scope .word-table-block__content--cut-show{background:var(--color-whiteLine);gap:1px;print-color-adjust:exact;-webkit-print-color-adjust:exact}.ihabdevteam-core-scope .word-table-block__content--outline{position:relative}.ihabdevteam-core-scope .word-table-block__content--outline:after{border:1px solid var(--color-whiteLine);content:"";inset:0;pointer-events:none;position:absolute;z-index:1}.ihabdevteam-core-scope .word-table-block__content--cut-corner .word-table-block__card{background:linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 0 /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 0 /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 0 /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 0 /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 100% /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 100% /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 100% /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 100% /1px 8px no-repeat,#fbfdff;print-color-adjust:exact;-webkit-print-color-adjust:exact}.ihabdevteam-core-scope .word-table-block__card{background:#fbfdff;display:flex;min-height:0;overflow:hidden;position:relative;transition:box-shadow .15s}.ihabdevteam-core-scope .word-table-block__card--filler{align-items:center;justify-content:center}.ihabdevteam-core-scope .word-table-block__card:not(.word-table-block__card--filler):hover{box-shadow:var(--shadow-dropdown);z-index:1}.ihabdevteam-core-scope .word-table-block__card--draggable{cursor:grab}.ihabdevteam-core-scope .word-table-block__card--draggable:active{cursor:grabbing}.ihabdevteam-core-scope .word-table-block__card--drag-over{outline:2px solid var(--color-main);outline-offset:-2px;z-index:2}.ihabdevteam-core-scope .word-table-block__card--dragging{box-shadow:var(--shadow-dropdown);opacity:.6;touch-action:none;transform:scale(.97);transition:transform .12s,opacity .12s;z-index:3}.ihabdevteam-core-scope .word-table-block__card-handle{cursor:grab;left:20px;opacity:0;position:absolute;top:20px;transition:opacity .15s;z-index:1}.ihabdevteam-core-scope .word-table-block__card-handle:focus-visible,.ihabdevteam-core-scope .word-table-block__card-handle:focus-within,.ihabdevteam-core-scope .word-table-block__card:focus-within .word-table-block__card-handle,.ihabdevteam-core-scope .word-table-block__card:hover .word-table-block__card-handle{opacity:1}.ihabdevteam-core-scope .word-table-block__card-actions,.ihabdevteam-core-scope .word-table-block__card-close{opacity:0;position:absolute;right:20px;top:20px;transition:opacity .15s;z-index:1}.ihabdevteam-core-scope .word-table-block__card-actions{align-items:center;display:flex;gap:var(--spacing-xs)}.ihabdevteam-core-scope .word-table-block__card-actions .word-table-block__card-close{opacity:1;position:static;right:auto;top:auto}.ihabdevteam-core-scope .word-table-block__card-actions:focus-within,.ihabdevteam-core-scope .word-table-block__card-close:focus-visible,.ihabdevteam-core-scope .word-table-block__card-close:focus-within,.ihabdevteam-core-scope .word-table-block__card:focus-within .word-table-block__card-actions,.ihabdevteam-core-scope .word-table-block__card:focus-within .word-table-block__card-close,.ihabdevteam-core-scope .word-table-block__card:hover .word-table-block__card-actions,.ihabdevteam-core-scope .word-table-block__card:hover .word-table-block__card-close{opacity:1}.ihabdevteam-core-scope .word-table-block__pair-divider{align-self:center;background:var(--color-whiteLine);display:none;flex-shrink:0;height:20%;print-color-adjust:exact;-webkit-print-color-adjust:exact;width:1px}.ihabdevteam-core-scope .word-table-block__content--div-line .word-table-block__pair-divider{display:block}.ihabdevteam-core-scope .word-table-block__edit-cell{align-items:stretch;background:#fbfdff;display:flex;flex-direction:row;min-height:0;overflow:hidden;position:relative;transition:box-shadow .15s}.ihabdevteam-core-scope .word-table-block__edit-cell--filled:hover{box-shadow:var(--shadow-dropdown);z-index:1}.ihabdevteam-core-scope .word-table-block__edit-cell--filled:focus-within .word-table-block__card-close,.ihabdevteam-core-scope .word-table-block__edit-cell--filled:hover .word-table-block__card-close{opacity:1}.ihabdevteam-core-scope .word-table-block__edit-cell--empty{align-items:center;justify-content:center}.ihabdevteam-core-scope .word-table-block__edit-cell--active{background:rgba(73,156,223,.04);background:rgba(var(--color-main-rgb,73,156,223),.04);outline:2px solid var(--color-main);outline-offset:-2px}.ihabdevteam-core-scope .word-table-block__content--cut-corner .word-table-block__edit-cell{background:linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 0 /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 0 /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 0 /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 0 /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 100% /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 100% /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 100% /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 100% /1px 8px no-repeat,#fbfdff;print-color-adjust:exact;-webkit-print-color-adjust:exact}.ihabdevteam-core-scope .word-table-cell{align-items:center;display:flex;flex:1;justify-content:center;min-height:0;min-width:0;overflow:hidden;position:relative}.ihabdevteam-core-scope .word-table-cell__inner{align-items:center;box-sizing:border-box;display:flex;flex-direction:column;height:380px;justify-content:center;transform-origin:center center;width:280px}.ihabdevteam-core-scope .word-table-cell--with-image .word-table-cell__inner{padding-bottom:48px}.ihabdevteam-core-scope .word-table-cell__word{color:var(--color-black);text-align:center;white-space:nowrap}.ihabdevteam-core-scope .word-table-cell__sub{color:var(--color-gray);text-align:center;white-space:nowrap}.ihabdevteam-core-scope .word-table-cell__colloquial{color:var(--color-lightGray);text-align:center;white-space:nowrap}.ihabdevteam-core-scope .word-table-cell__play-button{left:20px;opacity:0;position:absolute;top:20px;transition:opacity .15s;z-index:1}.ihabdevteam-core-scope .word-table-block__card:hover .word-table-cell__play-button,.ihabdevteam-core-scope .word-table-block__edit-cell:focus-within .word-table-cell__play-button,.ihabdevteam-core-scope .word-table-block__edit-cell:hover .word-table-cell__play-button,.ihabdevteam-core-scope .word-table-cell__play-button:focus-visible,.ihabdevteam-core-scope .word-table-cell__play-button:focus-within{opacity:1}.ihabdevteam-core-scope .word-table-cell__info-button{left:20px;opacity:0;position:absolute;top:60px;transition:opacity .15s;z-index:1}.ihabdevteam-core-scope .word-table-block__card:hover .word-table-cell__info-button,.ihabdevteam-core-scope .word-table-block__edit-cell:focus-within .word-table-cell__info-button,.ihabdevteam-core-scope .word-table-block__edit-cell:hover .word-table-cell__info-button,.ihabdevteam-core-scope .word-table-cell__info-button:focus-visible,.ihabdevteam-core-scope .word-table-cell__info-button:focus-within{opacity:1}@media (hover:none){.ihabdevteam-core-scope .word-table-block__card-actions,.ihabdevteam-core-scope .word-table-block__card-close,.ihabdevteam-core-scope .word-table-block__card-handle,.ihabdevteam-core-scope .word-table-cell__info-button,.ihabdevteam-core-scope .word-table-cell__play-button{opacity:1}}@media (prefers-reduced-motion:reduce){.ihabdevteam-core-scope .word-table-block__card,.ihabdevteam-core-scope .word-table-block__card-close,.ihabdevteam-core-scope .word-table-block__card-handle{transition:none}.ihabdevteam-core-scope .word-table-block__card--dragging{transform:none;transition:none}}.ihabdevteam-core-scope .word-table-cell__image-wrap{background:var(--color-deepWhite);border-radius:var(--radius-card);flex-shrink:0;height:240px;overflow:hidden;position:relative;width:240px}.ihabdevteam-core-scope .word-table-cell__image{display:block;height:100%;-o-object-fit:cover;object-fit:cover;transition:opacity .2s;width:100%}.ihabdevteam-core-scope .word-table-cell__spinner{align-items:center;display:flex;inset:0;justify-content:center;position:absolute}.ihabdevteam-core-scope .word-table-cell__spinner:after{animation:wordTableCell_spin .7s linear infinite;border:3px solid #fbfdff;border-radius:50%;border-top:3px solid var(--color-white,#fbfdff);border:3px solid var(--color-white,#fbfdff);border-top-color:var(--color-main,var(--color-main));content:"";height:32px;width:32px}@keyframes wordTableCell_spin{to{transform:rotate(1turn)}}@media print{@page{margin:0}.ihabdevteam-core-scope body *{visibility:hidden}.ihabdevteam-core-scope .word-table,.ihabdevteam-core-scope .word-table *{visibility:visible}
|
|
5
|
+
덮어써짐(오늘 표시가 무의미해짐). 실제 경합 확인됨. */.ihabdevteam-core-scope .calendar-cell.today .calendar-cell__number{align-items:center;background:var(--color-main);border-radius:50%;color:#fff!important;display:flex;height:24px;justify-content:center;width:24px}.ihabdevteam-core-scope .calendar-cell__number{align-items:center;color:var(--color-darkGray);display:flex;font-weight:600;height:24px;justify-content:center;margin-bottom:6px;width:24px}.ihabdevteam-core-scope .calendar-cell:nth-child(7n+8) .calendar-cell__number{color:var(--color-error)}.ihabdevteam-core-scope .calendar-cell:nth-child(7n+14) .calendar-cell__number{color:var(--color-main)}.ihabdevteam-core-scope .calendar-cell__badges{display:flex;flex-direction:column;gap:4px}.ihabdevteam-core-scope .calendar-cell__visit-count{align-items:center;color:var(--color-main);display:none;gap:4px}.ihabdevteam-core-scope .calendar-cell__visit-dot{background:currentColor;border-radius:50%;flex-shrink:0;height:6px;width:6px}@container (max-width: 96px){.ihabdevteam-core-scope .calendar-cell__badges{display:none}.ihabdevteam-core-scope .calendar-cell__visit-count{display:inline-flex}}.ihabdevteam-core-scope .calendar-visit-badge{align-items:center;background:var(--color-main-a10);border-radius:var(--radius-xs);box-sizing:border-box;color:var(--color-main);display:flex;gap:6px;min-height:28px;overflow:hidden;padding:0 8px}.ihabdevteam-core-scope .calendar-visit-badge__time{flex-shrink:0;font-weight:400;opacity:.7}.ihabdevteam-core-scope .calendar-visit-badge__name{flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.ihabdevteam-core-scope .calendar-visit-badge--scheduled{background:var(--color-sub-a10);color:var(--color-sub)}.ihabdevteam-core-scope .calendar-visit-badge--no-visit{background:color-mix(in srgb,var(--color-disabled) 15%,#fff);color:var(--color-disabled)}.ihabdevteam-core-scope .calendar-visit-badge__no-visit{background:var(--color-disabled);border-radius:var(--radius-xs);color:#fff;flex-shrink:0;line-height:1.4;padding:1px 5px}.ihabdevteam-core-scope .calendar-visit-badge--clickable{cursor:pointer;transition:background .12s,color .12s,border-color .12s}.ihabdevteam-core-scope .calendar-visit-badge--clickable:hover{background:var(--color-main);border-color:transparent;color:#fff}.ihabdevteam-core-scope .calendar-visit-badge--scheduled.calendar-visit-badge--clickable:hover{background:var(--color-sub);color:#fff}.ihabdevteam-core-scope .calendar-visit-badge--no-visit.calendar-visit-badge--clickable:hover{background:var(--color-disabled);color:#fff}.ihabdevteam-core-scope .calendar-visit-badge--draggable{cursor:grab}.ihabdevteam-core-scope .calendar-visit-badge--draggable:active{cursor:grabbing;opacity:.5}.ihabdevteam-core-scope .calendar-nav__button{align-items:center;display:inline-flex;justify-content:center}.ihabdevteam-core-scope .calendar-nav__button-icon{display:block}.ihabdevteam-core-scope .calendar-cell--clickable{cursor:pointer}.ihabdevteam-core-scope .calendar-cell--clickable:hover{background:var(--color-darkWhite)}.ihabdevteam-core-scope .calendar-cell--clickable:focus-visible{outline:2px solid var(--color-main);outline-offset:-2px}.ihabdevteam-core-scope .calendar-cell.drag-over{background:var(--color-main-a10);outline:1px solid var(--color-main);outline-offset:-1px}@media (max-width:767px){.ihabdevteam-core-scope .calendar-nav{flex-wrap:wrap}.ihabdevteam-core-scope .calendar-nav__legend{justify-content:center;position:static;width:100%}.ihabdevteam-core-scope .calendar-day-header{min-width:0}.ihabdevteam-core-scope .calendar-cell{min-height:72px;padding:4px}}.ihabdevteam-core-scope .section{display:flex;flex-direction:column;text-align:left;width:100%}.ihabdevteam-core-scope .section--page{gap:var(--spacing-m);padding-bottom:var(--spacing-page)}.ihabdevteam-core-scope .section--pagePopup{gap:var(--spacing-s);padding-bottom:var(--spacing-page)}.ihabdevteam-core-scope .section--popup{gap:var(--spacing-xs);padding-bottom:var(--spacing-page)}.ihabdevteam-core-scope .section--in-grid,.ihabdevteam-core-scope .section:last-child{padding-bottom:0}.ihabdevteam-core-scope .section__header{align-items:center;display:flex;justify-content:space-between;width:100%}.ihabdevteam-core-scope .section__title-row{align-items:flex-start;display:flex;flex:1;gap:var(--spacing-s);min-width:0}.ihabdevteam-core-scope .section__icon{align-items:center;background:var(--t-item-bg,var(--color-deepWhite));color:var(--t-item-fg,var(--color-main));display:flex;flex-shrink:0;height:20px;justify-content:center;margin-top:5px;width:20px}.ihabdevteam-core-scope .section__title-group{display:flex;flex-direction:column;gap:4px;min-width:0}.ihabdevteam-core-scope .section__title{color:var(--color-black);margin:0}.ihabdevteam-core-scope .section__disc{color:var(--color-gray);margin:0}.ihabdevteam-core-scope .section__action{flex-shrink:0}@media (max-width:767px){.ihabdevteam-core-scope .section__header{align-items:flex-start;flex-direction:column;gap:var(--spacing-xs)}}.ihabdevteam-core-scope .training-blocks{align-items:flex-start;display:flex;flex-direction:column}.ihabdevteam-core-scope .training-block{border-radius:var(--radius-card);width:100%}.ihabdevteam-core-scope .training-list{align-items:flex-start;display:flex;flex-wrap:wrap;gap:10px}@media (max-width:767px){.ihabdevteam-core-scope .training-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.ihabdevteam-core-scope .training-list>*{min-width:0}.ihabdevteam-core-scope .training-list>*>.training-block-button,.ihabdevteam-core-scope .training-list>.training-block-button{width:100%}}.ihabdevteam-core-scope .training-block__more{display:flex;justify-content:center;margin-top:var(--spacing-l)}.ihabdevteam-core-scope .training-blocks--top-spaced{margin-top:18px}.ihabdevteam-core-scope .training-word-card{background:var(--color-white);border-radius:var(--radius-m);display:flex;flex:none;flex-direction:column;height:260px;overflow:visible;perspective:900px;position:relative;width:200px}.ihabdevteam-core-scope .training-word-card--disabled{cursor:default}.ihabdevteam-core-scope .training-word-card__flipper{border-radius:var(--radius-m);box-shadow:var(--shadow-card);display:flex;flex:1;flex-direction:column;position:relative;transform-style:preserve-3d;transition:transform .55s cubic-bezier(.4,0,.2,1);will-change:transform}.ihabdevteam-core-scope .training-word-card--flipped .training-word-card__flipper{transform:rotateY(180deg)}.ihabdevteam-core-scope .training-word-card__front{box-sizing:border-box;flex:1;flex-direction:column;gap:var(--spacing-s);min-height:0;padding:10px var(--spacing-m)}.ihabdevteam-core-scope .training-word-card__back,.ihabdevteam-core-scope .training-word-card__front{align-items:center;backface-visibility:hidden;-webkit-backface-visibility:hidden;display:flex;justify-content:center}.ihabdevteam-core-scope .training-word-card__back{background:#f3f5f6;background:var(--color-deepWhite,#f3f5f6);border-radius:var(--radius-m);inset:0;position:absolute;transform:rotateY(180deg)}.ihabdevteam-core-scope .training-word-card__back:before{border:8px solid var(--color-darkWhite);border-radius:var(--radius-m);content:"";inset:0;pointer-events:none;position:absolute}.ihabdevteam-core-scope .training-word-card__disabled-symbol{filter:invert(93%) sepia(6%) saturate(247%) hue-rotate(163deg) brightness(101%) contrast(93%);height:52px;opacity:.6;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:52px}.ihabdevteam-core-scope .training-word-card__selected-badge{position:absolute;right:0;top:0;transform:translate(12%,-12%);z-index:3}.ihabdevteam-core-scope .training-word-card__selected-badge .circle-badge{border:2px solid var(--color-pureWhite)}.ihabdevteam-core-scope .training-word-card--selectable{cursor:pointer;outline:1px solid transparent;overflow:visible;transition:box-shadow .15s,outline-color .15s}.ihabdevteam-core-scope .training-word-card--selectable:not(.training-word-card--disabled):hover{box-shadow:0 4px 16px rgba(9,30,34,.12);outline:1px solid var(--color-main)}.ihabdevteam-core-scope .training-word-card--selectable.training-word-card--selected:hover,.ihabdevteam-core-scope .training-word-card--selected{box-shadow:none;outline:2px solid #4f6ef7;outline:2px solid var(--color-main,#4f6ef7)}.ihabdevteam-core-scope .training-word-card__image-wrap{aspect-ratio:4/3;background:#f3f5f6;border-radius:var(--radius-s);flex-shrink:0;overflow:hidden;padding:0;position:relative;width:100%}.ihabdevteam-core-scope .training-word-card__image{-webkit-user-drag:none;display:block;height:100%;-o-object-fit:cover;object-fit:cover;pointer-events:none;transition:opacity .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.ihabdevteam-core-scope .training-word-card__placeholder{background:linear-gradient(160deg,#f0f2f4,#e4e8ea);height:100%;width:100%}.ihabdevteam-core-scope .training-word-card__text-face{align-items:center;color:#0b2b35;color:var(--color-black,#0b2b35);display:flex;font-size:48px;font-weight:700;height:100%;justify-content:center;line-height:1;text-align:center;width:100%;word-break:keep-all}.ihabdevteam-core-scope .training-word-card__spinner{align-items:center;display:flex;inset:0;justify-content:center;position:absolute;z-index:1}.ihabdevteam-core-scope .training-word-card__spinner:after{animation:twCard__spin .7s linear infinite;border:3px solid rgba(0,0,0,.1);border-radius:50%;border-top:3px solid var(--color-main,#4f6ef7);content:"";height:28px;width:28px}@keyframes twCard__spin{to{transform:rotate(1turn)}}.ihabdevteam-core-scope .training-word-card__body{align-items:center;display:flex;flex-direction:column;gap:3px;padding:0}.ihabdevteam-core-scope .training-word-card__word{color:#0b2b35;color:var(--color-black,#0b2b35);font-size:22px;font-weight:700;line-height:1.25;text-align:center;word-break:keep-all}.ihabdevteam-core-scope .training-word-card__pronunciation{color:#70858a;color:var(--color-gray,#70858a);font-size:13px;font-weight:500;line-height:1.4;text-align:center}.ihabdevteam-core-scope .training-word-card__colloquial{color:#a0b0b5;color:var(--color-lightGray,#a0b0b5);line-height:1.4;text-align:center}.ihabdevteam-core-scope .training-word-card__bottom{display:flex;flex-shrink:0;justify-content:center}@media (max-width:720px){.ihabdevteam-core-scope .training-word-card{border-radius:var(--radius-card)}.ihabdevteam-core-scope .training-word-card__word{font-size:18px}.ihabdevteam-core-scope .training-word-card__body{gap:2px}.ihabdevteam-core-scope .training-word-card__front{gap:var(--spacing-xs)}.ihabdevteam-core-scope .training-word-card__back,.ihabdevteam-core-scope .training-word-card__back:before{border-radius:var(--radius-card)}}@media (max-width:767px){.ihabdevteam-core-scope .training-word-card{border-radius:var(--radius-card);height:auto;width:100%}.ihabdevteam-core-scope .training-word-card__flipper{border-radius:var(--radius-card);box-shadow:0 2px 8px rgba(0,0,0,.03)}.ihabdevteam-core-scope .training-word-card__front{padding:var(--spacing-s)}.ihabdevteam-core-scope .training-word-card__back:before{border-width:4px}.ihabdevteam-core-scope .training-word-card__image-wrap{aspect-ratio:1/1}.ihabdevteam-core-scope .training-word-card__word{font-size:14px}.ihabdevteam-core-scope .training-word-card__text-face{font-size:32px}.ihabdevteam-core-scope .training-word-card__pronunciation{font-size:11px}.ihabdevteam-core-scope .training-word-card__body{gap:2px}.ihabdevteam-core-scope .training-word-card__front{gap:4px}}.ihabdevteam-core-scope .popup{align-items:center;background:rgba(16,24,32,.6);background:var(--color-popupBlock,rgba(16,24,32,.6));display:flex;inset:0;justify-content:center;position:fixed;z-index:var(--z-modal)}.ihabdevteam-core-scope .popup.popup--inline{align-items:stretch;background:transparent;justify-content:stretch;position:relative;z-index:5}.ihabdevteam-core-scope .popup.popup--inline .popup-panel{width:100%}.ihabdevteam-core-scope .popup-panel{background:var(--color-white);border-radius:28px;box-shadow:var(--shadow-popup);display:flex;flex-direction:column;max-height:calc(100% - 60px);max-width:820px;overflow:hidden;position:relative;width:calc(100% - 40px)}.ihabdevteam-core-scope .popup-panel--small{max-width:480px}.ihabdevteam-core-scope .popup-panel--medium{max-width:680px}.ihabdevteam-core-scope .popup-panel--large{max-width:1080px}.ihabdevteam-core-scope .popup-panel--xlarge{max-width:1320px;width:calc(100% - 80px)}.ihabdevteam-core-scope .popup-panel--has-height{height:var(--popup-height)}.ihabdevteam-core-scope .popup-panel--fill-body .popup-content{overflow:hidden}.ihabdevteam-core-scope .popup-panel--fill-body .popup-content__inner{display:flex;flex-direction:column;height:100%;min-height:0}.ihabdevteam-core-scope .popup-panel--fit{max-width:min(1140px,calc(100% - 40px));min-width:min(480px,calc(100% - 40px));width:-moz-fit-content;width:fit-content}.ihabdevteam-core-scope .popup.popup--below-page-popup:not(.popup--inline){z-index:calc(var(--z-page-popup) - 1)}.ihabdevteam-core-scope .popup-close-float{align-items:center;display:flex;gap:var(--spacing-xs);position:absolute;right:8px;top:8px;z-index:1}.ihabdevteam-core-scope .popup-title{display:block;flex-shrink:0;padding:var(--spacing-l);text-align:center}.ihabdevteam-core-scope .popup-header{align-items:center;display:flex;flex-shrink:0;flex-wrap:wrap;gap:var(--spacing-s);padding:var(--spacing-l) var(--spacing-l) 0}.ihabdevteam-core-scope .popup-header--with-subtitle{align-items:flex-start}.ihabdevteam-core-scope .popup-header-main{display:flex;flex:1 1 220px;flex-direction:column;gap:4px;min-width:0}.ihabdevteam-core-scope .popup-title--left{flex:1;min-width:0;padding:0;text-align:left}.ihabdevteam-core-scope .popup-header-main .popup-title--left{flex:none}.ihabdevteam-core-scope .popup-header .popup-title--left{margin:0}.ihabdevteam-core-scope .popup-subtitle{color:var(--color-gray);margin:0;text-align:left}.ihabdevteam-core-scope .popup-header-segment{flex-shrink:0}.ihabdevteam-core-scope .popup-header-actions{align-items:center;display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end;margin-left:auto;min-width:0}.ihabdevteam-core-scope .popup-content{-webkit-overflow-scrolling:touch;display:flex;flex:1;flex-direction:column;min-height:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:20px 20px 0;touch-action:pan-y}.ihabdevteam-core-scope .popup-content__inner{padding-bottom:20px}.ihabdevteam-core-scope .popup-footer{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:center;padding:0 20px 20px}.ihabdevteam-core-scope .popup-footer--fill>*{flex:1}.ihabdevteam-core-scope .popup-footer--between{justify-content:space-between;padding-left:var(--spacing-xl);padding-right:var(--spacing-xl)}.ihabdevteam-core-scope .popup-footer--buttons>*{flex:1 1 auto;max-width:200px;min-width:0}.ihabdevteam-core-scope .popup-footer--bar{flex-wrap:wrap;gap:var(--spacing-l);justify-content:space-between}.ihabdevteam-core-scope .popup-footer__start{align-items:center;display:flex;flex-wrap:wrap;gap:var(--spacing-xs);min-width:0}.ihabdevteam-core-scope .popup-footer__end{align-items:center;display:flex;flex-wrap:wrap;gap:var(--spacing-s);justify-content:flex-end;margin-left:auto;min-width:0}.ihabdevteam-core-scope .popup-footer__end>*,.ihabdevteam-core-scope .popup-footer__start>*{min-width:0}.ihabdevteam-core-scope .popup--closing{opacity:0;transition:opacity .26s ease}@media (max-width:767px){.ihabdevteam-core-scope .popup-panel{max-height:calc(100% - 132px - env(safe-area-inset-bottom))}}.ihabdevteam-core-scope .form-date-row{display:flex;flex:1;gap:6px;min-width:0}.ihabdevteam-core-scope .form-date-row>div{min-width:90px}.ihabdevteam-core-scope .form-date-row--ymd>div:first-child{flex:3}.ihabdevteam-core-scope .form-date-row--ymd>div:nth-child(2),.ihabdevteam-core-scope .form-date-row--ymd>div:nth-child(3){flex:2}.ihabdevteam-core-scope .form-date-row--hm>div{flex:1}.ihabdevteam-core-scope .form-date-row--gap-8{gap:8px}@media (max-width:360px){.ihabdevteam-core-scope .form-date-row--ymd{flex-wrap:wrap}.ihabdevteam-core-scope .form-date-row--ymd>div:first-child{flex:1 0 100%}}.ihabdevteam-core-scope .form-field-error{color:var(--color-error);font-size:13px;margin-bottom:8px;padding:6px 0}.ihabdevteam-core-scope .confirm-popup__message{margin:0 auto;max-width:100%;padding:8px 0;text-align:left;width:-moz-fit-content;width:fit-content}.ihabdevteam-core-scope .confirm-popup .popup-content{padding-top:40px}.ihabdevteam-core-scope .confirm-popup .popup-content__inner{padding-bottom:40px}.ihabdevteam-core-scope .confirm-popup--has-top .popup-content{padding-top:var(--spacing-l)}.ihabdevteam-core-scope .confirm-popup .panel+.confirm-popup__message{margin-top:16px}.ihabdevteam-core-scope .confirm-popup__top{align-items:center;display:flex;flex-direction:column;gap:var(--spacing-m);margin-bottom:20px}.ihabdevteam-core-scope .confirm-popup__top>*{max-width:100%}.ihabdevteam-core-scope .word-table__scaler{overflow:clip;overflow-clip-margin:32px;width:100%}.ihabdevteam-core-scope .word-table{--print-margin:57px;background:#fbfdff;border:1px solid var(--color-whiteLine);box-shadow:var(--shadow-dropdown);box-sizing:border-box;padding:57px;padding:var(--print-margin)}.ihabdevteam-core-scope .word-table-block__content{box-sizing:border-box;display:grid;height:100%;position:relative;width:100%}.ihabdevteam-core-scope .word-table-block__content--page-number{padding-bottom:28px}.ihabdevteam-core-scope .word-table-block__content--page-number.word-table-block__content--cut-show{background-clip:content-box}.ihabdevteam-core-scope .word-table-block__content--page-number.word-table-block__content--outline:after{bottom:28px}.ihabdevteam-core-scope .word-table__page-number{bottom:4px;color:var(--color-gray);pointer-events:none;position:absolute;z-index:2}.ihabdevteam-core-scope .word-table__page-number--left{left:12px}.ihabdevteam-core-scope .word-table__page-number--right{right:12px}.ihabdevteam-core-scope .word-table__page-number--center{left:50%;transform:translateX(-50%)}.ihabdevteam-core-scope .word-table-block__content--cut-show{background:var(--color-whiteLine);gap:1px;print-color-adjust:exact;-webkit-print-color-adjust:exact}.ihabdevteam-core-scope .word-table-block__content--outline{position:relative}.ihabdevteam-core-scope .word-table-block__content--outline:after{border:1px solid var(--color-whiteLine);content:"";inset:0;pointer-events:none;position:absolute;z-index:1}.ihabdevteam-core-scope .word-table-block__content--cut-corner .word-table-block__card{background:linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 0 /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 0 /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 0 /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 0 /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 100% /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 100% /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 100% /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 100% /1px 8px no-repeat,#fbfdff;print-color-adjust:exact;-webkit-print-color-adjust:exact}.ihabdevteam-core-scope .word-table-block__card{background:#fbfdff;display:flex;min-height:0;overflow:hidden;position:relative;transition:box-shadow .15s}.ihabdevteam-core-scope .word-table-block__card--filler{align-items:center;justify-content:center}.ihabdevteam-core-scope .word-table-block__card:not(.word-table-block__card--filler):hover{box-shadow:var(--shadow-dropdown);z-index:1}.ihabdevteam-core-scope .word-table-block__card--draggable{cursor:grab}.ihabdevteam-core-scope .word-table-block__card--draggable:active{cursor:grabbing}.ihabdevteam-core-scope .word-table-block__card--drag-over{outline:2px solid var(--color-main);outline-offset:-2px;z-index:2}.ihabdevteam-core-scope .word-table-block__card--dragging{box-shadow:var(--shadow-dropdown);opacity:.6;touch-action:none;transform:scale(.97);transition:transform .12s,opacity .12s;z-index:3}.ihabdevteam-core-scope .word-table-block__card-handle{cursor:grab;left:20px;opacity:0;position:absolute;top:20px;transition:opacity .15s;z-index:1}.ihabdevteam-core-scope .word-table-block__card-handle:focus-visible,.ihabdevteam-core-scope .word-table-block__card-handle:focus-within,.ihabdevteam-core-scope .word-table-block__card:focus-within .word-table-block__card-handle,.ihabdevteam-core-scope .word-table-block__card:hover .word-table-block__card-handle{opacity:1}.ihabdevteam-core-scope .word-table-block__card-actions,.ihabdevteam-core-scope .word-table-block__card-close{opacity:0;position:absolute;right:20px;top:20px;transition:opacity .15s;z-index:1}.ihabdevteam-core-scope .word-table-block__card-actions{align-items:center;display:flex;gap:var(--spacing-xs)}.ihabdevteam-core-scope .word-table-block__card-actions .word-table-block__card-close{opacity:1;position:static;right:auto;top:auto}.ihabdevteam-core-scope .word-table-block__card-actions:focus-within,.ihabdevteam-core-scope .word-table-block__card-close:focus-visible,.ihabdevteam-core-scope .word-table-block__card-close:focus-within,.ihabdevteam-core-scope .word-table-block__card:focus-within .word-table-block__card-actions,.ihabdevteam-core-scope .word-table-block__card:focus-within .word-table-block__card-close,.ihabdevteam-core-scope .word-table-block__card:hover .word-table-block__card-actions,.ihabdevteam-core-scope .word-table-block__card:hover .word-table-block__card-close{opacity:1}.ihabdevteam-core-scope .word-table-block__pair-divider{align-self:center;background:var(--color-whiteLine);display:none;flex-shrink:0;height:20%;print-color-adjust:exact;-webkit-print-color-adjust:exact;width:1px}.ihabdevteam-core-scope .word-table-block__content--div-line .word-table-block__pair-divider{display:block}.ihabdevteam-core-scope .word-table-block__edit-cell{align-items:stretch;background:#fbfdff;display:flex;flex-direction:row;min-height:0;overflow:hidden;position:relative;transition:box-shadow .15s}.ihabdevteam-core-scope .word-table-block__edit-cell--filled:hover{box-shadow:var(--shadow-dropdown);z-index:1}.ihabdevteam-core-scope .word-table-block__edit-cell--filled:focus-within .word-table-block__card-close,.ihabdevteam-core-scope .word-table-block__edit-cell--filled:hover .word-table-block__card-close{opacity:1}.ihabdevteam-core-scope .word-table-block__edit-cell--empty{align-items:center;justify-content:center}.ihabdevteam-core-scope .word-table-block__edit-cell--active{background:rgba(73,156,223,.04);background:rgba(var(--color-main-rgb,73,156,223),.04);outline:2px solid var(--color-main);outline-offset:-2px}.ihabdevteam-core-scope .word-table-block__content--cut-corner .word-table-block__edit-cell{background:linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 0 /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 0 /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 0 /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 0 /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 100% /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 0 100% /1px 8px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 100% /8px 1px no-repeat,linear-gradient(var(--color-whiteLine),var(--color-whiteLine)) 100% 100% /1px 8px no-repeat,#fbfdff;print-color-adjust:exact;-webkit-print-color-adjust:exact}.ihabdevteam-core-scope .word-table-cell{align-items:center;display:flex;flex:1;justify-content:center;min-height:0;min-width:0;overflow:hidden;position:relative}.ihabdevteam-core-scope .word-table-cell__inner{align-items:center;box-sizing:border-box;display:flex;flex-direction:column;height:380px;justify-content:center;transform-origin:center center;width:280px}.ihabdevteam-core-scope .word-table-cell--with-image .word-table-cell__inner{padding-bottom:48px}.ihabdevteam-core-scope .word-table-cell__word{color:var(--color-black);text-align:center;white-space:nowrap}.ihabdevteam-core-scope .word-table-cell__sub{color:var(--color-gray);text-align:center;white-space:nowrap}.ihabdevteam-core-scope .word-table-cell__colloquial{color:var(--color-lightGray);text-align:center;white-space:nowrap}.ihabdevteam-core-scope .word-table-cell__play-button{left:20px;opacity:0;position:absolute;top:20px;transition:opacity .15s;z-index:1}.ihabdevteam-core-scope .word-table-block__card:hover .word-table-cell__play-button,.ihabdevteam-core-scope .word-table-block__edit-cell:focus-within .word-table-cell__play-button,.ihabdevteam-core-scope .word-table-block__edit-cell:hover .word-table-cell__play-button,.ihabdevteam-core-scope .word-table-cell__play-button:focus-visible,.ihabdevteam-core-scope .word-table-cell__play-button:focus-within{opacity:1}.ihabdevteam-core-scope .word-table-cell__info-button{left:20px;opacity:0;position:absolute;top:60px;transition:opacity .15s;z-index:1}.ihabdevteam-core-scope .word-table-block__card:hover .word-table-cell__info-button,.ihabdevteam-core-scope .word-table-block__edit-cell:focus-within .word-table-cell__info-button,.ihabdevteam-core-scope .word-table-block__edit-cell:hover .word-table-cell__info-button,.ihabdevteam-core-scope .word-table-cell__info-button:focus-visible,.ihabdevteam-core-scope .word-table-cell__info-button:focus-within{opacity:1}@media (hover:none){.ihabdevteam-core-scope .word-table-block__card-actions,.ihabdevteam-core-scope .word-table-block__card-close,.ihabdevteam-core-scope .word-table-block__card-handle,.ihabdevteam-core-scope .word-table-cell__info-button,.ihabdevteam-core-scope .word-table-cell__play-button{opacity:1}}@media (prefers-reduced-motion:reduce){.ihabdevteam-core-scope .word-table-block__card,.ihabdevteam-core-scope .word-table-block__card-close,.ihabdevteam-core-scope .word-table-block__card-handle{transition:none}.ihabdevteam-core-scope .word-table-block__card--dragging{transform:none;transition:none}}.ihabdevteam-core-scope .word-table-cell__image-wrap{background:var(--color-deepWhite);border-radius:var(--radius-card);flex-shrink:0;height:240px;overflow:hidden;position:relative;width:240px}.ihabdevteam-core-scope .word-table-cell__image{display:block;height:100%;-o-object-fit:cover;object-fit:cover;transition:opacity .2s;width:100%}.ihabdevteam-core-scope .word-table-cell__spinner{align-items:center;display:flex;inset:0;justify-content:center;position:absolute}.ihabdevteam-core-scope .word-table-cell__spinner:after{animation:wordTableCell_spin .7s linear infinite;border:3px solid #fbfdff;border-radius:50%;border-top:3px solid var(--color-white,#fbfdff);border:3px solid var(--color-white,#fbfdff);border-top-color:var(--color-main,var(--color-main));content:"";height:32px;width:32px}@keyframes wordTableCell_spin{to{transform:rotate(1turn)}}@media print{@page{margin:0}.ihabdevteam-core-scope body *{visibility:hidden}.ihabdevteam-core-scope .word-table,.ihabdevteam-core-scope .word-table *{visibility:visible}
|
|
6
6
|
|
|
7
7
|
/* !important 필요: WordTable.tsx가 화면 표시용 scale/marginLeft를 인라인 style로
|
|
8
8
|
직접 적용하므로(스크린 축소 렌더), 인쇄 시 이를 무효화하려면 클래스 규칙에
|
package/dist/hooks.cjs.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
\uC2E0\uB8B0\uB97C \uC313\uACE0
|
|
3
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"},Ja={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"}}},Qa={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"}},Xa={answer:"\uC815\uB2F5",distractor:"\uC624\uB2F5"},eu={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"},tu={clearAriaLabel:"\uC785\uB825\uAC12 \uC9C0\uC6B0\uAE30"},nu={ariaLabel:"\uC120\uD0DD \uD0ED"},ou={ariaLabel:"\uD0ED"},ru={dragPrompt:"\uD30C\uC77C\uC744 \uC774\uACF3\uC5D0 \uB4DC\uB798\uADF8\uD558\uC5EC \uC5C5\uB85C\uB4DC",browseButton:"\uD30C\uC77C \uC120\uD0DD",removeAriaLabel:"{{name}} \uC81C\uAC70"},au={ariaLabel:"\uC0AC\uC6A9\uC790 \uC544\uBC14\uD0C0"},uu={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"}},iu={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"}},lu={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"}},su={manage:{unit:"\uAC74"}},cu={cancelLabel:"\uCDE8\uC18C"},du={steps:"\uC9C4\uD589 \uB2E8\uACC4 {{current}} / {{total}}"},Cu={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"},gu={resetColumns:"\uCE78 \uB108\uBE44 \uCD08\uAE30\uD654"},fu={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"},mu={ariaLabel:"\uBC30\uB108",dotAriaLabel:"{{count}}\uAC1C \uC911 {{index}}\uBC88\uC9F8 \uBC30\uB108"},pu={selectYearMonth:"\uC5F0\uC6D4 \uC120\uD0DD",chooseDate:"\uB0A0\uC9DC \uC120\uD0DD"},hu={previewRegion:"\uBCF4\uACE0\uC11C \uBBF8\uB9AC\uBCF4\uAE30 \u2014 \uC88C\uC6B0\uB85C \uAD74\uB824 \uBCFC \uC218 \uC788\uC2B5\uB2C8\uB2E4"},yu={description:"\uC124\uBA85",textbox:"\uBCF8\uBB38",training:"\uD6C8\uB828 \uC548\uB0B4",menu:"\uBA54\uB274"},bu={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"}},Su={clearSelection:"\uC120\uD0DD \uD574\uC81C"},wu={showResult:"{{type}} \uACB0\uACFC\uBCF4\uAE30"},Eu={selected:"\uC120\uD0DD\uB428",remove:"\uC81C\uAC70",exclude:"\uC81C\uC678",nthSelected:"{{n}}\uBC88\uC9F8 \uC120\uD0DD"},Au={loading:"\uBD88\uB7EC\uC624\uB294 \uC911\u2026"},vu={state:{active:"\uC18C\uB9AC \uB098\uB294 \uC911",played:"\uB4E4\uC74C",correct:"\uC815\uB2F5",wrong:"\uC624\uB2F5"}},Bu={ariaLabel:"\uC774\uB3D9 \uACBD\uB85C"},Du={empty:"\uB4F1\uB85D\uB41C \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."},Tu={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"},Nu={common:ga,calendar:fa,passCard:ma,searchField:pa,rating:ha,colorPicker:ya,dropdown:ba,accordion:Sa,header:wa,nav:Ea,settings:Aa,usage:va,account:Ba,help:Da,training:Ta,trainingSettings:Na,customers:_a,payment:Oa,coupons:La,visits:Ra,company:Pa,trainingType:Ma,myWordTraining:Ia,myWordTable:ka,keyWords:xa,wordTable:ja,wordSearch:Fa,wordPrint:$a,topic:Ha,accessLinkManager:Ga,login:Va,trainingPlanRun:Wa,device:Ya,manager:Ka,wordPairs:Ua,game:za,footer:qa,landing:Ja,date:Qa,trainingSetPage:Za,wordTrainingPreview:Xa,wordData:eu,textField:tu,segmentedControl:nu,tabs:ou,fileUpload:ru,avatar:au,myHomework:uu,trainingStatus:iu,store:lu,homework:su,inquiry:cu,progress:du,trainingMiss:Cu,table:gu,wordScore:fu,topBanner:mu,datePicker:pu,report:hu,tooltip:yu,phonemeProfile:bu,bulkBar:Su,debug:wu,badge:Eu,loader:Au,soundCompass:vu,breadcrumb:Bu,board:Du,promoBannerBg:Tu},_u={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",discardConfirm:{title:"Discard your changes?",body:"If you do not save, everything you have entered will be lost.",confirm:"Discard"},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."},Ou={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",visitCount:"{{count}} visit(s)"},Lu={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"}},Ru={clearAriaLabel:"Clear search"},Pu={starLabel:"Select star {{n}}",valueLabel:"{{value}} out of {{max}}",groupLabel:"Rating"},Mu={selected:"selected"},Iu={placeholder:"Select"},ku={collapse:"Collapse",expand:"Expand"},xu={biArea:"BI area",biSymbol:"BI symbol",logoMalgwi:"Malgwi logo",logoManager:"Malgwi Manager logo",menuOpen:"Open menu",utilMenu:"Utility menu",menuClose:"Close menu"},ju={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",feedback:"Report a bug",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}}"},Fu={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."}}},$u={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"}},Hu={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"}}},Gu={guide:{faq:{title:"FAQ",desc:"View all frequently asked questions"}}},Vu={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"}},Wu={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"},Yu={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"}},Ku={plan:{recommendedFor:"Recommended for",features:"Key Features",freePrice:"Free",contact:"Contact Us",tierFallback:"Plan",openPromo:"Launch offer"},products:{mgrEnterprise:{tier:{price:"Contact us"}}}},Uu={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"}},zu={unitVisit:"",periodAll:"All",showN:"Show {{n}}"},qu={subtitle:"Manage company and business information",editButton:"Edit Info",basicInfo:{title:"Basic Info"},contactInfo:{title:"Contact Info"}},Ju={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."}},Qu={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"},Xu={title:"Key Words",empty:"No key words available."},ei={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 \u25CB \xB7 \u25B3 \xB7 \u2715 under a cell to mark it. With a mouse, hover the cell to reveal them.",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"},reorder:{moved:"Moved to position {{n}} of {{total}}",handle:"Reorder {{word}} (Alt + arrow keys)",hint:"Alt + \u2190 \u2192 to reorder"}},ti={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}}"}},ni={clearAllSelection:"Clear All Selections",divLine:"Contrast Line",removePair:"Remove pair",removeWord:"Remove word"},oi={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"}},ri={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"}},ai={passwordPlaceholder:"Enter password"},ui={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"}},ii={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"}},li={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."]},si={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"}},ci={lead:`IHAB builds trust
|
|
4
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"},di={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"}}},Ci={timeHM:"{{hh}}:{{mm}}",timeH:"{{hh}}:{{mm}}"},gi={options:"Training Options",difficulty:"Difficulty",exclude:"Exclude",chosung:"Initial Consonant",excludeOptions:{none:"None",noImage:"No Image"}},fi={answer:"Answer",distractor:"Distractor"},mi={phaseWordDownload:"Download Word Data",phaseImageCheck:"Check Images",phasePairAnalysis:"Analyze Word Pairs",downloadingCount:"Downloading {{n}} words",checkingPage:"Checking page {{page}} list",imageCount:"{{done}} / {{total}} items"},pi={clearAriaLabel:"Clear input"},hi={ariaLabel:"Select tab"},yi={ariaLabel:"Tabs"},bi={dragPrompt:"Drag and drop files here",browseButton:"Choose Files",removeAriaLabel:"Remove {{name}}"},Si={ariaLabel:"User avatar"},wi={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"}},Ei={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"}},Ai={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)"}},vi={manage:{unit:"item(s)"}},Bi={cancelLabel:"Cancel"},Di={subtitle:"Select a topic to start listening practice."},Ti={steps:"Step {{current}} of {{total}}"},Ni={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"},_i={resetColumns:"Reset column widths"},Oi={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}}"},Li={ariaLabel:"Banner",dotAriaLabel:"Banner {{index}} of {{count}}"},Ri={selectYearMonth:"Select year and month",chooseDate:"Choose a date"},Pi={previewRegion:"Report preview \u2014 scrollable sideways"},Mi={description:"Description",textbox:"Text",training:"Training guide",menu:"Menu"},Ii={devNone:"No acquisition data",place:{labial:"Bilabial",alveolar:"Alveolar",palatal:"Palatal",velar:"Velar",glottal:"Glottal"}},ki={clearSelection:"Clear selection"},xi={showResult:"Show {{type}} result"},ji={selected:"Selected",remove:"Remove",exclude:"Excluded",nthSelected:"Selection {{n}}"},Fi={loading:"Loading"},$i={state:{active:"playing",played:"heard",correct:"correct",wrong:"wrong"}},Hi={ariaLabel:"Breadcrumb"},Gi={empty:"No items yet."},Vi={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"},Wi={common:_u,calendar:Ou,passCard:Lu,searchField:Ru,rating:Pu,colorPicker:Mu,dropdown:Iu,accordion:ku,header:xu,nav:ju,settings:Fu,usage:$u,account:Hu,help:Gu,training:Vu,trainingSettings:Wu,customers:Yu,payment:Ku,coupons:Uu,visits:zu,company:qu,trainingType:Ju,myWordTraining:Qu,myWordTable:Zu,keyWords:Xu,wordTable:ei,wordSearch:ti,wordPrint:ni,topic:oi,accessLinkManager:ri,login:ai,device:ui,manager:ii,wordPairs:li,game:si,footer:ci,landing:di,date:Ci,trainingSetPage:gi,wordTrainingPreview:fi,wordData:mi,textField:pi,segmentedControl:hi,tabs:yi,fileUpload:bi,avatar:Si,myHomework:wi,trainingStatus:Ei,store:Ai,homework:vi,inquiry:Bi,trainingPlanRun:Di,progress:Ti,trainingMiss:Ni,table:_i,wordScore:Oi,topBanner:Li,datePicker:Ri,report:Pi,tooltip:Mi,phonemeProfile:Ii,bulkBar:ki,debug:xi,badge:ji,loader:Fi,soundCompass:$i,breadcrumb:Hi,board:Gi,promoBannerBg:Vi};const Yi="0.202.0",Ki=[{code:"ko",label:"\uD55C\uAD6D\uC5B4"},{code:"en",label:"English"}],Ft="ko",Ui="ihab_display_language";function Jn(){if(typeof window>"u")return Ft;try{const e=localStorage.getItem(Ui);if(e&&Ki.some(t=>t.code===e))return e}catch{}return Ft}function Qn(e){try{document.documentElement.lang=e}catch{}}ae.on("languageChanged",Qn),Qn(Jn()),ae.use(se.initReactI18next).init({resources:{ko:{translation:Nu},en:{translation:Wi}},lng:Jn(),fallbackLng:Ft,interpolation:{escapeValue:!1},react:{useSuspense:!1}});const We=["grade","syllables","pos","wordType"],Zn=["1","2","3","4"],zi=["1","2","3","4","5+"],qi=["noun","verb","modifier"],Ji=["native","sino","foreign","mixed"],Qi={grade:Zn,syllables:zi,pos:qi,wordType:Ji},Zi={noun:["\uBA85","\uC218"],verb:["\uB3D9","\uD615"],modifier:["\uBD80","\uAD00"]},Xi={native:"\uACE0\uC720",sino:"\uD55C\uC790",foreign:"\uC678\uB798",mixed:"\uD63C\uC885"},el={grade:["\uB09C\uC774\uB3C4 \uB4F1\uAE09"]},tl={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)"]}},$t=new Map;try{ae.store?.on?.("added",()=>$t.clear())}catch{}function ft(e){const t=$t.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(Zn.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 $t.set(e,o),o}const Ht=()=>Array.from(new Set([ae.language,"ko","en"].filter(e=>!!e)));function Ye(e){if(We.includes(e))return e;for(const t of Ht()){const n=ft(t);for(const o of We)if(n.\uC139\uC158[o]===e)return o}for(const t of We)if(el[t]?.includes(e))return t;return null}function Ne(e,t){if(Qi[e].includes(t))return t;for(const n of Ht()){const o=ft(n).\uAC12[e];for(const[r,a]of Object.entries(o))if(a===t)return r}for(const[n,o]of Object.entries(tl[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 nl=e=>Array.isArray(e)?e.filter(t=>typeof t=="string"):typeof e=="string"&&e?[e]:[];function Gt(e){const t={};for(const[n,o]of Object.entries(e??{})){const r=Ye(n);if(r)for(const a of nl(o)){const u=Ne(r,a);if(!u)continue;const i=t[r]??(t[r]=[]);i.includes(u)||i.push(u)}}return t}function Vt(e,t=ae.language){const n=ft(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 ol(e,t=ae.language){const n={};for(const[o,r]of Object.entries(e??{}))Ye(o)||(n[o]=r);return{...n,...Vt(Gt(e),t)}}function rl(e){for(const t of Ht()){const n=ft(t);if(We.some(o=>n.\uC139\uC158[o]===e))return t}return ae.language||"ko"}function Xn(){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 eo(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 to(e){return{label:e.partOfSpeech,items:Object.keys(e.posMap),multiple:!0,allOption:!0}}function no(e){return{label:e.wordType,items:Object.keys(e.typeMap),multiple:!0,allOption:!0}}function al(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 ul(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 il(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 ll(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=Gt(l)[o]??[],g=c.includes(r)?c.filter(f=>f!==r):[...c,r];if(g.length===0)return i;const d=Vt({[o]:g},rl(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(Nt).map(([e,{nucleus:t}])=>[e,t]));const sl={\uACE0\uC720\uC5B4:"\uACE0\uC720",\uD55C\uC790\uC5B4:"\uD55C\uC790",\uC678\uB798\uC5B4:"\uC678\uB798",\uD63C\uC885\uC5B4:"\uD63C\uC885"},cl={"\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"]},dl={difficulty:"\uB09C\uC774\uB3C4 \uB4F1\uAE09",syllables:"\uC74C\uC808 \uC218",syllable5plus:"5\uC74C\uC808 \uC774\uC0C1",partOfSpeech:"\uD488\uC0AC",wordType:"\uC720\uD615",posMap:cl,typeMap:sl},oo=new WeakMap;function Cl(e,t){const n=oo.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 oo.set(e,{keys:t,\uAC12:o}),o}function gl(e,t,n=dl){const{grades:o,syls:r,poses:a,types:u}=Cl(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]??Xi[Ne("wordType",i)??""])))}const fl={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"})},ml={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"})},pl={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 ro(e,t){if("place"in t)return fl[t.place](e);const n=ml[t.vowel](e);return t.glide?`${n} \xB7 ${pl[t.glide](e)}`:n}const hl=(e,{defaultValue:t})=>t,ao=(e,t)=>({jamos:e,phonetic:t,tooltip:ro(hl,t)}),Ce=(e,t)=>t.map(n=>ao([n],{place:e})),J=(e,t,n)=>ao([...e],n?{vowel:t,glide:n}:{vowel:t}),Wt={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"])]},yl=[...Q],bl=[...te],Sl=oe.filter(e=>e!==""),ge=e=>e===ie?[]:Array.from(e),ie="__NO_CODA__",uo=[1,2,3,4],le=5,wl=12,io="SYL_",Yt=e=>`${io}${e}`,El=e=>Number(e.slice(io.length));function Kt(e){return e>=le?Array.from({length:wl-le+1},(t,n)=>le+n):[e]}const lo={cho:yl,jung:bl,jong:Sl},Ut=e=>e.map(t=>t.map(({jamos:n,phonetic:o,tooltip:r})=>({v:n.join(""),phonetic:o,tooltip:r}))),zt={cho:Ut(Wt.cho),jung:Ut(Wt.jung),jong:Ut(Wt.jong)},so={};zt.jung.flat().forEach(({v:e})=>{for(const t of ge(e))so[t]=e});const Al=new Set(zt.cho.flat().map(e=>e.v));function co(e,t){return e==="cho"?Al.has(t)?t:null:e==="jung"?so[t]??t:Pe(t)}function Co(e,t,n){if(e==="jung"){const o=ge(t);return n&&o.includes(n)?n:o[0]??t}return e==="jong"&&n&&Pe(n)===t?n:t}function go(e,t,n,o){const r=(a,u)=>u?a==="jong"&&u===ie?ie:t==="pron"?co(a,u):Co(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 qt={cho:null,jung:null,jong:null,syllable:null},vl="wt_filter",fo=e=>`wt_filter_${e}`,Jt=["noun","verb","modifier"],Qt=["native","sino","foreign","mixed"];function mo(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 po(e){try{const t=localStorage.getItem(fo(e))??localStorage.getItem(vl);if(t)return JSON.parse(t)}catch{}return null}function ho(e){const t=e?.phonemeView;return t==="pron"?"pron":t==="direct"?"direct":"char"}function Bl(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?{...qt,cho:t.choseong}:qt}function Dl(e,t,n){const{t:o,i18n:r}=se.useTranslation(),[a]=s.useState(()=>n?.resetOnMount?null:po(e)),[u,i]=s.useState(ho(a)),[l,c]=s.useState(()=>Bl(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,_)=>r.getFixedT(b)(_),B=b=>mo(b,Jt,_=>`wordSearch.filter.pos.${_}`,M,E),T=b=>mo(b,Qt,_=>`wordSearch.filter.type.${_}`,M,E),[D,I]=s.useState(()=>B(a?.posFilter)),[v,$]=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 P=Xn(),O=s.useMemo(()=>Object.keys(P.posMap),[P]),k=s.useMemo(()=>Object.keys(P.typeMap),[P]),W=s.useMemo(()=>D.map(b=>O[Jt.indexOf(b)]).filter(Boolean),[D,O]),X=s.useMemo(()=>v.map(b=>k[Qt.indexOf(b)]).filter(Boolean),[v,k]),[U,he]=s.useState({cho:new Set,jung:new Set,jong:new Set,syllable:new Set}),[A,N]=s.useState(!1),[R,G]=s.useState(null),Y=1,ee=Math.max(1,[l.cho,l.jung,l.jong].filter(Boolean).length),[ye,Oe]=s.useState(e);s.useEffect(()=>{if(ye!==e){if(!n?.resetOnMount){const b=po(e);c(b?.composition??g()),w(b?.excludeNoImage??!0),p(b?.sameStructureOnly??!0),i(ho(b)),S(Array.isArray(b?.gradeFilter)?b.gradeFilter:[]),I(B(b?.posFilter)),$(T(b?.wordTypeFilter))}Oe(e)}},[e,ye,n?.resetOnMount]),s.useEffect(()=>{if(!n?.resetOnMount&&ye===e)try{localStorage.setItem(fo(e),JSON.stringify({contrastCount:ee,composition:l,excludeNoImage:m,sameStructureOnly:h,phonemeView:u,gradeFilter:y,posFilter:D,wordTypeFilter:v}))}catch{}},[n?.resetOnMount,e,ye,ee,l,m,h,u,y,D,v]);const[Ee,rn]=s.useState(0);mn("wordpool:update",()=>rn(b=>b+1));const an=s.useRef(r.language);s.useEffect(()=>{an.current!==r.language&&(an.current=r.language,rn(b=>b+1))},[r.language]),s.useEffect(()=>{if(!t.choseong)return;let b=!1;return Ca({difficulty:d,excludeNoImage:m}).then(_=>{b||(he(_),_.cho.size+_.jung.size+_.jong.size>0&&N(!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 _=l,L=_.cho?ge(_.cho):null,x=_.jung?ge(_.jung):null,K=_.jong===ie,Ae=K?null:_.jong?ge(_.jong):null,ve=_.syllable!=null?Kt(_.syllable):null,tt=!!(L||x||Ae||K||ve);return da({difficulty:t.difficulty?d:null,contrastCount:t.difficulty?ee:1,composition:t.choseong&&tt?{cho:L,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(()=>{A&&c(b=>{const _={...b};let L=!1;return["cho","jung","jong"].forEach(x=>{const K=b[x];!K||K===ie||ge(K).some(Ae=>U[x].has(Ae))||(_[x]=null,L=!0)}),b.syllable!=null&&t.fixedSyllable==null&&(b.syllable>=le?[...U.syllable].some(x=>x>=le)||(_.syllable=null,L=!0):(!U.syllable.has(b.syllable)||b.syllable<Y)&&(_.syllable=null,L=!0)),L?_:b})},[U,A,Y,t.fixedSyllable]);const un=s.useMemo(()=>{const b=_=>{const L=new Set;for(const x of lo[_])U[_].has(x)&&L.add(x);return L};return{cho:b("cho"),jung:b("jung"),jong:b("jong")}},[U]),Et=s.useMemo(()=>({exact:new Set(uo.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]),ln=s.useMemo(()=>({[j.trainOnset]:"cho",[j.trainVowel]:"jung",[j.trainCoda]:"jong"}),[j]),et=s.useCallback((b,_)=>({title:_,items:b}),[]),At=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]),Bo=s.useMemo(()=>{const b=[];if(t.choseong){const _={value:ie,displayLabel:j.codaExclude},L=t.fixedNoCoda===!0,x=(K,Ae)=>{const ve=L&&K==="jong",tt={label:Ae,groupLabel:j.phonemeGroup,allOption:!t.requireSyllable,allLabel:j.noLimit,allOptionDisabled:ve};if(u==="pron"){const Be=zt[K].map(Ro=>Ro.map(({v:vt,phonetic:Po})=>{const Bt=ge(vt),sn=ro(o,Po),cn=ve||!Bt.some(Mo=>U[K].has(Mo));return Bt.length>1?{value:vt,labels:Bt,tooltip:sn,disabled:cn}:{value:vt,tooltip:sn,disabled:cn}}));return K==="jong"&&!t.requireCoda&&Be.unshift([_]),{...tt,groups:Be}}const nt=lo[K].map(Be=>!ve&&un[K].has(Be)?Be:{value:Be,disabled:!0});return{...tt,items:K==="jong"&&!t.requireCoda?[_,...nt]:nt}};b.push(x("cho",j.trainOnset)),b.push(x("jung",j.trainVowel)),b.push(x("jong",j.trainCoda))}if(b.push({...eo(o,P,{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(to(P)),t.wordType&&b.push(no(P)),t.choseong||t.fixedSyllable!=null){const _=t.fixedSyllable;b.push({label:j.syllableCount,items:[...uo.map(L=>({value:Yt(L),displayLabel:o("wordPairs.syllableN",{n:L,defaultValue:"{{n}}\uC74C\uC808"}),disabled:_!=null?L!==_:!Et.exact.has(L)||L<Y})),{value:Yt(le),displayLabel:o("wordPairs.syllableNPlus",{n:le,defaultValue:"{{n}}\uC74C\uC808 \uC774\uC0C1"}),disabled:_!=null?le!==_:!Et.min}],allOption:!0,allOptionDisabled:_!=null})}return t.choseong?b.push({label:j.exclude,displayLabel:j.selectLabel,multiple:!0,items:[j.excludeImage,j.sameStructure],labelInfo:et(At)}):b.push({label:j.exclude,displayLabel:j.selectLabel,multiple:!0,items:[j.excludeImage],labelInfo:et([At[0]])}),b},[t.choseong,t.partOfSpeech,t.wordType,t.requireSyllable,t.fixedSyllable,t.fixedNoCoda,t.requireCoda,Y,un,U,u,Et,j,o,et,At,P]),Do={...(t.choseong||t.fixedSyllable!=null)&&l.syllable!=null?{[j.syllableCount]:Yt(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?{[P.partOfSpeech]:W}:{},...t.wordType?{[P.wordType]:X}:{}},To=s.useCallback((b,_)=>{if(_===j.exclude)b===j.excludeImage?w(L=>!L):b===j.sameStructure&&p(L=>!L);else if(_===j.syllableCount)c(L=>{if(!b||b===ue)return{...L,syllable:null};const x=El(b);return{...L,syllable:L.syllable===x?null:x}});else if(_===j.gradeLabel){if(!b||b===ue){S([]);return}const L=b.replace(/\D/g,"");S(x=>x.includes(L)?x.filter(K=>K!==L):[...x,L])}else if(_===P.partOfSpeech){if(!b||b===ue){I([]);return}const L=Jt[O.indexOf(b)]??B([b])[0];if(!L)return;I(x=>x.includes(L)?x.filter(K=>K!==L):[...x,L])}else if(_===P.wordType){if(!b||b===ue){$([]);return}const L=Qt[k.indexOf(b)]??T([b])[0];if(!L)return;$(x=>x.includes(L)?x.filter(K=>K!==L):[...x,L])}else{const L=ln[_];if(!L)return;c(x=>t.requireSyllable?b&&b!==ue?{...x,[L]:b}:x:!b||b===ue||x[L]===b?{...x,[L]:null}:{...x,[L]:b})}},[j,ln,P,O,k,t.requireSyllable]),No=s.useCallback(b=>!t.partOfSpeech&&!t.wordType?!0:gl(b,{...t.partOfSpeech?{[P.partOfSpeech]:W}:{},...t.wordType?{[P.wordType]:X}:{}},P),[t.partOfSpeech,t.wordType,W,X,P]),_o=s.useCallback(b=>{b!==u&&(b!=="direct"&&u!=="direct"&&c(_=>go(_,b,C.current,f.current)),i(b))},[u]),Oo=s.useCallback(()=>({composition:l,contrastCount:ee,excludeNoImage:m,sameStructureOnly:h,phonemeView:u,gradeFilter:y,posFilter:D,wordTypeFilter:v}),[l,ee,m,h,u,y,D,v]),Lo=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:No,poolVersion:Ee,filterSections:Bo,filterSelected:Do,handleFilterSelect:To,phonemeView:u,setPhonemeView:_o,phonemeGroupLabel:j.phonemeGroup,wordCount:R,getFilterSnapshot:Oo,restoreFilterSnapshot:Lo}}function Tl(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?Kt(e.syllable):null;return!n&&!o&&!a&&!r&&!u?null:{cho:n,jung:o,jong:a,jongNone:r,syllable:u}}function Nl(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&&ca(r).catch(()=>{})},[a,r]),s.useEffect(()=>{let E=!1;return C(!0),(async()=>{const M=Tl({cho:f,jung:m,jong:w,syllable:h}),B=`${f??""}_${m??""}_${w??""}_${h??""}_${p}`,T={};await Promise.all(e.map(async D=>{const I=_t[D.key];try{const v=await qn(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});v&&v.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:v,itemCount:v.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=[],mt={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},pt={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},_l={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let Zt=null,yo=null,pe=null;function Ol({counts:e,forceRefresh:t}={}){const n=Object.assign({},_l,e||{}),o=Le(),r=Re(new Date(`${o}T00:00:00+09:00`).getTime()-864e5),a=JSON.stringify(n);if(!t&&yo===o&&Zt===a&&pe)return Object.assign(mt,pe.today),Object.assign(pt,pe.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:mt,yesterday:pt};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&&Zt===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(mt,u),Object.assign(pt,i),yo=o,Zt=a,pe={today:u,yesterday:{date:r,countsKey:a,selection:i}},{today:mt,yesterday:pt}}let Xt=!1,Je=null;async function Ll(){try{const e={url:typeof document>"u"?require("url").pathToFileURL(__filename).href:Dt&&Dt.tagName.toUpperCase()==="SCRIPT"&&Dt.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 Rl(){if(!Xt)return Je||(Je=(async()=>{const e=await Ll();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),Xt=!0;try{Ol()}catch{}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}})(),Je)}async function Pl(e=3e3){const t=Rl();let n;try{await Promise.race([t,new Promise(o=>{n=setTimeout(o,e)})])}finally{n!==void 0&&clearTimeout(n)}return Xt}function bo(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 Ml(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 Il=ce,kl=e=>{const[t,n,o]=e.split("-").map(Number);return Math.round(Date.UTC(t,(n||1)-1,o||1)/864e5)},xl=(e,t)=>{const n=e??{};return String(n.id??n.name??t)};function ht(e,t,n,o,r){if(!e.length||t<=0)return[];const a=Ml(bo(`${n}|${o}|${r}`)),u=kl(o)&1,i=e.filter((c,g)=>(bo(`${n}|${r}|${xl(c,g)}`)>>>7&1)===u),l=i.length>=t&&e.length-i.length>=t;return Il(l?i:e,t,a)}function en(e,t,n){const o=r=>Math.max(0,e[r]||0);return{LISTEN_IN_NOISE:ht(Ke,o("LISTEN_IN_NOISE"),t,n,"LISTEN_IN_NOISE"),SHORT_STORY:ht(Ue,o("SHORT_STORY"),t,n,"SHORT_STORY"),LONG_STORY:ht(ze,o("LONG_STORY"),t,n,"LONG_STORY"),ORDERING_SENTENCE:ht(qe,o("ORDERING_SENTENCE"),t,n,"ORDERING_SENTENCE")}}function tn(e){return e?!!(e.LISTEN_IN_NOISE?.length||e.SHORT_STORY?.length||e.LONG_STORY?.length||e.ORDERING_SENTENCE?.length):!1}const jl={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};function nn(e=!1,t=jl,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:en(t,a,o),yesterday:en(t,a,r)}:{today:en(t,a,o),yesterday:null}}function Fl(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(()=>Le());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(Le()),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),P=F.get("forceRefresh")||F.get("force");T=P==="1"||P==="true"}catch{}const D=F=>{w||(h=!0,t.current=F.today,n.current=F.yesterday,r(!0),g(!0),l(P=>P+1),m=!0,B())},I=async()=>{if(m)return;if(!T){const P=nn(!1,void 0,e);if(tn(P.today)){D(P);return}}if(S){++y>=M&&v();return}if(y>=E){E=y+8,S=Pl(3e3).catch(()=>!1);try{await S}finally{S=null}if(m)return}const F=nn(T,void 0,e);if(tn(F.today)){D(F);return}++y>=M&&v()};function v(){r(!0),g(!1),m=!0,B()}const $=()=>{if(w||h)return;const F=nn(T,void 0,e);tn(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 yt=!1;function So(e){if(e.key!=="Escape"||e.defaultPrevented||e.isComposing||e.keyCode===229)return;const t=_e[_e.length-1];t&&(e.stopPropagation(),t())}function wo(e){return _e.push(e),!yt&&typeof document<"u"&&(document.addEventListener("keydown",So),yt=!0),()=>{const t=_e.lastIndexOf(e);t>=0&&_e.splice(t,1),_e.length===0&&yt&&typeof document<"u"&&(document.removeEventListener("keydown",So),yt=!1)}}function $l(e,t=!0){const n=fn(e);s.useEffect(()=>{if(t)return wo(()=>{n.current?.()})},[t,n])}const on=(e,t)=>`${e}:${t??1}`,bt=new Map,Eo=new Set,Ao=new Map,Hl=6e4;function Gl(e,t){const[n,o]=s.useState(0),r=Array.from(new Set(e.map(a=>on(a.word,a.homonum)))).sort().join("|");return s.useEffect(()=>{const a=r?r.split("|"):[],u=Date.now(),i=a.filter(g=>!bt.has(g)&&!Eo.has(g)&&!(u-(Ao.get(g)??-1/0)<Hl));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&&bt.set(on(d.Word,d.Homonum??void 0),d.Meaning);if(g.length>0)for(const d of i)bt.has(d)||Eo.add(d);else{const d=Date.now();for(const C of i)Ao.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=bt.get(i);l!=null&&u.set(i,l)}return u},[r,n])}function Vl(){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 Wl(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 Yl(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 vo(e,t){const[n,o]=s.useState(e);n!==e&&(o(e),t(1))}function Kl(e={}){const{defaultPageSize:t="25",resetOn:n}=e,[o,r]=s.useState(""),[a,u]=s.useState(t),[i,l]=s.useState(1),c=Number(t)||25,g=Number(a)||c;return vo([o,a,...n??[]].map(String).join("|"),l),{query:o,setQuery:r,pageSize:a,setPageSize:u,perPage:g,page:i,setPage:l}}function Ul(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 zl=[{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."}],ql={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};function Jl(e){return zl.map(t=>{const n=ql[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,St=Qe.green,Xe=Qe.amber,wt=Qe.purple,Ql=Qe.pink,Zl=[{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:St,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:St,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:St,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:St,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:wt,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:wt,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:wt,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:wt,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:Ql,subTitle:"\uC138 \uB2E8\uC5B4\uB97C \uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCE74\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694."}]}];function Xl(){const{t:e}=se.useTranslation();return s.useMemo(()=>{const t=Object.fromEntries(Jl(e).map(o=>[o.key,o.label])),n={...t};return Zl.flatMap(o=>o.types).forEach(o=>{n[o.key]=e(`trainingType.${o.key}.label`,{defaultValue:o.label})}),{sentence:t,all:n}},[e])}function es({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 wo(()=>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 ts(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(R=>{M.current=typeof R=="function"?R(M.current):R,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([]),v=()=>{I.current.forEach(clearTimeout),I.current=[]},$=(R,G)=>{I.current.push(setTimeout(G,R))};s.useEffect(()=>()=>v(),[]);const F=i[c]?.id??null,P=s.useRef(null),O=s.useCallback(()=>{v(),C("playing"),h([]),y(null),B(0);let R=0;e.forEach((G,Y)=>{$(R,()=>{g(Y),m(G.id),T.current?.(G)}),$(R+1e3,()=>{m(null),h(ee=>[...ee,G.id])}),R+=1300}),$(R,()=>{C("done"),D.current?.({score:0,total:e.length})})},[e,B]),k=s.useCallback((R,G)=>{if(G>=R.length){C("done"),D.current?.({score:M.current,total:R.length});return}P.current=null,g(G),y(null),C("playing"),m(R[G].id),T.current?.(R[G]),$(a,()=>{m(null),C("waiting")})},[a]),W=s.useCallback(()=>{v();const R=H(e);l(R),B(0),h([]),k(R,0)},[e,k,B]),X=s.useCallback(()=>{t==="playback"?(l(e),O()):W()},[t,e,O,W]),U=s.useCallback(()=>{v(),C("idle"),m(null),h([]),y(null),g(0),B(0),l([])},[B]),he=e.map(R=>R.id).join("|");s.useEffect(()=>(n?X():U(),()=>v()),[t,he,n]);const A=s.useCallback(R=>{d!=="waiting"||t==="playback"||P.current===c||(P.current=c,y(R),R===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]),N=t==="playback"?e.length:i.length;return{bind:{activeSpeakerId:f,playedIds:w,selectedId:p,answerId:F,showFeedback:d==="feedback",clickable:d==="waiting",onSelectSpeaker:A},index:c,total:N,score:S,phase:d,done:d==="done",start:X,reset:U}}exports.CACHE_GROUPS=Nn,exports.CORE_VERSION=Yi,exports.DocumentTitleSuppressContext=hn,exports.EMPTY_COMPOSITION=qt,exports.MediaQueryOverrideContext=Cn,exports.NO_CODA=ie,exports.SYLLABLE_MIN=le,exports.VAP_PAGE_SIZE_OPTIONS=rt,exports.buildGradeSection=eo,exports.buildPartOfSpeechSection=to,exports.buildPositionSection=il,exports.buildSelectSection=ul,exports.buildSyllableSection=al,exports.buildWordTypeSection=no,exports.charToPronValue=co,exports.convertComposition=go,exports.fmtBytes=dr,exports.lsBytes=_n,exports.meaningKey=on,exports.normalizeWordAttributeFilter=ol,exports.pronToCharValue=Co,exports.syllableToFilter=Kt,exports.toWordAttributeFilterCodes=Gt,exports.today=Fe,exports.toggleAttributeFilter=ll,exports.useAnchoredMenu=es,exports.useCacheManagement=Cr,exports.useDailyTrainingSelection=Fl,exports.useDelayedHoverAnchor=Wl,exports.useDeviceManagement=Dr,exports.useDocumentTitle=Go,exports.useEscToClose=$l,exports.useFontScale=ko,exports.useHoverAnchor=Vl,exports.useListControls=Kl,exports.useMediaQuery=Ho,exports.usePageResetOnChange=vo,exports.usePagedList=Yl,exports.usePasswordChange=qo,exports.useRelativeDay=Ko,exports.useSoundCompassExam=ts,exports.useTablePaging=vr,exports.useTableSort=Br,exports.useToastState=Ul,exports.useTrainingTypeLabels=Xl,exports.useVisitAllPanel=yr,exports.useVisitHistory=mr,exports.useVisitSchedule=hr,exports.useWindowEvent=mn,exports.useWordAttributeFilterKeys=Xn,exports.useWordDataStats=gr,exports.useWordMeanings=Gl,exports.useWordTrainingDataGeneration=Nl,exports.useWordTrainingFilter=Dl,exports.valueToJamos=ge,exports.wordAttributeFilterFromCodes=Vt;
|
|
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"},di={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"}}},Ci={timeHM:"{{hh}}:{{mm}}",timeH:"{{hh}}:{{mm}}"},gi={options:"Training Options",difficulty:"Difficulty",exclude:"Exclude",chosung:"Initial Consonant",excludeOptions:{none:"None",noImage:"No Image"}},fi={answer:"Answer",distractor:"Distractor"},mi={phaseWordDownload:"Download Word Data",phaseImageCheck:"Check Images",phasePairAnalysis:"Analyze Word Pairs",downloadingCount:"Downloading {{n}} words",checkingPage:"Checking page {{page}} list",imageCount:"{{done}} / {{total}} items"},pi={clearAriaLabel:"Clear input"},hi={ariaLabel:"Select tab"},yi={ariaLabel:"Tabs"},bi={dragPrompt:"Drag and drop files here",browseButton:"Choose Files",removeAriaLabel:"Remove {{name}}"},Si={ariaLabel:"User avatar"},wi={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"}},Ei={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"}},Ai={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)"}},vi={manage:{unit:"item(s)"}},Bi={cancelLabel:"Cancel"},Di={subtitle:"Select a topic to start listening practice."},Ti={steps:"Step {{current}} of {{total}}"},Ni={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"},_i={resetColumns:"Reset column widths"},Oi={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}}"},Li={ariaLabel:"Banner",dotAriaLabel:"Banner {{index}} of {{count}}"},Ri={selectYearMonth:"Select year and month",chooseDate:"Choose a date"},Pi={previewRegion:"Report preview \u2014 scrollable sideways"},Mi={description:"Description",textbox:"Text",training:"Training guide",menu:"Menu"},Ii={devNone:"No acquisition data",place:{labial:"Bilabial",alveolar:"Alveolar",palatal:"Palatal",velar:"Velar",glottal:"Glottal"}},ki={clearSelection:"Clear selection"},xi={showResult:"Show {{type}} result"},ji={selected:"Selected",remove:"Remove",exclude:"Excluded",nthSelected:"Selection {{n}}"},Fi={loading:"Loading"},$i={state:{active:"playing",played:"heard",correct:"correct",wrong:"wrong"}},Hi={ariaLabel:"Breadcrumb"},Gi={empty:"No items yet."},Vi={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"},Wi={common:_u,calendar:Ou,passCard:Lu,searchField:Ru,rating:Pu,colorPicker:Mu,dropdown:Iu,accordion:ku,header:xu,nav:ju,settings:Fu,usage:$u,account:Hu,help:Gu,training:Vu,trainingSettings:Wu,customers:Yu,payment:Ku,coupons:Uu,visits:zu,company:qu,trainingType:Ju,myWordTraining:Qu,myWordTable:Zu,keyWords:Xu,wordTable:ei,wordSearch:ti,wordPrint:ni,topic:oi,accessLinkManager:ri,login:ai,device:ui,manager:ii,wordPairs:li,game:si,footer:ci,landing:di,date:Ci,trainingSetPage:gi,wordTrainingPreview:fi,wordData:mi,textField:pi,segmentedControl:hi,tabs:yi,fileUpload:bi,avatar:Si,myHomework:wi,trainingStatus:Ei,store:Ai,homework:vi,inquiry:Bi,trainingPlanRun:Di,progress:Ti,trainingMiss:Ni,table:_i,wordScore:Oi,topBanner:Li,datePicker:Ri,report:Pi,tooltip:Mi,phonemeProfile:Ii,bulkBar:ki,debug:xi,badge:ji,loader:Fi,soundCompass:$i,breadcrumb:Hi,board:Gi,promoBannerBg:Vi};const Yi="0.203.0",Ki=[{code:"ko",label:"\uD55C\uAD6D\uC5B4"},{code:"en",label:"English"}],Ft="ko",Ui="ihab_display_language";function Jn(){if(typeof window>"u")return Ft;try{const e=localStorage.getItem(Ui);if(e&&Ki.some(t=>t.code===e))return e}catch{}return Ft}function Qn(e){try{document.documentElement.lang=e}catch{}}ae.on("languageChanged",Qn),Qn(Jn()),ae.use(se.initReactI18next).init({resources:{ko:{translation:Nu},en:{translation:Wi}},lng:Jn(),fallbackLng:Ft,interpolation:{escapeValue:!1},react:{useSuspense:!1}});const We=["grade","syllables","pos","wordType"],Zn=["1","2","3","4"],zi=["1","2","3","4","5+"],qi=["noun","verb","modifier"],Ji=["native","sino","foreign","mixed"],Qi={grade:Zn,syllables:zi,pos:qi,wordType:Ji},Zi={noun:["\uBA85","\uC218"],verb:["\uB3D9","\uD615"],modifier:["\uBD80","\uAD00"]},Xi={native:"\uACE0\uC720",sino:"\uD55C\uC790",foreign:"\uC678\uB798",mixed:"\uD63C\uC885"},el={grade:["\uB09C\uC774\uB3C4 \uB4F1\uAE09"]},tl={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)"]}},$t=new Map;try{ae.store?.on?.("added",()=>$t.clear())}catch{}function ft(e){const t=$t.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(Zn.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 $t.set(e,o),o}const Ht=()=>Array.from(new Set([ae.language,"ko","en"].filter(e=>!!e)));function Ye(e){if(We.includes(e))return e;for(const t of Ht()){const n=ft(t);for(const o of We)if(n.\uC139\uC158[o]===e)return o}for(const t of We)if(el[t]?.includes(e))return t;return null}function Ne(e,t){if(Qi[e].includes(t))return t;for(const n of Ht()){const o=ft(n).\uAC12[e];for(const[r,a]of Object.entries(o))if(a===t)return r}for(const[n,o]of Object.entries(tl[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 nl=e=>Array.isArray(e)?e.filter(t=>typeof t=="string"):typeof e=="string"&&e?[e]:[];function Gt(e){const t={};for(const[n,o]of Object.entries(e??{})){const r=Ye(n);if(r)for(const a of nl(o)){const u=Ne(r,a);if(!u)continue;const i=t[r]??(t[r]=[]);i.includes(u)||i.push(u)}}return t}function Vt(e,t=ae.language){const n=ft(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 ol(e,t=ae.language){const n={};for(const[o,r]of Object.entries(e??{}))Ye(o)||(n[o]=r);return{...n,...Vt(Gt(e),t)}}function rl(e){for(const t of Ht()){const n=ft(t);if(We.some(o=>n.\uC139\uC158[o]===e))return t}return ae.language||"ko"}function Xn(){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 eo(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 to(e){return{label:e.partOfSpeech,items:Object.keys(e.posMap),multiple:!0,allOption:!0}}function no(e){return{label:e.wordType,items:Object.keys(e.typeMap),multiple:!0,allOption:!0}}function al(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 ul(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 il(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 ll(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=Gt(l)[o]??[],g=c.includes(r)?c.filter(f=>f!==r):[...c,r];if(g.length===0)return i;const d=Vt({[o]:g},rl(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(Nt).map(([e,{nucleus:t}])=>[e,t]));const sl={\uACE0\uC720\uC5B4:"\uACE0\uC720",\uD55C\uC790\uC5B4:"\uD55C\uC790",\uC678\uB798\uC5B4:"\uC678\uB798",\uD63C\uC885\uC5B4:"\uD63C\uC885"},cl={"\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"]},dl={difficulty:"\uB09C\uC774\uB3C4 \uB4F1\uAE09",syllables:"\uC74C\uC808 \uC218",syllable5plus:"5\uC74C\uC808 \uC774\uC0C1",partOfSpeech:"\uD488\uC0AC",wordType:"\uC720\uD615",posMap:cl,typeMap:sl},oo=new WeakMap;function Cl(e,t){const n=oo.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 oo.set(e,{keys:t,\uAC12:o}),o}function gl(e,t,n=dl){const{grades:o,syls:r,poses:a,types:u}=Cl(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]??Xi[Ne("wordType",i)??""])))}const fl={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"})},ml={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"})},pl={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 ro(e,t){if("place"in t)return fl[t.place](e);const n=ml[t.vowel](e);return t.glide?`${n} \xB7 ${pl[t.glide](e)}`:n}const hl=(e,{defaultValue:t})=>t,ao=(e,t)=>({jamos:e,phonetic:t,tooltip:ro(hl,t)}),Ce=(e,t)=>t.map(n=>ao([n],{place:e})),J=(e,t,n)=>ao([...e],n?{vowel:t,glide:n}:{vowel:t}),Wt={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"])]},yl=[...Q],bl=[...te],Sl=oe.filter(e=>e!==""),ge=e=>e===ie?[]:Array.from(e),ie="__NO_CODA__",uo=[1,2,3,4],le=5,wl=12,io="SYL_",Yt=e=>`${io}${e}`,El=e=>Number(e.slice(io.length));function Kt(e){return e>=le?Array.from({length:wl-le+1},(t,n)=>le+n):[e]}const lo={cho:yl,jung:bl,jong:Sl},Ut=e=>e.map(t=>t.map(({jamos:n,phonetic:o,tooltip:r})=>({v:n.join(""),phonetic:o,tooltip:r}))),zt={cho:Ut(Wt.cho),jung:Ut(Wt.jung),jong:Ut(Wt.jong)},so={};zt.jung.flat().forEach(({v:e})=>{for(const t of ge(e))so[t]=e});const Al=new Set(zt.cho.flat().map(e=>e.v));function co(e,t){return e==="cho"?Al.has(t)?t:null:e==="jung"?so[t]??t:Pe(t)}function Co(e,t,n){if(e==="jung"){const o=ge(t);return n&&o.includes(n)?n:o[0]??t}return e==="jong"&&n&&Pe(n)===t?n:t}function go(e,t,n,o){const r=(a,u)=>u?a==="jong"&&u===ie?ie:t==="pron"?co(a,u):Co(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 qt={cho:null,jung:null,jong:null,syllable:null},vl="wt_filter",fo=e=>`wt_filter_${e}`,Jt=["noun","verb","modifier"],Qt=["native","sino","foreign","mixed"];function mo(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 po(e){try{const t=localStorage.getItem(fo(e))??localStorage.getItem(vl);if(t)return JSON.parse(t)}catch{}return null}function ho(e){const t=e?.phonemeView;return t==="pron"?"pron":t==="direct"?"direct":"char"}function Bl(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?{...qt,cho:t.choseong}:qt}function Dl(e,t,n){const{t:o,i18n:r}=se.useTranslation(),[a]=s.useState(()=>n?.resetOnMount?null:po(e)),[u,i]=s.useState(ho(a)),[l,c]=s.useState(()=>Bl(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,_)=>r.getFixedT(b)(_),B=b=>mo(b,Jt,_=>`wordSearch.filter.pos.${_}`,M,E),T=b=>mo(b,Qt,_=>`wordSearch.filter.type.${_}`,M,E),[D,I]=s.useState(()=>B(a?.posFilter)),[v,$]=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 P=Xn(),O=s.useMemo(()=>Object.keys(P.posMap),[P]),k=s.useMemo(()=>Object.keys(P.typeMap),[P]),W=s.useMemo(()=>D.map(b=>O[Jt.indexOf(b)]).filter(Boolean),[D,O]),X=s.useMemo(()=>v.map(b=>k[Qt.indexOf(b)]).filter(Boolean),[v,k]),[U,he]=s.useState({cho:new Set,jung:new Set,jong:new Set,syllable:new Set}),[A,N]=s.useState(!1),[R,G]=s.useState(null),Y=1,ee=Math.max(1,[l.cho,l.jung,l.jong].filter(Boolean).length),[ye,Oe]=s.useState(e);s.useEffect(()=>{if(ye!==e){if(!n?.resetOnMount){const b=po(e);c(b?.composition??g()),w(b?.excludeNoImage??!0),p(b?.sameStructureOnly??!0),i(ho(b)),S(Array.isArray(b?.gradeFilter)?b.gradeFilter:[]),I(B(b?.posFilter)),$(T(b?.wordTypeFilter))}Oe(e)}},[e,ye,n?.resetOnMount]),s.useEffect(()=>{if(!n?.resetOnMount&&ye===e)try{localStorage.setItem(fo(e),JSON.stringify({contrastCount:ee,composition:l,excludeNoImage:m,sameStructureOnly:h,phonemeView:u,gradeFilter:y,posFilter:D,wordTypeFilter:v}))}catch{}},[n?.resetOnMount,e,ye,ee,l,m,h,u,y,D,v]);const[Ee,rn]=s.useState(0);mn("wordpool:update",()=>rn(b=>b+1));const an=s.useRef(r.language);s.useEffect(()=>{an.current!==r.language&&(an.current=r.language,rn(b=>b+1))},[r.language]),s.useEffect(()=>{if(!t.choseong)return;let b=!1;return Ca({difficulty:d,excludeNoImage:m}).then(_=>{b||(he(_),_.cho.size+_.jung.size+_.jong.size>0&&N(!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 _=l,L=_.cho?ge(_.cho):null,x=_.jung?ge(_.jung):null,K=_.jong===ie,Ae=K?null:_.jong?ge(_.jong):null,ve=_.syllable!=null?Kt(_.syllable):null,tt=!!(L||x||Ae||K||ve);return da({difficulty:t.difficulty?d:null,contrastCount:t.difficulty?ee:1,composition:t.choseong&&tt?{cho:L,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(()=>{A&&c(b=>{const _={...b};let L=!1;return["cho","jung","jong"].forEach(x=>{const K=b[x];!K||K===ie||ge(K).some(Ae=>U[x].has(Ae))||(_[x]=null,L=!0)}),b.syllable!=null&&t.fixedSyllable==null&&(b.syllable>=le?[...U.syllable].some(x=>x>=le)||(_.syllable=null,L=!0):(!U.syllable.has(b.syllable)||b.syllable<Y)&&(_.syllable=null,L=!0)),L?_:b})},[U,A,Y,t.fixedSyllable]);const un=s.useMemo(()=>{const b=_=>{const L=new Set;for(const x of lo[_])U[_].has(x)&&L.add(x);return L};return{cho:b("cho"),jung:b("jung"),jong:b("jong")}},[U]),Et=s.useMemo(()=>({exact:new Set(uo.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]),ln=s.useMemo(()=>({[j.trainOnset]:"cho",[j.trainVowel]:"jung",[j.trainCoda]:"jong"}),[j]),et=s.useCallback((b,_)=>({title:_,items:b}),[]),At=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]),Bo=s.useMemo(()=>{const b=[];if(t.choseong){const _={value:ie,displayLabel:j.codaExclude},L=t.fixedNoCoda===!0,x=(K,Ae)=>{const ve=L&&K==="jong",tt={label:Ae,groupLabel:j.phonemeGroup,allOption:!t.requireSyllable,allLabel:j.noLimit,allOptionDisabled:ve};if(u==="pron"){const Be=zt[K].map(Ro=>Ro.map(({v:vt,phonetic:Po})=>{const Bt=ge(vt),sn=ro(o,Po),cn=ve||!Bt.some(Mo=>U[K].has(Mo));return Bt.length>1?{value:vt,labels:Bt,tooltip:sn,disabled:cn}:{value:vt,tooltip:sn,disabled:cn}}));return K==="jong"&&!t.requireCoda&&Be.unshift([_]),{...tt,groups:Be}}const nt=lo[K].map(Be=>!ve&&un[K].has(Be)?Be:{value:Be,disabled:!0});return{...tt,items:K==="jong"&&!t.requireCoda?[_,...nt]:nt}};b.push(x("cho",j.trainOnset)),b.push(x("jung",j.trainVowel)),b.push(x("jong",j.trainCoda))}if(b.push({...eo(o,P,{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(to(P)),t.wordType&&b.push(no(P)),t.choseong||t.fixedSyllable!=null){const _=t.fixedSyllable;b.push({label:j.syllableCount,items:[...uo.map(L=>({value:Yt(L),displayLabel:o("wordPairs.syllableN",{n:L,defaultValue:"{{n}}\uC74C\uC808"}),disabled:_!=null?L!==_:!Et.exact.has(L)||L<Y})),{value:Yt(le),displayLabel:o("wordPairs.syllableNPlus",{n:le,defaultValue:"{{n}}\uC74C\uC808 \uC774\uC0C1"}),disabled:_!=null?le!==_:!Et.min}],allOption:!0,allOptionDisabled:_!=null})}return t.choseong?b.push({label:j.exclude,displayLabel:j.selectLabel,multiple:!0,items:[j.excludeImage,j.sameStructure],labelInfo:et(At)}):b.push({label:j.exclude,displayLabel:j.selectLabel,multiple:!0,items:[j.excludeImage],labelInfo:et([At[0]])}),b},[t.choseong,t.partOfSpeech,t.wordType,t.requireSyllable,t.fixedSyllable,t.fixedNoCoda,t.requireCoda,Y,un,U,u,Et,j,o,et,At,P]),Do={...(t.choseong||t.fixedSyllable!=null)&&l.syllable!=null?{[j.syllableCount]:Yt(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?{[P.partOfSpeech]:W}:{},...t.wordType?{[P.wordType]:X}:{}},To=s.useCallback((b,_)=>{if(_===j.exclude)b===j.excludeImage?w(L=>!L):b===j.sameStructure&&p(L=>!L);else if(_===j.syllableCount)c(L=>{if(!b||b===ue)return{...L,syllable:null};const x=El(b);return{...L,syllable:L.syllable===x?null:x}});else if(_===j.gradeLabel){if(!b||b===ue){S([]);return}const L=b.replace(/\D/g,"");S(x=>x.includes(L)?x.filter(K=>K!==L):[...x,L])}else if(_===P.partOfSpeech){if(!b||b===ue){I([]);return}const L=Jt[O.indexOf(b)]??B([b])[0];if(!L)return;I(x=>x.includes(L)?x.filter(K=>K!==L):[...x,L])}else if(_===P.wordType){if(!b||b===ue){$([]);return}const L=Qt[k.indexOf(b)]??T([b])[0];if(!L)return;$(x=>x.includes(L)?x.filter(K=>K!==L):[...x,L])}else{const L=ln[_];if(!L)return;c(x=>t.requireSyllable?b&&b!==ue?{...x,[L]:b}:x:!b||b===ue||x[L]===b?{...x,[L]:null}:{...x,[L]:b})}},[j,ln,P,O,k,t.requireSyllable]),No=s.useCallback(b=>!t.partOfSpeech&&!t.wordType?!0:gl(b,{...t.partOfSpeech?{[P.partOfSpeech]:W}:{},...t.wordType?{[P.wordType]:X}:{}},P),[t.partOfSpeech,t.wordType,W,X,P]),_o=s.useCallback(b=>{b!==u&&(b!=="direct"&&u!=="direct"&&c(_=>go(_,b,C.current,f.current)),i(b))},[u]),Oo=s.useCallback(()=>({composition:l,contrastCount:ee,excludeNoImage:m,sameStructureOnly:h,phonemeView:u,gradeFilter:y,posFilter:D,wordTypeFilter:v}),[l,ee,m,h,u,y,D,v]),Lo=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:No,poolVersion:Ee,filterSections:Bo,filterSelected:Do,handleFilterSelect:To,phonemeView:u,setPhonemeView:_o,phonemeGroupLabel:j.phonemeGroup,wordCount:R,getFilterSnapshot:Oo,restoreFilterSnapshot:Lo}}function Tl(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?Kt(e.syllable):null;return!n&&!o&&!a&&!r&&!u?null:{cho:n,jung:o,jong:a,jongNone:r,syllable:u}}function Nl(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&&ca(r).catch(()=>{})},[a,r]),s.useEffect(()=>{let E=!1;return C(!0),(async()=>{const M=Tl({cho:f,jung:m,jong:w,syllable:h}),B=`${f??""}_${m??""}_${w??""}_${h??""}_${p}`,T={};await Promise.all(e.map(async D=>{const I=_t[D.key];try{const v=await qn(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});v&&v.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:v,itemCount:v.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=[],mt={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},pt={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},_l={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let Zt=null,yo=null,pe=null;function Ol({counts:e,forceRefresh:t}={}){const n=Object.assign({},_l,e||{}),o=Le(),r=Re(new Date(`${o}T00:00:00+09:00`).getTime()-864e5),a=JSON.stringify(n);if(!t&&yo===o&&Zt===a&&pe)return Object.assign(mt,pe.today),Object.assign(pt,pe.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:mt,yesterday:pt};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&&Zt===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(mt,u),Object.assign(pt,i),yo=o,Zt=a,pe={today:u,yesterday:{date:r,countsKey:a,selection:i}},{today:mt,yesterday:pt}}let Xt=!1,Je=null;async function Ll(){try{const e={url:typeof document>"u"?require("url").pathToFileURL(__filename).href:Dt&&Dt.tagName.toUpperCase()==="SCRIPT"&&Dt.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 Rl(){if(!Xt)return Je||(Je=(async()=>{const e=await Ll();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),Xt=!0;try{Ol()}catch{}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}})(),Je)}async function Pl(e=3e3){const t=Rl();let n;try{await Promise.race([t,new Promise(o=>{n=setTimeout(o,e)})])}finally{n!==void 0&&clearTimeout(n)}return Xt}function bo(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 Ml(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 Il=ce,kl=e=>{const[t,n,o]=e.split("-").map(Number);return Math.round(Date.UTC(t,(n||1)-1,o||1)/864e5)},xl=(e,t)=>{const n=e??{};return String(n.id??n.name??t)};function ht(e,t,n,o,r){if(!e.length||t<=0)return[];const a=Ml(bo(`${n}|${o}|${r}`)),u=kl(o)&1,i=e.filter((c,g)=>(bo(`${n}|${r}|${xl(c,g)}`)>>>7&1)===u),l=i.length>=t&&e.length-i.length>=t;return Il(l?i:e,t,a)}function en(e,t,n){const o=r=>Math.max(0,e[r]||0);return{LISTEN_IN_NOISE:ht(Ke,o("LISTEN_IN_NOISE"),t,n,"LISTEN_IN_NOISE"),SHORT_STORY:ht(Ue,o("SHORT_STORY"),t,n,"SHORT_STORY"),LONG_STORY:ht(ze,o("LONG_STORY"),t,n,"LONG_STORY"),ORDERING_SENTENCE:ht(qe,o("ORDERING_SENTENCE"),t,n,"ORDERING_SENTENCE")}}function tn(e){return e?!!(e.LISTEN_IN_NOISE?.length||e.SHORT_STORY?.length||e.LONG_STORY?.length||e.ORDERING_SENTENCE?.length):!1}const jl={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};function nn(e=!1,t=jl,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:en(t,a,o),yesterday:en(t,a,r)}:{today:en(t,a,o),yesterday:null}}function Fl(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(()=>Le());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(Le()),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),P=F.get("forceRefresh")||F.get("force");T=P==="1"||P==="true"}catch{}const D=F=>{w||(h=!0,t.current=F.today,n.current=F.yesterday,r(!0),g(!0),l(P=>P+1),m=!0,B())},I=async()=>{if(m)return;if(!T){const P=nn(!1,void 0,e);if(tn(P.today)){D(P);return}}if(S){++y>=M&&v();return}if(y>=E){E=y+8,S=Pl(3e3).catch(()=>!1);try{await S}finally{S=null}if(m)return}const F=nn(T,void 0,e);if(tn(F.today)){D(F);return}++y>=M&&v()};function v(){r(!0),g(!1),m=!0,B()}const $=()=>{if(w||h)return;const F=nn(T,void 0,e);tn(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 yt=!1;function So(e){if(e.key!=="Escape"||e.defaultPrevented||e.isComposing||e.keyCode===229)return;const t=_e[_e.length-1];t&&(e.stopPropagation(),t())}function wo(e){return _e.push(e),!yt&&typeof document<"u"&&(document.addEventListener("keydown",So),yt=!0),()=>{const t=_e.lastIndexOf(e);t>=0&&_e.splice(t,1),_e.length===0&&yt&&typeof document<"u"&&(document.removeEventListener("keydown",So),yt=!1)}}function $l(e,t=!0){const n=fn(e);s.useEffect(()=>{if(t)return wo(()=>{n.current?.()})},[t,n])}const on=(e,t)=>`${e}:${t??1}`,bt=new Map,Eo=new Set,Ao=new Map,Hl=6e4;function Gl(e,t){const[n,o]=s.useState(0),r=Array.from(new Set(e.map(a=>on(a.word,a.homonum)))).sort().join("|");return s.useEffect(()=>{const a=r?r.split("|"):[],u=Date.now(),i=a.filter(g=>!bt.has(g)&&!Eo.has(g)&&!(u-(Ao.get(g)??-1/0)<Hl));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&&bt.set(on(d.Word,d.Homonum??void 0),d.Meaning);if(g.length>0)for(const d of i)bt.has(d)||Eo.add(d);else{const d=Date.now();for(const C of i)Ao.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=bt.get(i);l!=null&&u.set(i,l)}return u},[r,n])}function Vl(){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 Wl(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 Yl(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 vo(e,t){const[n,o]=s.useState(e);n!==e&&(o(e),t(1))}function Kl(e={}){const{defaultPageSize:t="25",resetOn:n}=e,[o,r]=s.useState(""),[a,u]=s.useState(t),[i,l]=s.useState(1),c=Number(t)||25,g=Number(a)||c;return vo([o,a,...n??[]].map(String).join("|"),l),{query:o,setQuery:r,pageSize:a,setPageSize:u,perPage:g,page:i,setPage:l}}function Ul(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 zl=[{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."}],ql={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};function Jl(e){return zl.map(t=>{const n=ql[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,St=Qe.green,Xe=Qe.amber,wt=Qe.purple,Ql=Qe.pink,Zl=[{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:St,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:St,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:St,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:St,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:wt,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:wt,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:wt,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:wt,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:Ql,subTitle:"\uC138 \uB2E8\uC5B4\uB97C \uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCE74\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694."}]}];function Xl(){const{t:e}=se.useTranslation();return s.useMemo(()=>{const t=Object.fromEntries(Jl(e).map(o=>[o.key,o.label])),n={...t};return Zl.flatMap(o=>o.types).forEach(o=>{n[o.key]=e(`trainingType.${o.key}.label`,{defaultValue:o.label})}),{sentence:t,all:n}},[e])}function es({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 wo(()=>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 ts(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(R=>{M.current=typeof R=="function"?R(M.current):R,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([]),v=()=>{I.current.forEach(clearTimeout),I.current=[]},$=(R,G)=>{I.current.push(setTimeout(G,R))};s.useEffect(()=>()=>v(),[]);const F=i[c]?.id??null,P=s.useRef(null),O=s.useCallback(()=>{v(),C("playing"),h([]),y(null),B(0);let R=0;e.forEach((G,Y)=>{$(R,()=>{g(Y),m(G.id),T.current?.(G)}),$(R+1e3,()=>{m(null),h(ee=>[...ee,G.id])}),R+=1300}),$(R,()=>{C("done"),D.current?.({score:0,total:e.length})})},[e,B]),k=s.useCallback((R,G)=>{if(G>=R.length){C("done"),D.current?.({score:M.current,total:R.length});return}P.current=null,g(G),y(null),C("playing"),m(R[G].id),T.current?.(R[G]),$(a,()=>{m(null),C("waiting")})},[a]),W=s.useCallback(()=>{v();const R=H(e);l(R),B(0),h([]),k(R,0)},[e,k,B]),X=s.useCallback(()=>{t==="playback"?(l(e),O()):W()},[t,e,O,W]),U=s.useCallback(()=>{v(),C("idle"),m(null),h([]),y(null),g(0),B(0),l([])},[B]),he=e.map(R=>R.id).join("|");s.useEffect(()=>(n?X():U(),()=>v()),[t,he,n]);const A=s.useCallback(R=>{d!=="waiting"||t==="playback"||P.current===c||(P.current=c,y(R),R===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]),N=t==="playback"?e.length:i.length;return{bind:{activeSpeakerId:f,playedIds:w,selectedId:p,answerId:F,showFeedback:d==="feedback",clickable:d==="waiting",onSelectSpeaker:A},index:c,total:N,score:S,phase:d,done:d==="done",start:X,reset:U}}exports.CACHE_GROUPS=Nn,exports.CORE_VERSION=Yi,exports.DocumentTitleSuppressContext=hn,exports.EMPTY_COMPOSITION=qt,exports.MediaQueryOverrideContext=Cn,exports.NO_CODA=ie,exports.SYLLABLE_MIN=le,exports.VAP_PAGE_SIZE_OPTIONS=rt,exports.buildGradeSection=eo,exports.buildPartOfSpeechSection=to,exports.buildPositionSection=il,exports.buildSelectSection=ul,exports.buildSyllableSection=al,exports.buildWordTypeSection=no,exports.charToPronValue=co,exports.convertComposition=go,exports.fmtBytes=dr,exports.lsBytes=_n,exports.meaningKey=on,exports.normalizeWordAttributeFilter=ol,exports.pronToCharValue=Co,exports.syllableToFilter=Kt,exports.toWordAttributeFilterCodes=Gt,exports.today=Fe,exports.toggleAttributeFilter=ll,exports.useAnchoredMenu=es,exports.useCacheManagement=Cr,exports.useDailyTrainingSelection=Fl,exports.useDelayedHoverAnchor=Wl,exports.useDeviceManagement=Dr,exports.useDocumentTitle=Go,exports.useEscToClose=$l,exports.useFontScale=ko,exports.useHoverAnchor=Vl,exports.useListControls=Kl,exports.useMediaQuery=Ho,exports.usePageResetOnChange=vo,exports.usePagedList=Yl,exports.usePasswordChange=qo,exports.useRelativeDay=Ko,exports.useSoundCompassExam=ts,exports.useTablePaging=vr,exports.useTableSort=Br,exports.useToastState=Ul,exports.useTrainingTypeLabels=Xl,exports.useVisitAllPanel=yr,exports.useVisitHistory=mr,exports.useVisitSchedule=hr,exports.useWindowEvent=mn,exports.useWordAttributeFilterKeys=Xn,exports.useWordDataStats=gr,exports.useWordMeanings=Gl,exports.useWordTrainingDataGeneration=Nl,exports.useWordTrainingFilter=Dl,exports.valueToJamos=ge,exports.wordAttributeFilterFromCodes=Vt;
|