@ihabdevteam/core 0.8.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/README.md +591 -0
- package/dist/components.cjs.css +19 -0
- package/dist/components.cjs.js +975 -0
- package/dist/components.esm.css +19 -0
- package/dist/components.esm.js +975 -0
- package/dist/hooks.cjs.css +1 -0
- package/dist/hooks.cjs.js +799 -0
- package/dist/hooks.esm.css +1 -0
- package/dist/hooks.esm.js +799 -0
- package/dist/ihabdevteam-core-tokens.css +1 -0
- package/dist/ihabdevteam-core.cjs.js +993 -0
- package/dist/ihabdevteam-core.css +1 -0
- package/dist/ihabdevteam-core.d.ts +8272 -0
- package/dist/ihabdevteam-core.esm.js +993 -0
- package/dist/logo/Logo_APEB.svg +53 -0
- package/dist/logo/Logo_APEB_black.svg +42 -0
- package/dist/logo/Logo_APEB_white.svg +42 -0
- package/dist/logo/Logo_HTP_kr.svg +21 -0
- package/dist/logo/Logo_HTP_kr_black.svg +17 -0
- package/dist/logo/Logo_HTP_kr_white.svg +17 -0
- package/dist/logo/Logo_IHAB_en.svg +18 -0
- package/dist/logo/Logo_IHAB_en_black.svg +14 -0
- package/dist/logo/Logo_IHAB_en_white.svg +14 -0
- package/dist/logo/Logo_IHAB_kr.svg +18 -0
- package/dist/logo/Logo_IHAB_kr_black.svg +14 -0
- package/dist/logo/Logo_IHAB_kr_white.svg +14 -0
- package/dist/logo/Logo_SDS_kr.svg +22 -0
- package/dist/logo/Logo_SDS_kr_black.svg +18 -0
- package/dist/logo/Logo_SDS_kr_white.svg +18 -0
- package/dist/logo/Logo_speechearManager_kr.svg +20 -0
- package/dist/logo/Logo_speechearManager_kr_black.svg +21 -0
- package/dist/logo/Logo_speechearManager_kr_textWhite.svg +45 -0
- package/dist/logo/Logo_speechearManager_kr_white.svg +21 -0
- package/dist/logo/Logo_speechear_kr.svg +17 -0
- package/dist/logo/Logo_speechear_kr_black.svg +16 -0
- package/dist/logo/Logo_speechear_kr_textWhite.svg +42 -0
- package/dist/logo/Logo_speechear_kr_white.svg +16 -0
- package/dist/logo/Symbol_APEB.svg +34 -0
- package/dist/logo/Symbol_APEB_black.svg +15 -0
- package/dist/logo/Symbol_APEB_white.svg +15 -0
- package/dist/logo/Symbol_HTP.svg +14 -0
- package/dist/logo/Symbol_HTP_black.svg +10 -0
- package/dist/logo/Symbol_HTP_white.svg +10 -0
- package/dist/logo/Symbol_IHAB.svg +14 -0
- package/dist/logo/Symbol_IHAB_black.svg +10 -0
- package/dist/logo/Symbol_IHAB_white.svg +10 -0
- package/dist/logo/Symbol_SDS.svg +14 -0
- package/dist/logo/Symbol_SDS_black.svg +10 -0
- package/dist/logo/Symbol_SDS_white.svg +10 -0
- package/dist/logo/Symbol_speechear.svg +15 -0
- package/dist/logo/Symbol_speechear_black.svg +16 -0
- package/dist/logo/Symbol_speechear_white.svg +16 -0
- package/dist/logo/qr_speechear.svg +1 -0
- package/dist/packages/core/src/CoreScope.d.ts +40 -0
- package/dist/packages/core/src/CoreScope.js +19 -0
- package/dist/packages/core/src/components/Accordion.css +125 -0
- package/dist/packages/core/src/components/Accordion.d.ts +19 -0
- package/dist/packages/core/src/components/Accordion.js +33 -0
- package/dist/packages/core/src/components/ActionCard.css +109 -0
- package/dist/packages/core/src/components/ActionCard.d.ts +33 -0
- package/dist/packages/core/src/components/ActionCard.js +28 -0
- package/dist/packages/core/src/components/Alert.css +76 -0
- package/dist/packages/core/src/components/Alert.d.ts +18 -0
- package/dist/packages/core/src/components/Alert.js +28 -0
- package/dist/packages/core/src/components/AudioMeter.css +80 -0
- package/dist/packages/core/src/components/AudioMeter.d.ts +49 -0
- package/dist/packages/core/src/components/AudioMeter.js +91 -0
- package/dist/packages/core/src/components/Avatar.css +42 -0
- package/dist/packages/core/src/components/Avatar.d.ts +21 -0
- package/dist/packages/core/src/components/Avatar.js +31 -0
- package/dist/packages/core/src/components/Badge.css +166 -0
- package/dist/packages/core/src/components/Badge.d.ts +82 -0
- package/dist/packages/core/src/components/Badge.js +62 -0
- package/dist/packages/core/src/components/BarChart.css +142 -0
- package/dist/packages/core/src/components/BarChart.d.ts +16 -0
- package/dist/packages/core/src/components/BarChart.js +187 -0
- package/dist/packages/core/src/components/Board.css +85 -0
- package/dist/packages/core/src/components/Board.d.ts +39 -0
- package/dist/packages/core/src/components/Board.js +12 -0
- package/dist/packages/core/src/components/BottomNav.css +105 -0
- package/dist/packages/core/src/components/BottomNav.d.ts +32 -0
- package/dist/packages/core/src/components/BottomNav.js +92 -0
- package/dist/packages/core/src/components/Breadcrumb.css +62 -0
- package/dist/packages/core/src/components/Breadcrumb.d.ts +13 -0
- package/dist/packages/core/src/components/Breadcrumb.js +10 -0
- package/dist/packages/core/src/components/BulkBar.css +75 -0
- package/dist/packages/core/src/components/BulkBar.d.ts +22 -0
- package/dist/packages/core/src/components/BulkBar.js +40 -0
- package/dist/packages/core/src/components/Button.css +655 -0
- package/dist/packages/core/src/components/Button.d.ts +5 -0
- package/dist/packages/core/src/components/Button.js +202 -0
- package/dist/packages/core/src/components/Calendar.css +249 -0
- package/dist/packages/core/src/components/Calendar.d.ts +23 -0
- package/dist/packages/core/src/components/Calendar.js +92 -0
- package/dist/packages/core/src/components/ChartSection.css +191 -0
- package/dist/packages/core/src/components/ChartSection.d.ts +42 -0
- package/dist/packages/core/src/components/ChartSection.js +22 -0
- package/dist/packages/core/src/components/Checkbox.css +94 -0
- package/dist/packages/core/src/components/Checkbox.d.ts +16 -0
- package/dist/packages/core/src/components/Checkbox.js +15 -0
- package/dist/packages/core/src/components/ChoiceChips.css +65 -0
- package/dist/packages/core/src/components/ChoiceChips.d.ts +15 -0
- package/dist/packages/core/src/components/ChoiceChips.js +8 -0
- package/dist/packages/core/src/components/CircleBadge.d.ts +31 -0
- package/dist/packages/core/src/components/CircleBadge.js +20 -0
- package/dist/packages/core/src/components/CodeBox.css +62 -0
- package/dist/packages/core/src/components/CodeBox.d.ts +18 -0
- package/dist/packages/core/src/components/CodeBox.js +132 -0
- package/dist/packages/core/src/components/ColorPicker.css +40 -0
- package/dist/packages/core/src/components/ColorPicker.d.ts +17 -0
- package/dist/packages/core/src/components/ColorPicker.js +23 -0
- package/dist/packages/core/src/components/CompanyMeta.css +33 -0
- package/dist/packages/core/src/components/CompanyMeta.d.ts +14 -0
- package/dist/packages/core/src/components/CompanyMeta.js +12 -0
- package/dist/packages/core/src/components/CountTile.css +47 -0
- package/dist/packages/core/src/components/CountTile.d.ts +22 -0
- package/dist/packages/core/src/components/CountTile.js +24 -0
- package/dist/packages/core/src/components/DatePicker.css +151 -0
- package/dist/packages/core/src/components/DatePicker.d.ts +13 -0
- package/dist/packages/core/src/components/DatePicker.js +107 -0
- package/dist/packages/core/src/components/Dialog.css +98 -0
- package/dist/packages/core/src/components/Dialog.d.ts +31 -0
- package/dist/packages/core/src/components/Dialog.js +51 -0
- package/dist/packages/core/src/components/Divider.css +33 -0
- package/dist/packages/core/src/components/Divider.d.ts +13 -0
- package/dist/packages/core/src/components/Divider.js +14 -0
- package/dist/packages/core/src/components/Dropdown.css +175 -0
- package/dist/packages/core/src/components/Dropdown.d.ts +23 -0
- package/dist/packages/core/src/components/Dropdown.js +117 -0
- package/dist/packages/core/src/components/Effect/EffectPartyPopper.css +25 -0
- package/dist/packages/core/src/components/Effect/EffectPartyPopper.d.ts +11 -0
- package/dist/packages/core/src/components/Effect/EffectPartyPopper.js +298 -0
- package/dist/packages/core/src/components/Effect/EffectPartyPopperHost.d.ts +5 -0
- package/dist/packages/core/src/components/Effect/EffectPartyPopperHost.js +13 -0
- package/dist/packages/core/src/components/EmptyState.css +23 -0
- package/dist/packages/core/src/components/EmptyState.d.ts +19 -0
- package/dist/packages/core/src/components/EmptyState.js +7 -0
- package/dist/packages/core/src/components/ErrorState.css +2 -0
- package/dist/packages/core/src/components/ErrorState.d.ts +18 -0
- package/dist/packages/core/src/components/ErrorState.js +11 -0
- package/dist/packages/core/src/components/FileUpload.css +114 -0
- package/dist/packages/core/src/components/FileUpload.d.ts +25 -0
- package/dist/packages/core/src/components/FileUpload.js +111 -0
- package/dist/packages/core/src/components/FilterPanel.css +188 -0
- package/dist/packages/core/src/components/FilterPanel.d.ts +34 -0
- package/dist/packages/core/src/components/FilterPanel.js +82 -0
- package/dist/packages/core/src/components/FilterSectionInfo.d.ts +12 -0
- package/dist/packages/core/src/components/FilterSectionInfo.js +15 -0
- package/dist/packages/core/src/components/Footer.css +186 -0
- package/dist/packages/core/src/components/Footer.d.ts +18 -0
- package/dist/packages/core/src/components/Footer.js +19 -0
- package/dist/packages/core/src/components/Header.css +274 -0
- package/dist/packages/core/src/components/Header.d.ts +44 -0
- package/dist/packages/core/src/components/Header.js +98 -0
- package/dist/packages/core/src/components/HearingDeviceInfo.css +48 -0
- package/dist/packages/core/src/components/HearingDeviceInfo.d.ts +22 -0
- package/dist/packages/core/src/components/HearingDeviceInfo.js +13 -0
- package/dist/packages/core/src/components/Icon.d.ts +14 -0
- package/dist/packages/core/src/components/Icon.js +73 -0
- package/dist/packages/core/src/components/IconGridMenu.css +141 -0
- package/dist/packages/core/src/components/IconGridMenu.d.ts +20 -0
- package/dist/packages/core/src/components/IconGridMenu.js +45 -0
- package/dist/packages/core/src/components/LandingBottomSticky.css +114 -0
- package/dist/packages/core/src/components/LandingBottomSticky.d.ts +26 -0
- package/dist/packages/core/src/components/LandingBottomSticky.js +20 -0
- package/dist/packages/core/src/components/LandingHeader.css +192 -0
- package/dist/packages/core/src/components/LandingHeader.d.ts +67 -0
- package/dist/packages/core/src/components/LandingHeader.js +40 -0
- package/dist/packages/core/src/components/Loader.css +88 -0
- package/dist/packages/core/src/components/Loader.d.ts +14 -0
- package/dist/packages/core/src/components/Loader.js +12 -0
- package/dist/packages/core/src/components/NoticeBox.css +79 -0
- package/dist/packages/core/src/components/NoticeBox.d.ts +21 -0
- package/dist/packages/core/src/components/NoticeBox.js +19 -0
- package/dist/packages/core/src/components/PageTitle.css +27 -0
- package/dist/packages/core/src/components/PageTitle.d.ts +23 -0
- package/dist/packages/core/src/components/PageTitle.js +10 -0
- package/dist/packages/core/src/components/Pagination.css +11 -0
- package/dist/packages/core/src/components/Pagination.d.ts +22 -0
- package/dist/packages/core/src/components/Pagination.js +20 -0
- package/dist/packages/core/src/components/Panel.css +361 -0
- package/dist/packages/core/src/components/Panel.d.ts +166 -0
- package/dist/packages/core/src/components/Panel.js +162 -0
- package/dist/packages/core/src/components/PassCard/PassCard.css +289 -0
- package/dist/packages/core/src/components/PassCard/PassCard.d.ts +56 -0
- package/dist/packages/core/src/components/PassCard/PassCard.js +313 -0
- package/dist/packages/core/src/components/PassCard/PassCardBg.css +39 -0
- package/dist/packages/core/src/components/PassCard/PassCardBg.d.ts +8 -0
- package/dist/packages/core/src/components/PassCard/PassCardBg.js +6 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgIHAB.css +25 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgIHAB.d.ts +7 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgIHAB.js +18 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgLeftColorGrid.css +45 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgLeftColorGrid.d.ts +9 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgLeftColorGrid.js +19 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundLine.css +19 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundLine.d.ts +9 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundLine.js +23 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundLineV1.css +15 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundLineV1.d.ts +9 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundLineV1.js +24 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundMove.css +16 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundMove.d.ts +9 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundMove.js +31 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundMoveV1.css +16 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundMoveV1.d.ts +9 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgSoundMoveV1.js +32 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTalk.css +33 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTalk.d.ts +9 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTalk.js +18 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTalkV1.css +36 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTalkV1.d.ts +13 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTalkV1.js +22 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTheme.d.ts +38 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTheme.js +34 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTwoCircle.css +36 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTwoCircle.d.ts +9 -0
- package/dist/packages/core/src/components/PassCard/PassCardBgTwoCircle.js +18 -0
- package/dist/packages/core/src/components/PassCard/PassCard_Back.css +76 -0
- package/dist/packages/core/src/components/PassCard/PassCard_Back.d.ts +13 -0
- package/dist/packages/core/src/components/PassCard/PassCard_Back.js +20 -0
- package/dist/packages/core/src/components/PassCard/ihabOutlinePath.d.ts +12 -0
- package/dist/packages/core/src/components/PassCard/ihabOutlinePath.js +19 -0
- package/dist/packages/core/src/components/PassCard/passCardProduct.d.ts +48 -0
- package/dist/packages/core/src/components/PassCard/passCardProduct.js +56 -0
- package/dist/packages/core/src/components/PaymentPlan.css +318 -0
- package/dist/packages/core/src/components/PaymentPlan.d.ts +57 -0
- package/dist/packages/core/src/components/PaymentPlan.js +126 -0
- package/dist/packages/core/src/components/PersonCard.css +72 -0
- package/dist/packages/core/src/components/PersonCard.d.ts +27 -0
- package/dist/packages/core/src/components/PersonCard.js +11 -0
- package/dist/packages/core/src/components/Popup/ConfirmPopup.d.ts +58 -0
- package/dist/packages/core/src/components/Popup/ConfirmPopup.js +59 -0
- package/dist/packages/core/src/components/Popup/CouponInputPopup.css +28 -0
- package/dist/packages/core/src/components/Popup/CouponInputPopup.d.ts +8 -0
- package/dist/packages/core/src/components/Popup/CouponInputPopup.js +45 -0
- package/dist/packages/core/src/components/Popup/DeviceListPopup.css +78 -0
- package/dist/packages/core/src/components/Popup/DeviceListPopup.d.ts +28 -0
- package/dist/packages/core/src/components/Popup/DeviceListPopup.js +31 -0
- package/dist/packages/core/src/components/Popup/DeviceSideTable.d.ts +41 -0
- package/dist/packages/core/src/components/Popup/DeviceSideTable.js +92 -0
- package/dist/packages/core/src/components/Popup/ListPopup.css +44 -0
- package/dist/packages/core/src/components/Popup/ListPopup.d.ts +75 -0
- package/dist/packages/core/src/components/Popup/ListPopup.js +85 -0
- package/dist/packages/core/src/components/Popup/LoadTablePopup.css +248 -0
- package/dist/packages/core/src/components/Popup/LoadTablePopup.d.ts +12 -0
- package/dist/packages/core/src/components/Popup/LoadTablePopup.js +86 -0
- package/dist/packages/core/src/components/Popup/Popup.css +136 -0
- package/dist/packages/core/src/components/Popup/Popup.d.ts +77 -0
- package/dist/packages/core/src/components/Popup/Popup.js +135 -0
- package/dist/packages/core/src/components/Popup/SaveTablePopup.css +32 -0
- package/dist/packages/core/src/components/Popup/SaveTablePopup.d.ts +25 -0
- package/dist/packages/core/src/components/Popup/SaveTablePopup.js +55 -0
- package/dist/packages/core/src/components/Popup/TrainingResultPopup.css +277 -0
- package/dist/packages/core/src/components/Popup/TrainingResultPopup.d.ts +14 -0
- package/dist/packages/core/src/components/Popup/TrainingResultPopup.js +104 -0
- package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.css +119 -0
- package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.d.ts +12 -0
- package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.js +73 -0
- package/dist/packages/core/src/components/Popup/customerDetailUtils.d.ts +19 -0
- package/dist/packages/core/src/components/Popup/customerDetailUtils.js +45 -0
- package/dist/packages/core/src/components/ProgressBar.css +114 -0
- package/dist/packages/core/src/components/ProgressBar.d.ts +65 -0
- package/dist/packages/core/src/components/ProgressBar.js +51 -0
- package/dist/packages/core/src/components/ProgressIndicator.css +41 -0
- package/dist/packages/core/src/components/ProgressIndicator.d.ts +18 -0
- package/dist/packages/core/src/components/ProgressIndicator.js +45 -0
- package/dist/packages/core/src/components/PromoBanner.css +54 -0
- package/dist/packages/core/src/components/PromoBanner.d.ts +30 -0
- package/dist/packages/core/src/components/PromoBanner.js +54 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBg.css +8 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDark.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDark.d.ts +11 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDark.js +20 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDeep.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDeep.d.ts +10 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDeep.js +19 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDiagonal.css +10 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDiagonal.d.ts +10 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDiagonal.js +19 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDots.css +5 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDots.d.ts +10 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDots.js +19 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgInstagram.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgInstagram.d.ts +11 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgInstagram.js +20 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgMain.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgMain.d.ts +12 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgMain.js +21 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgNaver.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgNaver.d.ts +11 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgNaver.js +20 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgOutline.css +16 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgOutline.d.ts +11 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgOutline.js +20 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgRadial.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgRadial.d.ts +10 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgRadial.js +19 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoft.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoft.d.ts +12 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoft.js +21 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoftSub.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoftSub.d.ts +10 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoftSub.js +19 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSub.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSub.d.ts +10 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSub.js +19 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSuccess.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSuccess.d.ts +11 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSuccess.js +20 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgTheme.d.ts +32 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgTheme.js +29 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgWarm.css +3 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgWarm.d.ts +11 -0
- package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgWarm.js +20 -0
- package/dist/packages/core/src/components/PromoBannerBg/promoBannerBg.d.ts +21 -0
- package/dist/packages/core/src/components/PromoBannerBg/promoBannerBg.js +49 -0
- package/dist/packages/core/src/components/PublicationCard.css +70 -0
- package/dist/packages/core/src/components/PublicationCard.d.ts +31 -0
- package/dist/packages/core/src/components/PublicationCard.js +11 -0
- package/dist/packages/core/src/components/Radio.css +64 -0
- package/dist/packages/core/src/components/Radio.d.ts +13 -0
- package/dist/packages/core/src/components/Radio.js +9 -0
- package/dist/packages/core/src/components/RadioGroup.css +14 -0
- package/dist/packages/core/src/components/RadioGroup.d.ts +21 -0
- package/dist/packages/core/src/components/RadioGroup.js +14 -0
- package/dist/packages/core/src/components/Rating.css +69 -0
- package/dist/packages/core/src/components/Rating.d.ts +21 -0
- package/dist/packages/core/src/components/Rating.js +51 -0
- package/dist/packages/core/src/components/RingChart.css +50 -0
- package/dist/packages/core/src/components/RingChart.d.ts +68 -0
- package/dist/packages/core/src/components/RingChart.js +57 -0
- package/dist/packages/core/src/components/SearchSummary.css +62 -0
- package/dist/packages/core/src/components/SearchSummary.d.ts +32 -0
- package/dist/packages/core/src/components/SearchSummary.js +48 -0
- package/dist/packages/core/src/components/Section.css +73 -0
- package/dist/packages/core/src/components/Section.d.ts +16 -0
- package/dist/packages/core/src/components/Section.js +15 -0
- package/dist/packages/core/src/components/SectionHeader.css +87 -0
- package/dist/packages/core/src/components/SectionHeader.d.ts +31 -0
- package/dist/packages/core/src/components/SectionHeader.js +16 -0
- package/dist/packages/core/src/components/SegmentedControl.css +67 -0
- package/dist/packages/core/src/components/SegmentedControl.d.ts +26 -0
- package/dist/packages/core/src/components/SegmentedControl.js +13 -0
- package/dist/packages/core/src/components/ShortcutBadge.css +68 -0
- package/dist/packages/core/src/components/ShortcutBadge.d.ts +31 -0
- package/dist/packages/core/src/components/ShortcutBadge.js +23 -0
- package/dist/packages/core/src/components/SideNav.css +281 -0
- package/dist/packages/core/src/components/SideNav.d.ts +32 -0
- package/dist/packages/core/src/components/SideNav.js +92 -0
- package/dist/packages/core/src/components/Slider.css +184 -0
- package/dist/packages/core/src/components/Slider.d.ts +67 -0
- package/dist/packages/core/src/components/Slider.js +97 -0
- package/dist/packages/core/src/components/SoundCompass.css +138 -0
- package/dist/packages/core/src/components/SoundCompass.d.ts +42 -0
- package/dist/packages/core/src/components/SoundCompass.js +136 -0
- package/dist/packages/core/src/components/SplashLogo.css +32 -0
- package/dist/packages/core/src/components/SplashLogo.d.ts +35 -0
- package/dist/packages/core/src/components/SplashLogo.js +32 -0
- package/dist/packages/core/src/components/StatChart.css +83 -0
- package/dist/packages/core/src/components/StatChart.d.ts +26 -0
- package/dist/packages/core/src/components/StatChart.js +41 -0
- package/dist/packages/core/src/components/Table.css +158 -0
- package/dist/packages/core/src/components/Table.d.ts +94 -0
- package/dist/packages/core/src/components/Table.js +200 -0
- package/dist/packages/core/src/components/TableCell.css +12 -0
- package/dist/packages/core/src/components/TableField.css +60 -0
- package/dist/packages/core/src/components/Tabs.css +55 -0
- package/dist/packages/core/src/components/Tabs.d.ts +30 -0
- package/dist/packages/core/src/components/Tabs.js +55 -0
- package/dist/packages/core/src/components/TextField.css +266 -0
- package/dist/packages/core/src/components/TextField.d.ts +86 -0
- package/dist/packages/core/src/components/TextField.js +149 -0
- package/dist/packages/core/src/components/Timeline.css +62 -0
- package/dist/packages/core/src/components/Timeline.d.ts +26 -0
- package/dist/packages/core/src/components/Timeline.js +11 -0
- package/dist/packages/core/src/components/Toast.css +76 -0
- package/dist/packages/core/src/components/Toast.d.ts +10 -0
- package/dist/packages/core/src/components/Toast.js +19 -0
- package/dist/packages/core/src/components/Toggle.css +61 -0
- package/dist/packages/core/src/components/Toggle.d.ts +18 -0
- package/dist/packages/core/src/components/Toggle.js +7 -0
- package/dist/packages/core/src/components/Toolbar.css +86 -0
- package/dist/packages/core/src/components/Toolbar.d.ts +52 -0
- package/dist/packages/core/src/components/Toolbar.js +20 -0
- package/dist/packages/core/src/components/Tooltip/DebugTooltip.css +27 -0
- package/dist/packages/core/src/components/Tooltip/DebugTooltip.d.ts +12 -0
- package/dist/packages/core/src/components/Tooltip/DebugTooltip.js +79 -0
- package/dist/packages/core/src/components/Tooltip/DescriptionTooltip.css +50 -0
- package/dist/packages/core/src/components/Tooltip/DescriptionTooltip.d.ts +16 -0
- package/dist/packages/core/src/components/Tooltip/DescriptionTooltip.js +11 -0
- package/dist/packages/core/src/components/Tooltip/InfoTooltip.css +39 -0
- package/dist/packages/core/src/components/Tooltip/InfoTooltip.d.ts +13 -0
- package/dist/packages/core/src/components/Tooltip/InfoTooltip.js +10 -0
- package/dist/packages/core/src/components/Tooltip/MenuTooltip.css +93 -0
- package/dist/packages/core/src/components/Tooltip/MenuTooltip.d.ts +30 -0
- package/dist/packages/core/src/components/Tooltip/MenuTooltip.js +92 -0
- package/dist/packages/core/src/components/Tooltip/TextBoxTooltip.css +95 -0
- package/dist/packages/core/src/components/Tooltip/TextBoxTooltip.d.ts +13 -0
- package/dist/packages/core/src/components/Tooltip/TextBoxTooltip.js +55 -0
- package/dist/packages/core/src/components/Tooltip/Tooltip.css +120 -0
- package/dist/packages/core/src/components/Tooltip/Tooltip.d.ts +25 -0
- package/dist/packages/core/src/components/Tooltip/Tooltip.js +296 -0
- package/dist/packages/core/src/components/Tooltip/TrainingTooltip.css +67 -0
- package/dist/packages/core/src/components/Tooltip/TrainingTooltip.d.ts +16 -0
- package/dist/packages/core/src/components/Tooltip/TrainingTooltip.js +40 -0
- package/dist/packages/core/src/components/Tooltip/WordImageTooltip.css +61 -0
- package/dist/packages/core/src/components/Tooltip/WordImageTooltip.d.ts +12 -0
- package/dist/packages/core/src/components/Tooltip/WordImageTooltip.js +39 -0
- package/dist/packages/core/src/components/Tooltip/tooltipConstants.d.ts +44 -0
- package/dist/packages/core/src/components/Tooltip/tooltipConstants.js +38 -0
- package/dist/packages/core/src/components/TopBanner.css +100 -0
- package/dist/packages/core/src/components/TopBanner.d.ts +25 -0
- package/dist/packages/core/src/components/TopBanner.js +36 -0
- package/dist/packages/core/src/components/Training/AudioPlayerWaveForm.d.ts +17 -0
- package/dist/packages/core/src/components/Training/AudioPlayerWaveForm.js +237 -0
- package/dist/packages/core/src/components/Training/CategoryIcon.css +85 -0
- package/dist/packages/core/src/components/Training/CategoryIcon.d.ts +16 -0
- package/dist/packages/core/src/components/Training/CategoryIcon.js +79 -0
- package/dist/packages/core/src/components/Training/NoisePlayerContext.d.ts +43 -0
- package/dist/packages/core/src/components/Training/NoisePlayerContext.js +26 -0
- package/dist/packages/core/src/components/Training/NoiseSettingsTooltip.css +52 -0
- package/dist/packages/core/src/components/Training/NoiseSettingsTooltip.d.ts +13 -0
- package/dist/packages/core/src/components/Training/NoiseSettingsTooltip.js +81 -0
- package/dist/packages/core/src/components/Training/TrainingBlock.css +33 -0
- package/dist/packages/core/src/components/Training/TrainingBlock.d.ts +45 -0
- package/dist/packages/core/src/components/Training/TrainingBlock.js +44 -0
- package/dist/packages/core/src/components/Training/TrainingBlockButton.css +337 -0
- package/dist/packages/core/src/components/Training/TrainingBlockButton.d.ts +5 -0
- package/dist/packages/core/src/components/Training/TrainingBlockButton.js +193 -0
- package/dist/packages/core/src/components/Training/TrainingCard.css +178 -0
- package/dist/packages/core/src/components/Training/TrainingCard.d.ts +24 -0
- package/dist/packages/core/src/components/Training/TrainingCard.js +29 -0
- package/dist/packages/core/src/components/Training/TrainingCardGroup.css +73 -0
- package/dist/packages/core/src/components/Training/TrainingCardGroup.d.ts +41 -0
- package/dist/packages/core/src/components/Training/TrainingCardGroup.js +16 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopup.css +210 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopup.d.ts +91 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopup.js +799 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopupBottom.css +45 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopupBottom.d.ts +14 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopupBottom.js +60 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopupContext.d.ts +13 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopupContext.js +12 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopupTitle.css +77 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopupTitle.d.ts +21 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopupTitle.js +41 -0
- package/dist/packages/core/src/components/Training/TrainingStep.css +236 -0
- package/dist/packages/core/src/components/Training/TrainingStep.d.ts +15 -0
- package/dist/packages/core/src/components/Training/TrainingStep.js +89 -0
- package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.css +320 -0
- package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.d.ts +5 -0
- package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.js +971 -0
- package/dist/packages/core/src/components/Training/TrainingStepBullet.css +148 -0
- package/dist/packages/core/src/components/Training/TrainingStepBullet.d.ts +6 -0
- package/dist/packages/core/src/components/Training/TrainingStepBullet.js +11 -0
- package/dist/packages/core/src/components/Training/TrainingStepCard.css +0 -0
- package/dist/packages/core/src/components/Training/TrainingStepCard.d.ts +36 -0
- package/dist/packages/core/src/components/Training/TrainingStepCard.js +110 -0
- package/dist/packages/core/src/components/Training/TrainingStepCardOrder.d.ts +15 -0
- package/dist/packages/core/src/components/Training/TrainingStepCardOrder.js +58 -0
- package/dist/packages/core/src/components/Training/TrainingStepComponents.d.ts +35 -0
- package/dist/packages/core/src/components/Training/TrainingStepComponents.js +60 -0
- package/dist/packages/core/src/components/Training/TrainingStepConfirm.d.ts +24 -0
- package/dist/packages/core/src/components/Training/TrainingStepConfirm.js +117 -0
- package/dist/packages/core/src/components/Training/TrainingStepConfirmWithText.d.ts +16 -0
- package/dist/packages/core/src/components/Training/TrainingStepConfirmWithText.js +60 -0
- package/dist/packages/core/src/components/Training/TrainingStepListen.d.ts +27 -0
- package/dist/packages/core/src/components/Training/TrainingStepListen.js +13 -0
- package/dist/packages/core/src/components/Training/TrainingStepOrderList.css +221 -0
- package/dist/packages/core/src/components/Training/TrainingStepOrderList.d.ts +7 -0
- package/dist/packages/core/src/components/Training/TrainingStepOrderList.js +445 -0
- package/dist/packages/core/src/components/Training/TrainingStepTextBox.css +111 -0
- package/dist/packages/core/src/components/Training/TrainingStepTextBox.d.ts +8 -0
- package/dist/packages/core/src/components/Training/TrainingStepTextBox.js +74 -0
- package/dist/packages/core/src/components/Training/TrainingStepTitle.css +89 -0
- package/dist/packages/core/src/components/Training/TrainingStepTitle.d.ts +21 -0
- package/dist/packages/core/src/components/Training/TrainingStepTitle.js +91 -0
- package/dist/packages/core/src/components/Training/TrainingWordCard.css +266 -0
- package/dist/packages/core/src/components/Training/TrainingWordCard.d.ts +43 -0
- package/dist/packages/core/src/components/Training/TrainingWordCard.js +229 -0
- package/dist/packages/core/src/components/Training/WordTablePopup.css +56 -0
- package/dist/packages/core/src/components/Training/WordTablePopup.d.ts +61 -0
- package/dist/packages/core/src/components/Training/WordTablePopup.js +105 -0
- package/dist/packages/core/src/components/Training/audioPlaybackRules.d.ts +95 -0
- package/dist/packages/core/src/components/Training/audioPlaybackRules.js +125 -0
- package/dist/packages/core/src/components/Training/audioWaits.d.ts +27 -0
- package/dist/packages/core/src/components/Training/audioWaits.js +64 -0
- package/dist/packages/core/src/components/Training/currentSound.d.ts +26 -0
- package/dist/packages/core/src/components/Training/currentSound.js +46 -0
- package/dist/packages/core/src/components/Training/pagePopupTiming.d.ts +17 -0
- package/dist/packages/core/src/components/Training/pagePopupTiming.js +17 -0
- package/dist/packages/core/src/components/Training/trainingBlockButtonTypes.d.ts +79 -0
- package/dist/packages/core/src/components/Training/trainingBlockButtonTypes.js +27 -0
- package/dist/packages/core/src/components/Training/trainingMissStats.d.ts +148 -0
- package/dist/packages/core/src/components/Training/trainingMissStats.js +163 -0
- package/dist/packages/core/src/components/Training/trainingPopupUtils.d.ts +108 -0
- package/dist/packages/core/src/components/Training/trainingPopupUtils.js +226 -0
- package/dist/packages/core/src/components/Training/trainingScenario.d.ts +42 -0
- package/dist/packages/core/src/components/Training/trainingScenario.js +25 -0
- package/dist/packages/core/src/components/Training/trainingStepAudioPlayerTypes.d.ts +37 -0
- package/dist/packages/core/src/components/Training/trainingStepAudioPlayerTypes.js +20 -0
- package/dist/packages/core/src/components/Training/trainingStepOrderListTypes.d.ts +34 -0
- package/dist/packages/core/src/components/Training/trainingStepOrderListTypes.js +5 -0
- package/dist/packages/core/src/components/Training/useAnchorRect.d.ts +26 -0
- package/dist/packages/core/src/components/Training/useAnchorRect.js +52 -0
- package/dist/packages/core/src/components/Training/useAudioPreview.d.ts +11 -0
- package/dist/packages/core/src/components/Training/useAudioPreview.js +178 -0
- package/dist/packages/core/src/components/Training/useNoiseFade.d.ts +24 -0
- package/dist/packages/core/src/components/Training/useNoiseFade.js +303 -0
- package/dist/packages/core/src/components/Training/useObjectUrls.d.ts +25 -0
- package/dist/packages/core/src/components/Training/useObjectUrls.js +56 -0
- package/dist/packages/core/src/components/Training/useProgressTicker.d.ts +33 -0
- package/dist/packages/core/src/components/Training/useProgressTicker.js +74 -0
- package/dist/packages/core/src/components/Training/useTTSPlayback.d.ts +30 -0
- package/dist/packages/core/src/components/Training/useTTSPlayback.js +172 -0
- package/dist/packages/core/src/components/Training/useWaveReady.d.ts +36 -0
- package/dist/packages/core/src/components/Training/useWaveReady.js +65 -0
- package/dist/packages/core/src/components/UpdateAlert.css +116 -0
- package/dist/packages/core/src/components/UpdateAlert.d.ts +23 -0
- package/dist/packages/core/src/components/UpdateAlert.js +25 -0
- package/dist/packages/core/src/components/Word/ContrastFilterPanel.d.ts +25 -0
- package/dist/packages/core/src/components/Word/ContrastFilterPanel.js +69 -0
- package/dist/packages/core/src/components/Word/PhonemeFilterPanel.d.ts +24 -0
- package/dist/packages/core/src/components/Word/PhonemeFilterPanel.js +15 -0
- package/dist/packages/core/src/components/Word/PhonemeSelectBlock.css +272 -0
- package/dist/packages/core/src/components/Word/PhonemeSelectBlock.d.ts +45 -0
- package/dist/packages/core/src/components/Word/PhonemeSelectBlock.js +71 -0
- package/dist/packages/core/src/components/Word/TableFilterPanel.d.ts +56 -0
- package/dist/packages/core/src/components/Word/TableFilterPanel.js +42 -0
- package/dist/packages/core/src/components/Word/WordSearchFilterPanel.d.ts +23 -0
- package/dist/packages/core/src/components/Word/WordSearchFilterPanel.js +14 -0
- package/dist/packages/core/src/components/Word/WordSearchResultBlock.css +130 -0
- package/dist/packages/core/src/components/Word/WordSearchResultBlock.d.ts +47 -0
- package/dist/packages/core/src/components/Word/WordSearchResultBlock.js +141 -0
- package/dist/packages/core/src/components/Word/WordTableBlock.css +85 -0
- package/dist/packages/core/src/components/Word/WordTableBlock.d.ts +5 -0
- package/dist/packages/core/src/components/Word/WordTableBlock.js +297 -0
- package/dist/packages/core/src/components/Word/WordTableButton.css +185 -0
- package/dist/packages/core/src/components/Word/WordTableButton.d.ts +48 -0
- package/dist/packages/core/src/components/Word/WordTableButton.js +28 -0
- package/dist/packages/core/src/components/Word/WordTableThumbnail.css +56 -0
- package/dist/packages/core/src/components/Word/WordTableThumbnail.d.ts +10 -0
- package/dist/packages/core/src/components/Word/WordTableThumbnail.js +21 -0
- package/dist/packages/core/src/components/Word/generatedDraft.d.ts +39 -0
- package/dist/packages/core/src/components/Word/generatedDraft.js +69 -0
- package/dist/packages/core/src/components/Word/phonemeSelectBlockUtils.d.ts +14 -0
- package/dist/packages/core/src/components/Word/phonemeSelectBlockUtils.js +10 -0
- package/dist/packages/core/src/components/Word/useWordTableDisplaySettings.d.ts +35 -0
- package/dist/packages/core/src/components/Word/useWordTableDisplaySettings.js +82 -0
- package/dist/packages/core/src/components/Word/useWordTablePrint.d.ts +31 -0
- package/dist/packages/core/src/components/Word/useWordTablePrint.js +43 -0
- package/dist/packages/core/src/components/Word/wordScoreStats.d.ts +77 -0
- package/dist/packages/core/src/components/Word/wordScoreStats.js +100 -0
- package/dist/packages/core/src/components/Word/wordTableBlockTypes.d.ts +85 -0
- package/dist/packages/core/src/components/Word/wordTableBlockTypes.js +3 -0
- package/dist/packages/core/src/components/Word/wordTablePrint.d.ts +14 -0
- package/dist/packages/core/src/components/Word/wordTablePrint.js +210 -0
- package/dist/packages/core/src/components/Word/wordTableRecommend.d.ts +67 -0
- package/dist/packages/core/src/components/Word/wordTableRecommend.js +91 -0
- package/dist/packages/core/src/components/Word/wordTableReview.d.ts +49 -0
- package/dist/packages/core/src/components/Word/wordTableReview.js +112 -0
- package/dist/packages/core/src/components/Word/wordTableScoring.d.ts +100 -0
- package/dist/packages/core/src/components/Word/wordTableScoring.js +126 -0
- package/dist/packages/core/src/components/Word/wordTableSettings.d.ts +56 -0
- package/dist/packages/core/src/components/Word/wordTableSettings.js +140 -0
- package/dist/packages/core/src/components/WordTable.css +424 -0
- package/dist/packages/core/src/components/WordTable.d.ts +75 -0
- package/dist/packages/core/src/components/WordTable.js +184 -0
- package/dist/packages/core/src/components/barChartData.d.ts +48 -0
- package/dist/packages/core/src/components/barChartData.js +111 -0
- package/dist/packages/core/src/components/barChartTypes.d.ts +82 -0
- package/dist/packages/core/src/components/barChartTypes.js +22 -0
- package/dist/packages/core/src/components/buttonTypes.d.ts +102 -0
- package/dist/packages/core/src/components/buttonTypes.js +1 -0
- package/dist/packages/core/src/components/tableTrackList.d.ts +9 -0
- package/dist/packages/core/src/components/tableTrackList.js +32 -0
- package/dist/packages/core/src/components/useAnchoredMenu.d.ts +28 -0
- package/dist/packages/core/src/components/useAnchoredMenu.js +72 -0
- package/dist/packages/core/src/components/useBarChartControl.d.ts +8 -0
- package/dist/packages/core/src/components/useBarChartControl.js +76 -0
- package/dist/packages/core/src/components/useCalendarMonth.d.ts +12 -0
- package/dist/packages/core/src/components/useCalendarMonth.js +50 -0
- package/dist/packages/core/src/components/useComboboxSuggestions.d.ts +22 -0
- package/dist/packages/core/src/components/useComboboxSuggestions.js +60 -0
- package/dist/packages/core/src/components/useFitScale.d.ts +16 -0
- package/dist/packages/core/src/components/useFitScale.js +43 -0
- package/dist/packages/core/src/components/useSoundCompassExam.d.ts +54 -0
- package/dist/packages/core/src/components/useSoundCompassExam.js +128 -0
- package/dist/packages/core/src/components/useToastLifecycle.d.ts +16 -0
- package/dist/packages/core/src/components/useToastLifecycle.js +140 -0
- package/dist/packages/core/src/components/wordTableLayout.d.ts +76 -0
- package/dist/packages/core/src/components/wordTableLayout.js +162 -0
- package/dist/packages/core/src/components.d.ts +314 -0
- package/dist/packages/core/src/components.js +232 -0
- package/dist/packages/core/src/context/I18nContext.d.ts +11 -0
- package/dist/packages/core/src/context/I18nContext.js +20 -0
- package/dist/packages/core/src/context/I18nProvider.d.ts +9 -0
- package/dist/packages/core/src/context/I18nProvider.js +15 -0
- package/dist/packages/core/src/context/WordDataContext.d.ts +25 -0
- package/dist/packages/core/src/context/WordDataContext.js +6 -0
- package/dist/packages/core/src/context/WordDataProvider.d.ts +5 -0
- package/dist/packages/core/src/context/WordDataProvider.js +5 -0
- package/dist/packages/core/src/hooks/bodyScrollLock.d.ts +5 -0
- package/dist/packages/core/src/hooks/bodyScrollLock.js +62 -0
- package/dist/packages/core/src/hooks/escStack.d.ts +2 -0
- package/dist/packages/core/src/hooks/escStack.js +38 -0
- package/dist/packages/core/src/hooks/useBackgroundUrl.d.ts +2 -0
- package/dist/packages/core/src/hooks/useBackgroundUrl.js +13 -0
- package/dist/packages/core/src/hooks/useCacheManagement.d.ts +34 -0
- package/dist/packages/core/src/hooks/useCacheManagement.js +107 -0
- package/dist/packages/core/src/hooks/useDailyTrainingSelection.d.ts +17 -0
- package/dist/packages/core/src/hooks/useDailyTrainingSelection.js +87 -0
- package/dist/packages/core/src/hooks/useDeviceManagement.d.ts +37 -0
- package/dist/packages/core/src/hooks/useDeviceManagement.js +40 -0
- package/dist/packages/core/src/hooks/useDocumentTitle.d.ts +22 -0
- package/dist/packages/core/src/hooks/useDocumentTitle.js +49 -0
- package/dist/packages/core/src/hooks/useEditableList.d.ts +20 -0
- package/dist/packages/core/src/hooks/useEditableList.js +73 -0
- package/dist/packages/core/src/hooks/useEscToClose.d.ts +19 -0
- package/dist/packages/core/src/hooks/useEscToClose.js +30 -0
- package/dist/packages/core/src/hooks/useFocusTrap.d.ts +19 -0
- package/dist/packages/core/src/hooks/useFocusTrap.js +50 -0
- package/dist/packages/core/src/hooks/useFontScale.d.ts +20 -0
- package/dist/packages/core/src/hooks/useFontScale.js +51 -0
- package/dist/packages/core/src/hooks/useHoverAnchor.d.ts +33 -0
- package/dist/packages/core/src/hooks/useHoverAnchor.js +49 -0
- package/dist/packages/core/src/hooks/useIcon.d.ts +7 -0
- package/dist/packages/core/src/hooks/useIcon.js +124 -0
- package/dist/packages/core/src/hooks/useLatestRef.d.ts +12 -0
- package/dist/packages/core/src/hooks/useLatestRef.js +17 -0
- package/dist/packages/core/src/hooks/useLucideIcon.d.ts +15 -0
- package/dist/packages/core/src/hooks/useLucideIcon.js +71 -0
- package/dist/packages/core/src/hooks/useMediaQuery.d.ts +17 -0
- package/dist/packages/core/src/hooks/useMediaQuery.js +45 -0
- package/dist/packages/core/src/hooks/usePagedList.d.ts +23 -0
- package/dist/packages/core/src/hooks/usePagedList.js +26 -0
- package/dist/packages/core/src/hooks/useParentBgTheme.d.ts +8 -0
- package/dist/packages/core/src/hooks/useParentBgTheme.js +18 -0
- package/dist/packages/core/src/hooks/usePasswordChange.d.ts +28 -0
- package/dist/packages/core/src/hooks/usePasswordChange.js +54 -0
- package/dist/packages/core/src/hooks/useRelativeDay.d.ts +12 -0
- package/dist/packages/core/src/hooks/useRelativeDay.js +30 -0
- package/dist/packages/core/src/hooks/useTablePaging.d.ts +46 -0
- package/dist/packages/core/src/hooks/useTablePaging.js +63 -0
- package/dist/packages/core/src/hooks/useToastState.d.ts +15 -0
- package/dist/packages/core/src/hooks/useToastState.js +29 -0
- package/dist/packages/core/src/hooks/useTrainingSessionLog.d.ts +7 -0
- package/dist/packages/core/src/hooks/useTrainingSessionLog.js +26 -0
- package/dist/packages/core/src/hooks/useTrainingTypeLabels.d.ts +16 -0
- package/dist/packages/core/src/hooks/useTrainingTypeLabels.js +25 -0
- package/dist/packages/core/src/hooks/useVisitAllPanel.d.ts +30 -0
- package/dist/packages/core/src/hooks/useVisitAllPanel.js +43 -0
- package/dist/packages/core/src/hooks/useVisitHistory.d.ts +38 -0
- package/dist/packages/core/src/hooks/useVisitHistory.js +59 -0
- package/dist/packages/core/src/hooks/useVisitSchedule.d.ts +31 -0
- package/dist/packages/core/src/hooks/useVisitSchedule.js +101 -0
- package/dist/packages/core/src/hooks/useWindowEvent.d.ts +11 -0
- package/dist/packages/core/src/hooks/useWindowEvent.js +27 -0
- package/dist/packages/core/src/hooks/useWordAttributeFilter.d.ts +70 -0
- package/dist/packages/core/src/hooks/useWordAttributeFilter.js +115 -0
- package/dist/packages/core/src/hooks/useWordDataStats.d.ts +22 -0
- package/dist/packages/core/src/hooks/useWordDataStats.js +40 -0
- package/dist/packages/core/src/hooks/useWordImage.d.ts +19 -0
- package/dist/packages/core/src/hooks/useWordImage.js +28 -0
- package/dist/packages/core/src/hooks/useWordMeanings.d.ts +39 -0
- package/dist/packages/core/src/hooks/useWordMeanings.js +62 -0
- package/dist/packages/core/src/hooks/useWordTrainingDataGeneration.d.ts +34 -0
- package/dist/packages/core/src/hooks/useWordTrainingDataGeneration.js +98 -0
- package/dist/packages/core/src/hooks/useWordTrainingFilter.d.ts +91 -0
- package/dist/packages/core/src/hooks/useWordTrainingFilter.js +549 -0
- package/dist/packages/core/src/hooks/wordTrainingFilterModel.d.ts +61 -0
- package/dist/packages/core/src/hooks/wordTrainingFilterModel.js +102 -0
- package/dist/packages/core/src/hooks.d.ts +27 -0
- package/dist/packages/core/src/hooks.js +28 -0
- package/dist/packages/core/src/i18n/index.d.ts +21 -0
- package/dist/packages/core/src/i18n/index.js +68 -0
- package/dist/packages/core/src/i18n/locales/en.json +4055 -0
- package/dist/packages/core/src/i18n/locales/ko.json +4052 -0
- package/dist/packages/core/src/icon/none.svg +4 -0
- package/dist/packages/core/src/icon/null.svg +3 -0
- package/dist/packages/core/src/index.d.ts +16 -0
- package/dist/packages/core/src/index.js +25 -0
- package/dist/packages/core/src/logo/Logo_APEB.svg +53 -0
- package/dist/packages/core/src/logo/Logo_APEB_black.svg +42 -0
- package/dist/packages/core/src/logo/Logo_APEB_white.svg +42 -0
- package/dist/packages/core/src/logo/Logo_HTP_kr.svg +21 -0
- package/dist/packages/core/src/logo/Logo_HTP_kr_black.svg +17 -0
- package/dist/packages/core/src/logo/Logo_HTP_kr_white.svg +17 -0
- package/dist/packages/core/src/logo/Logo_IHAB_en.svg +18 -0
- package/dist/packages/core/src/logo/Logo_IHAB_en_black.svg +14 -0
- package/dist/packages/core/src/logo/Logo_IHAB_en_white.svg +14 -0
- package/dist/packages/core/src/logo/Logo_IHAB_kr.svg +18 -0
- package/dist/packages/core/src/logo/Logo_IHAB_kr_black.svg +14 -0
- package/dist/packages/core/src/logo/Logo_IHAB_kr_white.svg +14 -0
- package/dist/packages/core/src/logo/Logo_SDS_kr.svg +22 -0
- package/dist/packages/core/src/logo/Logo_SDS_kr_black.svg +18 -0
- package/dist/packages/core/src/logo/Logo_SDS_kr_white.svg +18 -0
- package/dist/packages/core/src/logo/Logo_speechearManager_kr.svg +20 -0
- package/dist/packages/core/src/logo/Logo_speechearManager_kr_black.svg +21 -0
- package/dist/packages/core/src/logo/Logo_speechearManager_kr_textWhite.svg +45 -0
- package/dist/packages/core/src/logo/Logo_speechearManager_kr_white.svg +21 -0
- package/dist/packages/core/src/logo/Logo_speechear_kr.svg +17 -0
- package/dist/packages/core/src/logo/Logo_speechear_kr_black.svg +16 -0
- package/dist/packages/core/src/logo/Logo_speechear_kr_textWhite.svg +42 -0
- package/dist/packages/core/src/logo/Logo_speechear_kr_white.svg +16 -0
- package/dist/packages/core/src/logo/Symbol_APEB.svg +34 -0
- package/dist/packages/core/src/logo/Symbol_APEB_black.svg +15 -0
- package/dist/packages/core/src/logo/Symbol_APEB_white.svg +15 -0
- package/dist/packages/core/src/logo/Symbol_HTP.svg +14 -0
- package/dist/packages/core/src/logo/Symbol_HTP_black.svg +10 -0
- package/dist/packages/core/src/logo/Symbol_HTP_white.svg +10 -0
- package/dist/packages/core/src/logo/Symbol_IHAB.svg +14 -0
- package/dist/packages/core/src/logo/Symbol_IHAB_black.svg +10 -0
- package/dist/packages/core/src/logo/Symbol_IHAB_white.svg +10 -0
- package/dist/packages/core/src/logo/Symbol_SDS.svg +14 -0
- package/dist/packages/core/src/logo/Symbol_SDS_black.svg +10 -0
- package/dist/packages/core/src/logo/Symbol_SDS_white.svg +10 -0
- package/dist/packages/core/src/logo/Symbol_speechear.svg +15 -0
- package/dist/packages/core/src/logo/Symbol_speechear_black.svg +16 -0
- package/dist/packages/core/src/logo/Symbol_speechear_white.svg +16 -0
- package/dist/packages/core/src/logo/qr_speechear.svg +1 -0
- package/dist/packages/core/src/sounds/noiseAssets.d.ts +6 -0
- package/dist/packages/core/src/sounds/noiseAssets.js +24 -0
- package/dist/packages/core/src/styles.css +144 -0
- package/dist/packages/core/src/tokens.css +407 -0
- package/dist/packages/core/src/types/audio.d.ts +11 -0
- package/dist/packages/core/src/types/audio.js +1 -0
- package/dist/packages/core/src/types/device.d.ts +10 -0
- package/dist/packages/core/src/types/device.js +1 -0
- package/dist/packages/core/src/types/filterPanel.d.ts +63 -0
- package/dist/packages/core/src/types/filterPanel.js +8 -0
- package/dist/packages/core/src/types/geometry.d.ts +14 -0
- package/dist/packages/core/src/types/geometry.js +1 -0
- package/dist/packages/core/src/types/training.d.ts +131 -0
- package/dist/packages/core/src/types/training.js +1 -0
- package/dist/packages/core/src/types/wordSearch.d.ts +49 -0
- package/dist/packages/core/src/types/wordSearch.js +1 -0
- package/dist/packages/core/src/types.d.ts +3 -0
- package/dist/packages/core/src/types.js +1 -0
- package/dist/packages/core/src/utils/CategoryData.d.ts +91 -0
- package/dist/packages/core/src/utils/CategoryData.js +57 -0
- package/dist/packages/core/src/utils/array.d.ts +20 -0
- package/dist/packages/core/src/utils/array.js +36 -0
- package/dist/packages/core/src/utils/assets.d.ts +41 -0
- package/dist/packages/core/src/utils/assets.js +62 -0
- package/dist/packages/core/src/utils/audioMeter.d.ts +19 -0
- package/dist/packages/core/src/utils/audioMeter.js +70 -0
- package/dist/packages/core/src/utils/categories.d.ts +67 -0
- package/dist/packages/core/src/utils/categories.js +70 -0
- package/dist/packages/core/src/utils/clipboard.d.ts +10 -0
- package/dist/packages/core/src/utils/clipboard.js +46 -0
- package/dist/packages/core/src/utils/companyTypes.d.ts +2 -0
- package/dist/packages/core/src/utils/companyTypes.js +6 -0
- package/dist/packages/core/src/utils/csv.d.ts +22 -0
- package/dist/packages/core/src/utils/csv.js +35 -0
- package/dist/packages/core/src/utils/cx.d.ts +7 -0
- package/dist/packages/core/src/utils/cx.js +9 -0
- package/dist/packages/core/src/utils/dailySelectionUtils.d.ts +15 -0
- package/dist/packages/core/src/utils/dailySelectionUtils.js +68 -0
- package/dist/packages/core/src/utils/date.d.ts +86 -0
- package/dist/packages/core/src/utils/date.js +171 -0
- package/dist/packages/core/src/utils/deviceKind.d.ts +13 -0
- package/dist/packages/core/src/utils/deviceKind.js +19 -0
- package/dist/packages/core/src/utils/encoding.d.ts +26 -0
- package/dist/packages/core/src/utils/encoding.js +33 -0
- package/dist/packages/core/src/utils/errorMessage.d.ts +44 -0
- package/dist/packages/core/src/utils/errorMessage.js +63 -0
- package/dist/packages/core/src/utils/fontScale.d.ts +10 -0
- package/dist/packages/core/src/utils/fontScale.js +28 -0
- package/dist/packages/core/src/utils/format.d.ts +48 -0
- package/dist/packages/core/src/utils/format.js +122 -0
- package/dist/packages/core/src/utils/gameScoreLogger.d.ts +48 -0
- package/dist/packages/core/src/utils/gameScoreLogger.js +42 -0
- package/dist/packages/core/src/utils/getTrainingData.d.ts +61 -0
- package/dist/packages/core/src/utils/getTrainingData.js +156 -0
- package/dist/packages/core/src/utils/imageConfig.d.ts +48 -0
- package/dist/packages/core/src/utils/imageConfig.js +159 -0
- package/dist/packages/core/src/utils/josa.d.ts +29 -0
- package/dist/packages/core/src/utils/josa.js +103 -0
- package/dist/packages/core/src/utils/koreanPronunciation.d.ts +16 -0
- package/dist/packages/core/src/utils/koreanPronunciation.js +223 -0
- package/dist/packages/core/src/utils/koreanSyllable.d.ts +174 -0
- package/dist/packages/core/src/utils/koreanSyllable.js +654 -0
- package/dist/packages/core/src/utils/lucideIconSet.d.ts +16 -0
- package/dist/packages/core/src/utils/lucideIconSet.js +350 -0
- package/dist/packages/core/src/utils/lucideLoader.d.ts +44 -0
- package/dist/packages/core/src/utils/lucideLoader.js +76 -0
- package/dist/packages/core/src/utils/noiseSettingsStore.d.ts +22 -0
- package/dist/packages/core/src/utils/noiseSettingsStore.js +36 -0
- package/dist/packages/core/src/utils/phonemeConvert.d.ts +9 -0
- package/dist/packages/core/src/utils/phonemeConvert.js +53 -0
- package/dist/packages/core/src/utils/phonemeGroups.d.ts +22 -0
- package/dist/packages/core/src/utils/phonemeGroups.js +29 -0
- package/dist/packages/core/src/utils/phonemePairSearch.d.ts +22 -0
- package/dist/packages/core/src/utils/phonemePairSearch.js +583 -0
- package/dist/packages/core/src/utils/phonemePairSearchTypes.d.ts +46 -0
- package/dist/packages/core/src/utils/phonemePairSearchTypes.js +1 -0
- package/dist/packages/core/src/utils/planFeatures.d.ts +61 -0
- package/dist/packages/core/src/utils/planFeatures.js +168 -0
- package/dist/packages/core/src/utils/pronunciationConfig.d.ts +7 -0
- package/dist/packages/core/src/utils/pronunciationConfig.js +21 -0
- package/dist/packages/core/src/utils/savedWordTables.d.ts +18 -0
- package/dist/packages/core/src/utils/savedWordTables.js +70 -0
- package/dist/packages/core/src/utils/sortValue.d.ts +24 -0
- package/dist/packages/core/src/utils/sortValue.js +26 -0
- package/dist/packages/core/src/utils/speak.d.ts +7 -0
- package/dist/packages/core/src/utils/speak.js +35 -0
- package/dist/packages/core/src/utils/storage.d.ts +102 -0
- package/dist/packages/core/src/utils/storage.js +118 -0
- package/dist/packages/core/src/utils/theme.d.ts +11 -0
- package/dist/packages/core/src/utils/theme.js +28 -0
- package/dist/packages/core/src/utils/trainingItemResults.d.ts +60 -0
- package/dist/packages/core/src/utils/trainingItemResults.js +72 -0
- package/dist/packages/core/src/utils/trainingLogger.d.ts +58 -0
- package/dist/packages/core/src/utils/trainingLogger.js +50 -0
- package/dist/packages/core/src/utils/trainingPalette.d.ts +12 -0
- package/dist/packages/core/src/utils/trainingPalette.js +12 -0
- package/dist/packages/core/src/utils/ttsConfig.d.ts +78 -0
- package/dist/packages/core/src/utils/ttsConfig.js +89 -0
- package/dist/packages/core/src/utils/ttsResolver.d.ts +17 -0
- package/dist/packages/core/src/utils/ttsResolver.js +56 -0
- package/dist/packages/core/src/utils/wordContrast.d.ts +54 -0
- package/dist/packages/core/src/utils/wordContrast.js +198 -0
- package/dist/packages/core/src/utils/wordPairIndex.d.ts +26 -0
- package/dist/packages/core/src/utils/wordPairIndex.js +194 -0
- package/dist/packages/core/src/utils/wordPool.d.ts +34 -0
- package/dist/packages/core/src/utils/wordPool.js +20 -0
- package/dist/packages/core/src/utils/wordSuggestionPolicy.d.ts +55 -0
- package/dist/packages/core/src/utils/wordSuggestionPolicy.js +97 -0
- package/dist/packages/core/src/utils/wordTrainingGenerators.d.ts +122 -0
- package/dist/packages/core/src/utils/wordTrainingGenerators.js +560 -0
- package/dist/packages/core/src/utils/wordTrainingGroups.d.ts +10 -0
- package/dist/packages/core/src/utils/wordTrainingGroups.js +69 -0
- package/dist/packages/core/src/utils/wordTrainingPool.d.ts +51 -0
- package/dist/packages/core/src/utils/wordTrainingPool.js +436 -0
- package/dist/packages/core/src/utils/wordTrainingRuntime.d.ts +38 -0
- package/dist/packages/core/src/utils/wordTrainingRuntime.js +641 -0
- package/dist/packages/core/src/utils/wordTrainingRuntimeTypes.d.ts +89 -0
- package/dist/packages/core/src/utils/wordTrainingRuntimeTypes.js +77 -0
- package/dist/packages/core/src/utils.d.ts +57 -0
- package/dist/packages/core/src/utils.js +46 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/types.cjs.js +1 -0
- package/dist/types.esm.js +1 -0
- package/dist/utils.cjs.js +20 -0
- package/dist/utils.esm.js +20 -0
- package/package.json +171 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 대면 훈련에서 **무엇을 틀렸는지** 모아 읽는다. 화면도 통신도 없다.
|
|
3
|
+
*
|
|
4
|
+
* 단어표 채점(`wordScoreStats`)이 종이로 한 것을 세는 자리라면, 여기는 아이가 앱에서
|
|
5
|
+
* 푼 것을 세는 자리다. 치료사가 묻는 것은 같다 — *계속 걸리는 것이 무엇인가*,
|
|
6
|
+
* *다음 시간에 무엇을 볼까*. 그래서 셈의 결도 같게 맞췄다.
|
|
7
|
+
*
|
|
8
|
+
* ── 문항 행만 센다 ──
|
|
9
|
+
* `customer_training_result` 에는 세 가지가 섞여 있다. 문항 하나(`kind:'item'`),
|
|
10
|
+
* 판 전체 요약(`kind:'summary'`), 세션 시간(`kind:'time'`). 뒤의 둘은 `is_correct` 가
|
|
11
|
+
* 비어 있다. 그것을 '틀림' 으로 세면 한 판 할 때마다 오답이 두 개씩 늘어난다.
|
|
12
|
+
*
|
|
13
|
+
* ── 글자가 없으면 빼되, 뺐다고 말한다 ──
|
|
14
|
+
* 문항에 식별자를 남기기 시작한 것은 2026-08-30 부터다. 그 전 기록은 `item_title` 이
|
|
15
|
+
* 비어 있어 **무엇을 틀렸는지 보여 줄 수가 없다.** 조용히 빼면 화면의 수가 전부인 줄
|
|
16
|
+
* 알게 되므로 몇 건을 뺐는지 함께 돌려준다.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @public 문항별로 모아 **약한 것부터** 늘어놓는다.
|
|
20
|
+
*
|
|
21
|
+
* 정렬은 세 겹이다. 정답률이 낮은 것이 먼저이되, **같은 정답률이면 여러 번 푼 것을
|
|
22
|
+
* 앞에 둔다** — 한 번 틀린 것과 다섯 번 내리 틀린 것은 무게가 다르다. 그래도 같으면
|
|
23
|
+
* 글자순으로 못 박는다(그러지 않으면 다시 읽을 때마다 차례가 흔들려 보던 줄을 놓친다).
|
|
24
|
+
*/
|
|
25
|
+
export function summarizeMisses(records) {
|
|
26
|
+
const 모음 = new Map();
|
|
27
|
+
let counted = 0;
|
|
28
|
+
let skippedNoTitle = 0;
|
|
29
|
+
/* 최근 것을 알려면 시간순으로 훑어야 한다. 서버는 최신순으로 주지만 여기서 다시
|
|
30
|
+
정렬한다 — 부르는 쪽의 차례에 기대면 그쪽이 바뀔 때 조용히 어긋난다. */
|
|
31
|
+
const 시간순 = [...records].sort((a, b) => a.answeredAt.localeCompare(b.answeredAt));
|
|
32
|
+
for (const r of 시간순) {
|
|
33
|
+
// 요약·시간 행은 문항이 아니다. 틀림으로 세면 한 판마다 오답이 늘어난다.
|
|
34
|
+
if (r.isCorrect == null)
|
|
35
|
+
continue;
|
|
36
|
+
const title = r.itemTitle?.trim();
|
|
37
|
+
if (!title) {
|
|
38
|
+
skippedNoTitle++;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
counted++;
|
|
42
|
+
const id = r.itemId?.trim() || title;
|
|
43
|
+
const key = `${r.trainingType}|${id}`;
|
|
44
|
+
const cur = 모음.get(key) ?? {
|
|
45
|
+
trainingType: r.trainingType, itemId: id, title,
|
|
46
|
+
tried: 0, wrong: 0,
|
|
47
|
+
latestCorrect: r.isCorrect, latestAt: r.answeredAt, lastSelected: r.selected,
|
|
48
|
+
setIds: [],
|
|
49
|
+
};
|
|
50
|
+
cur.tried++;
|
|
51
|
+
if (!r.isCorrect)
|
|
52
|
+
cur.wrong++;
|
|
53
|
+
cur.title = title; // 지문이 고쳐졌으면 마지막에 보인 글자를 쓴다
|
|
54
|
+
cur.latestCorrect = r.isCorrect;
|
|
55
|
+
cur.latestAt = r.answeredAt;
|
|
56
|
+
cur.lastSelected = r.selected;
|
|
57
|
+
/* 세트는 **최근 것이 앞**이어야 한다 — 다음 훈련을 짤 때 옛 세트를 먼저 집으면
|
|
58
|
+
그 사이 세트가 바뀌었을 수 있다. 시간순으로 훑고 있으니 앞에 넣는다. */
|
|
59
|
+
if (r.setId && !cur.setIds.includes(r.setId))
|
|
60
|
+
cur.setIds.unshift(r.setId);
|
|
61
|
+
모음.set(key, cur);
|
|
62
|
+
}
|
|
63
|
+
const items = [...모음.entries()].map(([key, v]) => ({
|
|
64
|
+
key,
|
|
65
|
+
trainingType: v.trainingType,
|
|
66
|
+
itemId: v.itemId,
|
|
67
|
+
title: v.title,
|
|
68
|
+
tried: v.tried,
|
|
69
|
+
wrong: v.wrong,
|
|
70
|
+
rate: v.tried === 0 ? 0 : (v.tried - v.wrong) / v.tried,
|
|
71
|
+
latestCorrect: v.latestCorrect,
|
|
72
|
+
latestAt: v.latestAt,
|
|
73
|
+
lastSelected: v.lastSelected,
|
|
74
|
+
setIds: v.setIds,
|
|
75
|
+
}));
|
|
76
|
+
items.sort((a, b) => a.rate - b.rate || b.tried - a.tried || a.title.localeCompare(b.title));
|
|
77
|
+
return { items, counted, skippedNoTitle };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @public 다음에 무엇을 볼지.
|
|
81
|
+
*
|
|
82
|
+
* **아직 잡히지 않은 문항**을 고른다 — 마지막에 틀린 것들. 정답률이 낮아도 지난번에
|
|
83
|
+
* 맞혔다면 지금 급한 것이 아니고, 정답률이 높아도 방금 틀렸으면 다시 봐야 한다.
|
|
84
|
+
* "지난번에 어땠나"가 "여태 어땠나"보다 다음 시간을 정한다.
|
|
85
|
+
*
|
|
86
|
+
* `limit` 은 한 시간에 다룰 만한 양이다. 스무 개를 늘어놓으면 고르는 일이 다시 숙제가 된다.
|
|
87
|
+
*
|
|
88
|
+
* **이 저장소는 더 이상 이것으로 화면을 그리지 않는다.** 잘라 주는 편리함이 그대로
|
|
89
|
+
* '조용한 축소'가 됐기 때문이다 — 스물다섯 개가 밀려 있어도 화면에는 여덟만 뜨고,
|
|
90
|
+
* 세는 수까지 여덟로 적히면 나머지는 없는 것이 된다(실제로 그렇게 있었다). 지금은
|
|
91
|
+
* 못 잡은 것을 **전부** 표로 늘어놓고 쪽넘김을 둔다. 다음 훈련에 담을 양을 고르는
|
|
92
|
+
* 셈에는 여전히 쓸 수 있지만, **늘어놓는 데에는 쓰지 않는다.**
|
|
93
|
+
*/
|
|
94
|
+
export function nextMisses(items, limit = 8) {
|
|
95
|
+
return items.filter(i => !i.latestCorrect).slice(0, limit);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* @public 유형별로 가른다 — 다음 훈련 세트는 **한 유형 안에서** 짜야 하기 때문이다.
|
|
99
|
+
*
|
|
100
|
+
* 못 잡은 것이 많은 유형이 먼저. 같으면 유형 키로 갈라 차례를 못 박는다.
|
|
101
|
+
*/
|
|
102
|
+
export function missesByType(items) {
|
|
103
|
+
const 모음 = new Map();
|
|
104
|
+
for (const i of items) {
|
|
105
|
+
const arr = 모음.get(i.trainingType) ?? [];
|
|
106
|
+
arr.push(i);
|
|
107
|
+
모음.set(i.trainingType, arr);
|
|
108
|
+
}
|
|
109
|
+
const out = [...모음.entries()].map(([trainingType, list]) => ({
|
|
110
|
+
trainingType,
|
|
111
|
+
items: list,
|
|
112
|
+
pending: list.filter(i => !i.latestCorrect).length,
|
|
113
|
+
}));
|
|
114
|
+
out.sort((a, b) => b.pending - a.pending || a.trainingType.localeCompare(b.trainingType));
|
|
115
|
+
return out;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* @public 훈련 플랜(`managed_training_set`)의 `part1~4` 에 자리가 있는 유형.
|
|
119
|
+
*
|
|
120
|
+
* 플랜은 문장 훈련 넷만 담는다. **단어 유형은 여기 자리가 없고** 그릇이 아예 다르다
|
|
121
|
+
* (`word_training_card.set_ids`). 그래서 다음 훈련을 짤 때 둘을 갈라야 한다.
|
|
122
|
+
*/
|
|
123
|
+
export const SENTENCE_TRAINING_TYPES = ['LISTEN_IN_NOISE', 'SHORT_STORY', 'LONG_STORY', 'ORDERING_SENTENCE'];
|
|
124
|
+
/**
|
|
125
|
+
* @public 못 잡은 문항들이 **어느 세트에 들어 있었는지** 모아 다음 훈련거리를 짠다.
|
|
126
|
+
* 단어표의 복습표와 같은 결이다 — 틀린 것만 다시 돌린다.
|
|
127
|
+
*
|
|
128
|
+
* ── 세트는 **가장 최근 것 하나만** ──
|
|
129
|
+
* 같은 문항이 여러 세트에 있을 수 있는데 전부 담으면, 그 세트들에 든 *맞힌* 문항까지
|
|
130
|
+
* 딸려 와 결국 원래 훈련을 통째로 다시 하게 된다. 치료사가 마지막에 쓴 세트가 지금
|
|
131
|
+
* 아이에게 맞춰진 것이므로 그것을 쓴다(`setIds[0]` 이 최근 것이다).
|
|
132
|
+
*
|
|
133
|
+
* ── 세트가 안 남은 문항은 담지 못한다 ──
|
|
134
|
+
* 진입점이 세트 uuid 를 넘기기 시작한 것은 2026-08-30 부터다. 그 전 기록은 문항은
|
|
135
|
+
* 남았는데 **어느 세트였는지가 없어** 다시 꺼낼 방법이 없다. 조용히 빼면 "다섯 개가
|
|
136
|
+
* 밀렸다"고 해 놓고 두 개짜리 세트가 나온다 — 몇 개를 못 담았는지 함께 돌려준다.
|
|
137
|
+
*/
|
|
138
|
+
export function reviewSetPlan(items) {
|
|
139
|
+
const 모음 = new Map();
|
|
140
|
+
let noSet = 0;
|
|
141
|
+
for (const i of items) {
|
|
142
|
+
if (i.latestCorrect)
|
|
143
|
+
continue; // 지난번에 잡혔으면 다시 낼 것이 아니다
|
|
144
|
+
const setId = i.setIds[0];
|
|
145
|
+
if (!setId) {
|
|
146
|
+
noSet++;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const key = `${i.trainingType}|${setId}`;
|
|
150
|
+
const cur = 모음.get(key) ?? { setId, trainingType: i.trainingType, pending: 0 };
|
|
151
|
+
cur.pending++;
|
|
152
|
+
모음.set(key, cur);
|
|
153
|
+
}
|
|
154
|
+
/* 못 잡은 것이 많은 세트가 먼저. 같으면 유형·uuid 로 갈라 차례를 못 박는다 —
|
|
155
|
+
같은 자료에 두 번 물어 순서가 다르면 사람은 값이 바뀐 줄 안다. */
|
|
156
|
+
const 정렬 = (a, b) => b.pending - a.pending || a.trainingType.localeCompare(b.trainingType) || a.setId.localeCompare(b.setId);
|
|
157
|
+
const all = [...모음.values()];
|
|
158
|
+
return {
|
|
159
|
+
sentence: all.filter(r => SENTENCE_TRAINING_TYPES.includes(r.trainingType)).sort(정렬),
|
|
160
|
+
word: all.filter(r => !SENTENCE_TRAINING_TYPES.includes(r.trainingType)).sort(정렬),
|
|
161
|
+
noSet,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/** @public */
|
|
2
|
+
export declare function normalizeCats(item: unknown): {
|
|
3
|
+
c0: string;
|
|
4
|
+
c1: string;
|
|
5
|
+
};
|
|
6
|
+
/** @public */
|
|
7
|
+
export declare function closeTrainingPopup(): void;
|
|
8
|
+
/**
|
|
9
|
+
* Resolves the onBack handler from spread props.
|
|
10
|
+
* Falls back: props.onBack → props.onClose → closeTrainingPopup
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveOnBack(rest: Record<string, unknown>): () => void;
|
|
14
|
+
/** @public */
|
|
15
|
+
export declare function splitTrainingVariants(value: unknown): string[];
|
|
16
|
+
/** @public */
|
|
17
|
+
export declare function resolveTrainingPopupMeta(trainingData: Record<string, unknown> | null | undefined, depth: string | string[] | null | undefined, fallbackTitle: string): {
|
|
18
|
+
title: string;
|
|
19
|
+
label: string;
|
|
20
|
+
depth: string | string[] | null | undefined;
|
|
21
|
+
icon: string | undefined;
|
|
22
|
+
wrapperStyle: {
|
|
23
|
+
"--t-item-fg": string;
|
|
24
|
+
} | undefined;
|
|
25
|
+
iconTooltip: string | undefined;
|
|
26
|
+
};
|
|
27
|
+
/** @public */
|
|
28
|
+
export declare function getPayloadTimestamp(payload: unknown): number;
|
|
29
|
+
/** @public */
|
|
30
|
+
export declare function resolveTrainingItems(trainingData: unknown): unknown[];
|
|
31
|
+
interface CreateTrainingScenarioParams {
|
|
32
|
+
idPrefix: string;
|
|
33
|
+
trainingData?: Record<string, unknown> | null;
|
|
34
|
+
depth?: string | string[] | null;
|
|
35
|
+
fallbackTitle?: string;
|
|
36
|
+
pages?: unknown[];
|
|
37
|
+
emptyMessage?: string;
|
|
38
|
+
buildResults?: (pageAnswers: Record<string, unknown>) => unknown;
|
|
39
|
+
metaPatch?: ((meta: ReturnType<typeof resolveTrainingPopupMeta>) => Partial<ReturnType<typeof resolveTrainingPopupMeta>>) | Partial<ReturnType<typeof resolveTrainingPopupMeta>>;
|
|
40
|
+
}
|
|
41
|
+
/** @public */
|
|
42
|
+
export declare function createTrainingScenario({ idPrefix, trainingData, depth, fallbackTitle, pages, emptyMessage, buildResults, metaPatch, }: CreateTrainingScenarioParams): {
|
|
43
|
+
id: string;
|
|
44
|
+
meta: {
|
|
45
|
+
title: string;
|
|
46
|
+
label: string;
|
|
47
|
+
depth: string | string[] | null | undefined;
|
|
48
|
+
icon: string | undefined;
|
|
49
|
+
wrapperStyle: {
|
|
50
|
+
"--t-item-fg": string;
|
|
51
|
+
} | undefined;
|
|
52
|
+
iconTooltip: string | undefined;
|
|
53
|
+
};
|
|
54
|
+
pages: unknown[];
|
|
55
|
+
emptyMessage: string | undefined;
|
|
56
|
+
buildResults: ((pageAnswers: Record<string, unknown>) => unknown) | undefined;
|
|
57
|
+
};
|
|
58
|
+
/** @public */
|
|
59
|
+
export declare function toTrainingText(value: unknown): string;
|
|
60
|
+
/** @public */
|
|
61
|
+
export declare function getSelectedFromPayload(payload: unknown): unknown;
|
|
62
|
+
/** @public */
|
|
63
|
+
export declare function getSelectedText(selected: unknown, choices?: unknown[]): string | undefined;
|
|
64
|
+
/** @public */
|
|
65
|
+
export declare function getStepPayload(pageAnswers: unknown, stepIndex: number | string): unknown;
|
|
66
|
+
/** @public */
|
|
67
|
+
export declare function getSteppedPayload(pageAnswers: unknown, itemIndex: number, stride: number, offset: number): unknown;
|
|
68
|
+
interface IsSelectionCorrectParams {
|
|
69
|
+
payload?: unknown;
|
|
70
|
+
selected?: unknown;
|
|
71
|
+
choices?: unknown[];
|
|
72
|
+
correctAnswers?: unknown[];
|
|
73
|
+
}
|
|
74
|
+
/** @public */
|
|
75
|
+
export declare function isSelectionCorrect({ payload, selected, choices, correctAnswers }: IsSelectionCorrectParams): boolean | undefined;
|
|
76
|
+
interface NoiseContext {
|
|
77
|
+
sentence?: string;
|
|
78
|
+
contextCode?: string;
|
|
79
|
+
}
|
|
80
|
+
/** @public */
|
|
81
|
+
export declare function deriveNoiseContexts(trainingData: Record<string, unknown> | null | undefined): NoiseContext[];
|
|
82
|
+
/** {@link buildTwoStepPickResults} 가 내는 한 문제의 채점 결과. */
|
|
83
|
+
interface TwoStepPickResult {
|
|
84
|
+
question: unknown;
|
|
85
|
+
choices: unknown[];
|
|
86
|
+
selected: unknown;
|
|
87
|
+
selectedText: unknown;
|
|
88
|
+
correct: boolean | undefined;
|
|
89
|
+
answer: unknown;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* @public "듣고 → 보기 카드 고르기" 두 단계짜리 훈련의 채점.
|
|
93
|
+
*
|
|
94
|
+
* 일치하는 단어 맞히기·한 음절 포함 단어 맞히기·첫 음절이 같은 단어 맞히기 셋이
|
|
95
|
+
* 한 글자도 다르지 않은 채점을 한 벌씩 들고 있었다. 정말 다른 것은 **결과지에 무엇을
|
|
96
|
+
* 문제로 적을 것인가** 하나뿐이라(들려준 낱말이냐, 음절이냐, 원본 낱말이냐), 그것만
|
|
97
|
+
* 밖에서 받는다.
|
|
98
|
+
*
|
|
99
|
+
* 정답은 answerIndex 가 있으면 보기에서 그 자리를 쓰고, 없으면 item.answer 를 쓴다.
|
|
100
|
+
*
|
|
101
|
+
* @param questionOf - 결과지의 '문제' 칸에 적을 것을 항목에서 뽑는다
|
|
102
|
+
*/
|
|
103
|
+
export declare function buildTwoStepPickResults(items: unknown[] | undefined, pageAnswers: Record<string, unknown>, questionOf: (item: Record<string, unknown>) => unknown): {
|
|
104
|
+
score: number;
|
|
105
|
+
results: TwoStepPickResult[];
|
|
106
|
+
answers: TwoStepPickResult[];
|
|
107
|
+
};
|
|
108
|
+
export {};
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { getTopicTypes } from "../../utils/categories";
|
|
3
|
+
/** @public */
|
|
4
|
+
export function normalizeCats(item) {
|
|
5
|
+
if (!item || typeof item !== 'object')
|
|
6
|
+
return { c0: '', c1: '' };
|
|
7
|
+
const it = item;
|
|
8
|
+
const grp = it.group;
|
|
9
|
+
const raw = it.raw;
|
|
10
|
+
const c0 = (it.category_0 || it.category_main_code || it.category_main ||
|
|
11
|
+
grp?.category_0 || grp?.category_main_code || raw?.category_main_code || '').toString().toUpperCase();
|
|
12
|
+
const c1 = (it.category_1 || it.category_sub_code || it.category_sub ||
|
|
13
|
+
grp?.category_1 || grp?.category_sub_code || raw?.category_sub_code || '').toString().toUpperCase();
|
|
14
|
+
return { c0, c1 };
|
|
15
|
+
}
|
|
16
|
+
/** @public */
|
|
17
|
+
export function closeTrainingPopup() {
|
|
18
|
+
if (typeof window !== "undefined") {
|
|
19
|
+
window.dispatchEvent(new CustomEvent("speechear.popup.close"));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolves the onBack handler from spread props.
|
|
24
|
+
* Falls back: props.onBack → props.onClose → closeTrainingPopup
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export function resolveOnBack(rest) {
|
|
28
|
+
return (rest.onBack ?? rest.onClose ?? closeTrainingPopup);
|
|
29
|
+
}
|
|
30
|
+
/** @public */
|
|
31
|
+
export function splitTrainingVariants(value) {
|
|
32
|
+
if (!value && value !== 0)
|
|
33
|
+
return [];
|
|
34
|
+
if (Array.isArray(value)) {
|
|
35
|
+
return value.flatMap((entry) => typeof entry === "string"
|
|
36
|
+
? entry.split("|").map((item) => item.trim()).filter(Boolean)
|
|
37
|
+
: entry || entry === 0
|
|
38
|
+
? [String(entry)]
|
|
39
|
+
: []);
|
|
40
|
+
}
|
|
41
|
+
if (typeof value === "string") {
|
|
42
|
+
return value.split("|").map((item) => item.trim()).filter(Boolean);
|
|
43
|
+
}
|
|
44
|
+
return [String(value)];
|
|
45
|
+
}
|
|
46
|
+
/** @public */
|
|
47
|
+
export function resolveTrainingPopupMeta(trainingData, depth, fallbackTitle) {
|
|
48
|
+
const td = trainingData;
|
|
49
|
+
const title = td?.title ||
|
|
50
|
+
td?.name ||
|
|
51
|
+
(Array.isArray(depth) ? depth[depth.length - 1] : undefined) ||
|
|
52
|
+
fallbackTitle ||
|
|
53
|
+
"훈련";
|
|
54
|
+
const topicTypes = getTopicTypes();
|
|
55
|
+
const category = topicTypes.find((entry) => entry.key === (td?.category_0 || td?.category_main_code));
|
|
56
|
+
const subCategory = category?.subs?.find((entry) => entry.key === (td?.category_1 || td?.category_sub_code));
|
|
57
|
+
return {
|
|
58
|
+
title,
|
|
59
|
+
label: td?.title || title,
|
|
60
|
+
depth,
|
|
61
|
+
icon: category?.icon,
|
|
62
|
+
wrapperStyle: category?.color
|
|
63
|
+
? { "--t-item-fg": category.color }
|
|
64
|
+
: undefined,
|
|
65
|
+
iconTooltip: [category?.label, subCategory?.label].filter(Boolean).join(" / ") || undefined,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** @public */
|
|
69
|
+
export function getPayloadTimestamp(payload) {
|
|
70
|
+
if (payload && typeof payload === "object" && typeof payload.__ts === "number") {
|
|
71
|
+
return payload.__ts;
|
|
72
|
+
}
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
/** @public */
|
|
76
|
+
export function resolveTrainingItems(trainingData) {
|
|
77
|
+
const td = trainingData;
|
|
78
|
+
if (Array.isArray(td?.items))
|
|
79
|
+
return td.items;
|
|
80
|
+
if (Array.isArray(trainingData))
|
|
81
|
+
return trainingData;
|
|
82
|
+
return trainingData ? [trainingData] : [];
|
|
83
|
+
}
|
|
84
|
+
/** @public */
|
|
85
|
+
export function createTrainingScenario({ idPrefix, trainingData, depth, fallbackTitle = "훈련", pages = [],
|
|
86
|
+
/* 기본값을 두지 않는다. 화면은 `scenario?.emptyMessage || t('training.noQuestions',
|
|
87
|
+
'문제가 없습니다.')` 로 그리는데, 여기서 한국어를 채워 두면 그 뒤 갈래가 **한 번도
|
|
88
|
+
안 쓰인다** — (이 예시도 한때 관문을 빨갛게 만들었다. 이제 i18n 지킴이가 주석을
|
|
89
|
+
걷어 내므로 그대로 적어 둔다.)
|
|
90
|
+
영어로 쓰는 사람도 그 자리만 한국어를 본다. 주면 그것을 쓰고, 안 주면 비워 둬
|
|
91
|
+
무슨 말로 보여 줄지는 화면이 정하게 한다. */
|
|
92
|
+
emptyMessage, buildResults, metaPatch, }) {
|
|
93
|
+
const baseMeta = resolveTrainingPopupMeta(trainingData, depth, fallbackTitle);
|
|
94
|
+
const extraMeta = typeof metaPatch === "function" ? (metaPatch(baseMeta) || {}) : (metaPatch || {});
|
|
95
|
+
const suffix = trainingData?.id || trainingData?.title || pages.length;
|
|
96
|
+
return {
|
|
97
|
+
id: `${idPrefix}:${suffix}`,
|
|
98
|
+
meta: {
|
|
99
|
+
...baseMeta,
|
|
100
|
+
...extraMeta,
|
|
101
|
+
},
|
|
102
|
+
pages,
|
|
103
|
+
emptyMessage,
|
|
104
|
+
buildResults,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/** @public */
|
|
108
|
+
export function toTrainingText(value) {
|
|
109
|
+
if (typeof value === "string")
|
|
110
|
+
return value;
|
|
111
|
+
if (value && typeof value === "object") {
|
|
112
|
+
const v = value;
|
|
113
|
+
return (v.context || v.sentence || v.question || "") || "";
|
|
114
|
+
}
|
|
115
|
+
return "";
|
|
116
|
+
}
|
|
117
|
+
/** @public */
|
|
118
|
+
export function getSelectedFromPayload(payload) {
|
|
119
|
+
if (payload && typeof payload === "object") {
|
|
120
|
+
const p = payload;
|
|
121
|
+
if (Array.isArray(p.selectedValues))
|
|
122
|
+
return p.selectedValues;
|
|
123
|
+
if (p.selectedValue !== undefined)
|
|
124
|
+
return p.selectedValue;
|
|
125
|
+
if (p.selectedIndex !== undefined)
|
|
126
|
+
return p.selectedIndex;
|
|
127
|
+
if (p.value !== undefined)
|
|
128
|
+
return p.value;
|
|
129
|
+
}
|
|
130
|
+
return payload;
|
|
131
|
+
}
|
|
132
|
+
/** @public */
|
|
133
|
+
export function getSelectedText(selected, choices = []) {
|
|
134
|
+
if (Array.isArray(selected))
|
|
135
|
+
return selected.join(", ");
|
|
136
|
+
if (typeof selected === "number" && Array.isArray(choices))
|
|
137
|
+
return String(choices[selected] ?? '');
|
|
138
|
+
if (typeof selected === "string")
|
|
139
|
+
return selected;
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
/** @public */
|
|
143
|
+
export function getStepPayload(pageAnswers, stepIndex) {
|
|
144
|
+
if (!pageAnswers || typeof pageAnswers !== "object")
|
|
145
|
+
return undefined;
|
|
146
|
+
return pageAnswers[`step-${stepIndex}`];
|
|
147
|
+
}
|
|
148
|
+
/** @public */
|
|
149
|
+
export function getSteppedPayload(pageAnswers, itemIndex, stride, offset) {
|
|
150
|
+
return getStepPayload(pageAnswers, itemIndex * stride + offset);
|
|
151
|
+
}
|
|
152
|
+
/** @public */
|
|
153
|
+
export function isSelectionCorrect({ payload, selected, choices = [], correctAnswers = [] }) {
|
|
154
|
+
if (payload && typeof payload === "object") {
|
|
155
|
+
const p = payload;
|
|
156
|
+
if (Array.isArray(p.selectedValues)) {
|
|
157
|
+
return (correctAnswers.every((entry) => p.selectedValues.includes(entry)) &&
|
|
158
|
+
p.selectedValues.every((entry) => correctAnswers.includes(entry)));
|
|
159
|
+
}
|
|
160
|
+
if (typeof p.correct === "boolean")
|
|
161
|
+
return p.correct;
|
|
162
|
+
}
|
|
163
|
+
if (!correctAnswers.length)
|
|
164
|
+
return undefined;
|
|
165
|
+
if (typeof selected === "number" && Array.isArray(choices) && choices.length) {
|
|
166
|
+
return correctAnswers.some((entry) => String(entry) === String(choices[selected]));
|
|
167
|
+
}
|
|
168
|
+
if (typeof selected !== "undefined") {
|
|
169
|
+
return correctAnswers.some((entry) => String(entry) === String(selected));
|
|
170
|
+
}
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
/** @public */
|
|
174
|
+
export function deriveNoiseContexts(trainingData) {
|
|
175
|
+
if (!trainingData)
|
|
176
|
+
return [];
|
|
177
|
+
if (Array.isArray(trainingData.items)) {
|
|
178
|
+
return trainingData.items.map((item) => {
|
|
179
|
+
const it = item;
|
|
180
|
+
return typeof item === "string"
|
|
181
|
+
? { sentence: item }
|
|
182
|
+
: { sentence: (it.context || it.sentence || ""), contextCode: (it.contextCode || it.context_code) };
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
if (Array.isArray(trainingData.sentences)) {
|
|
186
|
+
return trainingData.sentences.map((sentence) => {
|
|
187
|
+
const s = sentence;
|
|
188
|
+
return typeof sentence === "string"
|
|
189
|
+
? { sentence }
|
|
190
|
+
: { sentence: (s.sentence || s.context || ""), contextCode: s.contextCode };
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
if (Array.isArray(trainingData.contexts))
|
|
194
|
+
return trainingData.contexts;
|
|
195
|
+
if (trainingData.contextCode)
|
|
196
|
+
return [{ contextCode: trainingData.contextCode }];
|
|
197
|
+
return [];
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* @public "듣고 → 보기 카드 고르기" 두 단계짜리 훈련의 채점.
|
|
201
|
+
*
|
|
202
|
+
* 일치하는 단어 맞히기·한 음절 포함 단어 맞히기·첫 음절이 같은 단어 맞히기 셋이
|
|
203
|
+
* 한 글자도 다르지 않은 채점을 한 벌씩 들고 있었다. 정말 다른 것은 **결과지에 무엇을
|
|
204
|
+
* 문제로 적을 것인가** 하나뿐이라(들려준 낱말이냐, 음절이냐, 원본 낱말이냐), 그것만
|
|
205
|
+
* 밖에서 받는다.
|
|
206
|
+
*
|
|
207
|
+
* 정답은 answerIndex 가 있으면 보기에서 그 자리를 쓰고, 없으면 item.answer 를 쓴다.
|
|
208
|
+
*
|
|
209
|
+
* @param questionOf - 결과지의 '문제' 칸에 적을 것을 항목에서 뽑는다
|
|
210
|
+
*/
|
|
211
|
+
export function buildTwoStepPickResults(items = [], pageAnswers, questionOf) {
|
|
212
|
+
const results = items.map((raw, index) => {
|
|
213
|
+
const item = (raw ?? {});
|
|
214
|
+
const payload = getSteppedPayload(pageAnswers, index, 2, 1);
|
|
215
|
+
const selected = getSelectedFromPayload(payload);
|
|
216
|
+
const choices = (Array.isArray(item.choices) ? item.choices : []);
|
|
217
|
+
const selectedText = getSelectedText(selected, choices);
|
|
218
|
+
const answerIndex = typeof item.answerIndex === 'number' ? item.answerIndex : undefined;
|
|
219
|
+
const answer = typeof answerIndex === 'number' ? choices[answerIndex] : item.answer;
|
|
220
|
+
const correct = isSelectionCorrect({
|
|
221
|
+
payload, selected, choices, correctAnswers: answer ? [answer] : [],
|
|
222
|
+
});
|
|
223
|
+
return { question: questionOf(item), choices, selected, selectedText, correct, answer };
|
|
224
|
+
});
|
|
225
|
+
return { score: results.filter(r => r.correct).length, results, answers: results };
|
|
226
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* 훈련 시나리오를 **읽는 규칙** — 쪽·단계에 이름을 붙이고, 단계가 받을 props 를 푼다.
|
|
4
|
+
*
|
|
5
|
+
* TrainingPagePopup 이 1,023줄이고 그중 화면과 무관한 이 넷이 앞머리에 섞여 있었다.
|
|
6
|
+
* 넷 다 순수 함수다 — 리액트도, 상태도 모르고, 같은 입력에 늘 같은 값을 준다.
|
|
7
|
+
*
|
|
8
|
+
* 이름을 붙이는 두 함수가 중요한 이유: 여기서 나오는 문자열이 그대로 리스트의 key 가
|
|
9
|
+
* 된다. id 나 key 가 없으면 자리 번호로 대신하는데, 그러면 쪽·단계가 재배치될 때
|
|
10
|
+
* 리액트가 다른 것을 같은 것으로 보고 상태를 잘못 물려준다. 그래서 **주어진 이름이
|
|
11
|
+
* 있으면 반드시 그것을 쓴다**는 게 이 함수들의 약속이다.
|
|
12
|
+
*/
|
|
13
|
+
/** @public */
|
|
14
|
+
export type ScenarioPage = {
|
|
15
|
+
id?: string;
|
|
16
|
+
steps?: ReactNode[];
|
|
17
|
+
pageTop?: ReactNode | null;
|
|
18
|
+
pageBottom?: ReactNode | null;
|
|
19
|
+
} & Record<string, unknown>;
|
|
20
|
+
/** @public */
|
|
21
|
+
export type ScenarioStep = {
|
|
22
|
+
key?: string;
|
|
23
|
+
props?: ((context: Record<string, unknown>) => Record<string, unknown>) | Record<string, unknown>;
|
|
24
|
+
type?: string;
|
|
25
|
+
} & Record<string, unknown>;
|
|
26
|
+
/** @public 한 판(page)의 진행 상태 — 몇 쪽 몇 단계인지와, 쪽마다 담아 둔 답. */
|
|
27
|
+
export type FlowState = {
|
|
28
|
+
pageIndex: number;
|
|
29
|
+
stepIndex: number;
|
|
30
|
+
answersByPage: Record<string, Record<string, unknown>>;
|
|
31
|
+
};
|
|
32
|
+
/** 쪽 이름 — 주어진 id 가 있으면 그것을, 없으면 자리 번호로. */
|
|
33
|
+
export declare function getScenarioPageId(page: ScenarioPage | null | undefined, index?: number): string;
|
|
34
|
+
/** 단계 이름 — 주어진 key 가 있으면 그것을, 없으면 자리 번호로. */
|
|
35
|
+
export declare function getScenarioStepKey(step: ScenarioStep | null | undefined, index?: number): string;
|
|
36
|
+
/** 처음 상태 — 첫 쪽 첫 단계, 담아 둔 답 없음. */
|
|
37
|
+
export declare function createScenarioFlowState(): FlowState;
|
|
38
|
+
/**
|
|
39
|
+
* 단계가 받을 props 를 푼다. 함수로 주어졌으면 그때의 문맥을 넘겨 부른다 —
|
|
40
|
+
* 앞 단계의 답에 따라 달라지는 단계를 그렇게 쓴다. 무엇을 주든 객체를 돌려준다.
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveScenarioStepProps(step: ScenarioStep | null | undefined, context: Record<string, unknown>): Record<string, unknown>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** 쪽 이름 — 주어진 id 가 있으면 그것을, 없으면 자리 번호로. */
|
|
2
|
+
export function getScenarioPageId(page, index) {
|
|
3
|
+
return (page && page.id) || `page-${index ?? 0}`;
|
|
4
|
+
}
|
|
5
|
+
/** 단계 이름 — 주어진 key 가 있으면 그것을, 없으면 자리 번호로. */
|
|
6
|
+
export function getScenarioStepKey(step, index) {
|
|
7
|
+
return (step && step.key) || `step-${index ?? 0}`;
|
|
8
|
+
}
|
|
9
|
+
/** 처음 상태 — 첫 쪽 첫 단계, 담아 둔 답 없음. */
|
|
10
|
+
export function createScenarioFlowState() {
|
|
11
|
+
return {
|
|
12
|
+
pageIndex: 0,
|
|
13
|
+
stepIndex: 0,
|
|
14
|
+
answersByPage: {},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 단계가 받을 props 를 푼다. 함수로 주어졌으면 그때의 문맥을 넘겨 부른다 —
|
|
19
|
+
* 앞 단계의 답에 따라 달라지는 단계를 그렇게 쓴다. 무엇을 주든 객체를 돌려준다.
|
|
20
|
+
*/
|
|
21
|
+
export function resolveScenarioStepProps(step, context) {
|
|
22
|
+
if (typeof step?.props === 'function')
|
|
23
|
+
return step.props(context) || {};
|
|
24
|
+
return step?.props || {};
|
|
25
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/** @public */
|
|
3
|
+
export type SoundSource = string | {
|
|
4
|
+
src?: string;
|
|
5
|
+
code?: string;
|
|
6
|
+
} | null;
|
|
7
|
+
export interface Source {
|
|
8
|
+
code?: string | number | null | undefined;
|
|
9
|
+
src?: string | null;
|
|
10
|
+
objectUrl?: string | null;
|
|
11
|
+
duration?: number;
|
|
12
|
+
resolvedPath?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface Segment {
|
|
15
|
+
src?: string | null;
|
|
16
|
+
label?: string;
|
|
17
|
+
color?: string | undefined;
|
|
18
|
+
duration?: number;
|
|
19
|
+
}
|
|
20
|
+
export type FetchDebugStatus = 'idle' | 'resolving' | 'checking_exists' | 'getting_signed_url' | 'downloading' | 'measuring_duration' | 'ready' | 'error';
|
|
21
|
+
/** @public */
|
|
22
|
+
export interface TrainingStepAudioPlayerProps {
|
|
23
|
+
btnLabel?: ReactNode;
|
|
24
|
+
soundSrc?: SoundSource | SoundSource[];
|
|
25
|
+
bucketPath?: string | null;
|
|
26
|
+
onDone?: (ok?: boolean) => void;
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
ttsText?: string | string[] | null;
|
|
29
|
+
className?: string;
|
|
30
|
+
/** 문장(재생 소리) waveform 표시 여부. 기본 true — 두 소리를 비교해 같음/다름을 판단하는
|
|
31
|
+
* 훈련처럼 waveform 모양으로 답이 드러나면 안 되는 화면에서는 false로 끈다. */
|
|
32
|
+
showSoundWaveForm?: boolean;
|
|
33
|
+
/** 소음 waveform 표시 여부. 기본 true. */
|
|
34
|
+
showNoiseWaveForm?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare const STATUS_MESSAGES: Record<FetchDebugStatus, string>;
|
|
37
|
+
export declare const STATUS_COLORS: Record<FetchDebugStatus, string>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const STATUS_MESSAGES = {
|
|
2
|
+
idle: '대기',
|
|
3
|
+
resolving: '리소스 매핑 중…',
|
|
4
|
+
checking_exists: '파일 존재 확인…',
|
|
5
|
+
getting_signed_url: '서명 URL 조회…',
|
|
6
|
+
downloading: '다운로드 중…',
|
|
7
|
+
measuring_duration: '오디오 길이 측정…',
|
|
8
|
+
ready: '준비 완료',
|
|
9
|
+
error: '오류 발생',
|
|
10
|
+
};
|
|
11
|
+
export const STATUS_COLORS = {
|
|
12
|
+
idle: '#757575',
|
|
13
|
+
resolving: '#1e90ff',
|
|
14
|
+
checking_exists: '#1e90ff',
|
|
15
|
+
getting_signed_url: '#1e90ff',
|
|
16
|
+
downloading: '#ff9800',
|
|
17
|
+
measuring_duration: '#9c27b0',
|
|
18
|
+
ready: '#4caf50',
|
|
19
|
+
error: '#f44336',
|
|
20
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* trainingStepOrderListTypes.ts
|
|
3
|
+
* TrainingStepOrderList의 순수 타입 정의.
|
|
4
|
+
*/
|
|
5
|
+
/** @public */
|
|
6
|
+
export type TrainingContextItem = string | {
|
|
7
|
+
context?: string;
|
|
8
|
+
sentence?: string;
|
|
9
|
+
question?: string;
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
};
|
|
12
|
+
/** @public */
|
|
13
|
+
export type ShuffledItem = {
|
|
14
|
+
id: number;
|
|
15
|
+
text: string;
|
|
16
|
+
};
|
|
17
|
+
/** @public */
|
|
18
|
+
export interface ChangeResult {
|
|
19
|
+
shuffled: ShuffledItem[];
|
|
20
|
+
score: number;
|
|
21
|
+
total: number;
|
|
22
|
+
initial?: boolean;
|
|
23
|
+
__ts: number;
|
|
24
|
+
}
|
|
25
|
+
/** @public */
|
|
26
|
+
export interface TrainingStepOrderListProps {
|
|
27
|
+
index?: number;
|
|
28
|
+
stepIndex?: number;
|
|
29
|
+
isLast?: boolean;
|
|
30
|
+
title?: string;
|
|
31
|
+
onDone?: (res: ChangeResult) => void;
|
|
32
|
+
onChange?: (res: ChangeResult) => void;
|
|
33
|
+
context?: TrainingContextItem[];
|
|
34
|
+
}
|