@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,445 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
5
|
+
import Button from '../Button';
|
|
6
|
+
import { shuffle, reorderArray } from '../../utils/array';
|
|
7
|
+
import "./TrainingPagePopup.css";
|
|
8
|
+
import "./TrainingStep.css";
|
|
9
|
+
import TrainingStep from "./TrainingStep";
|
|
10
|
+
import "./TrainingStepOrderList.css";
|
|
11
|
+
/** @public */
|
|
12
|
+
export default function TrainingStepOrderList({ index, stepIndex, isLast = false, title, onDone, onChange, context = [], }) {
|
|
13
|
+
const { t } = useTranslation();
|
|
14
|
+
const resolvedTitle = title ?? t('training.orderListDefault', '문장을 들은 순서대로 배치하세요.');
|
|
15
|
+
const toText = (v) => typeof v === "string"
|
|
16
|
+
? v
|
|
17
|
+
: (v && (v.context || v.sentence || v.question || "")) || "";
|
|
18
|
+
const [items, setItems] = useState(Array.isArray(context) ? context : []);
|
|
19
|
+
const [shuffled, setShuffled] = useState(() => (items || []).map((v, i) => ({ id: i, text: toText(v) })));
|
|
20
|
+
const currentState = useMemo(() => {
|
|
21
|
+
if (typeof stepIndex !== "number")
|
|
22
|
+
return "disabled";
|
|
23
|
+
if (typeof index !== "number")
|
|
24
|
+
return "disabled";
|
|
25
|
+
if (index < stepIndex)
|
|
26
|
+
return "done";
|
|
27
|
+
if (index === stepIndex)
|
|
28
|
+
return "active";
|
|
29
|
+
return "disabled";
|
|
30
|
+
}, [stepIndex, index]);
|
|
31
|
+
// context 변경 시 items/shuffled를 다시 초기화하는 의도된 동기화다
|
|
32
|
+
/* eslint-disable react-hooks/set-state-in-effect */
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
const it = Array.isArray(context) ? context : [];
|
|
35
|
+
setItems(it);
|
|
36
|
+
const makeInitial = (src) => {
|
|
37
|
+
const arr = (src || []).map((v, i) => ({ id: i, text: toText(v) }));
|
|
38
|
+
if (arr.length <= 1)
|
|
39
|
+
return arr;
|
|
40
|
+
const isSame = (a, b) => {
|
|
41
|
+
if (a.length !== b.length)
|
|
42
|
+
return false;
|
|
43
|
+
for (let i = 0; i < a.length; i++)
|
|
44
|
+
if (a[i].text !== b[i].text)
|
|
45
|
+
return false;
|
|
46
|
+
return true;
|
|
47
|
+
};
|
|
48
|
+
// 원본과 순서가 같으면(정렬 문제라 의미 없음) 다를 때까지 최대 20회 재셔플.
|
|
49
|
+
let next = shuffle(arr);
|
|
50
|
+
let attempts = 0;
|
|
51
|
+
while (isSame(next, arr) && attempts < 20) {
|
|
52
|
+
next = shuffle(arr);
|
|
53
|
+
attempts += 1;
|
|
54
|
+
}
|
|
55
|
+
return next;
|
|
56
|
+
};
|
|
57
|
+
const initial = makeInitial(it);
|
|
58
|
+
setShuffled(initial);
|
|
59
|
+
try {
|
|
60
|
+
if (typeof onChange === "function") {
|
|
61
|
+
const sc = initial.filter((s, i) => s.text === toText(it[i])).length;
|
|
62
|
+
onChange({ shuffled: initial, score: sc, total: (it || []).length, initial: true, __ts: Date.now() });
|
|
63
|
+
}
|
|
64
|
+
if (typeof onDone === "function" && currentState === "active") {
|
|
65
|
+
const sc2 = initial.filter((s, i) => s.text === toText(it[i])).length;
|
|
66
|
+
onDone({ shuffled: initial, score: sc2, total: (it || []).length, initial: true, __ts: Date.now() });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (e) { }
|
|
70
|
+
// context가 바뀔 때만 재초기화(재셔플)해야 한다 — onChange/onDone/currentState를 deps에 넣으면
|
|
71
|
+
// 부모 리렌더나 단계 전환만으로도 매번 다시 섞이는 문제가 생긴다.
|
|
72
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
73
|
+
}, [context]);
|
|
74
|
+
/* eslint-enable react-hooks/set-state-in-effect */
|
|
75
|
+
/**
|
|
76
|
+
* 카드 한 칸 옮기기.
|
|
77
|
+
*
|
|
78
|
+
* **조작은 진행 중(active)일 때만 열려 있다.** 예전에는 끝낸 단계(done)에서도 단추와
|
|
79
|
+
* 끌어놓기가 살아 있었는데, 여기와 handleDrop 은 `currentState === 'active'` 일 때만
|
|
80
|
+
* onDone 을 부른다 — 그래서 화면 배치는 바뀌는데 **기록된 점수는 그대로**였다.
|
|
81
|
+
* 되돌아본 사람은 옮겨 놓은 배치를 보면서 옛 점수를 읽게 된다. 끝난 단계는 결과를
|
|
82
|
+
* 그대로 보여 주기만 한다.
|
|
83
|
+
*/
|
|
84
|
+
const move = (idx, dir) => {
|
|
85
|
+
const arr = [...shuffled];
|
|
86
|
+
const i2 = idx + dir;
|
|
87
|
+
if (i2 < 0 || i2 >= arr.length)
|
|
88
|
+
return;
|
|
89
|
+
const tmp = arr[i2];
|
|
90
|
+
arr[i2] = arr[idx];
|
|
91
|
+
arr[idx] = tmp;
|
|
92
|
+
flipSetShuffled(arr);
|
|
93
|
+
try {
|
|
94
|
+
if (typeof onDone === "function" && currentState === "active") {
|
|
95
|
+
const sc2 = arr.filter((s, i) => s.text === toText(items[i])).length;
|
|
96
|
+
// move()는 onClick에서만 호출되며 렌더링 중에는 실행되지 않는다
|
|
97
|
+
// eslint-disable-next-line react-hooks/purity
|
|
98
|
+
onDone({ shuffled: arr, score: sc2, total: (items || []).length, __ts: Date.now() });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (e) { }
|
|
102
|
+
};
|
|
103
|
+
const [draggedIndex, setDraggedIndex] = useState(null);
|
|
104
|
+
const draggingObjRef = useRef(null);
|
|
105
|
+
// use EventListener for add/remove symmetry
|
|
106
|
+
const docDragOverHandlerRef = useRef(null);
|
|
107
|
+
const docMouseMoveHandlerRef = useRef(null);
|
|
108
|
+
const lastDragOverRef = useRef(null);
|
|
109
|
+
// ReturnType<typeof setTimeout> covers both browser number and NodeJS.Timeout
|
|
110
|
+
const dragLeaveTimeoutRef = useRef(null);
|
|
111
|
+
const lastPosRef = useRef({ x: 0, y: 0 });
|
|
112
|
+
const rafRef = useRef(null);
|
|
113
|
+
const dragOffsetRef = useRef({ dx: 0, dy: 0 });
|
|
114
|
+
const startRafLoop = () => {
|
|
115
|
+
if (rafRef.current !== null)
|
|
116
|
+
return;
|
|
117
|
+
const loop = () => {
|
|
118
|
+
rafRef.current = requestAnimationFrame(loop);
|
|
119
|
+
const p = lastPosRef.current;
|
|
120
|
+
const off = dragOffsetRef.current || { dx: 0, dy: 0 };
|
|
121
|
+
if (draggingObjRef.current) {
|
|
122
|
+
draggingObjRef.current.style.transform = `translate3d(${p.x - off.dx}px, ${p.y - off.dy}px, 0)`;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
rafRef.current = requestAnimationFrame(loop);
|
|
126
|
+
};
|
|
127
|
+
const itemRefs = useRef(new Map());
|
|
128
|
+
const markerRefs = useRef(new Map());
|
|
129
|
+
const getRects = () => {
|
|
130
|
+
const map = new Map();
|
|
131
|
+
itemRefs.current.forEach((el, id) => {
|
|
132
|
+
if (el && el.getBoundingClientRect)
|
|
133
|
+
map.set(id, el.getBoundingClientRect());
|
|
134
|
+
});
|
|
135
|
+
return map;
|
|
136
|
+
};
|
|
137
|
+
const flipSetShuffled = (nextArr) => {
|
|
138
|
+
const prevRects = getRects();
|
|
139
|
+
setShuffled(nextArr);
|
|
140
|
+
try {
|
|
141
|
+
if (typeof onChange === "function") {
|
|
142
|
+
const sc = nextArr.filter((s, i) => s.text === toText(items[i])).length;
|
|
143
|
+
// flipSetShuffled()는 클릭/드래그 핸들러에서만 호출되며 렌더링 중에는 실행되지 않는다
|
|
144
|
+
// eslint-disable-next-line react-hooks/purity
|
|
145
|
+
onChange({ shuffled: nextArr, score: sc, total: (items || []).length, __ts: Date.now() });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (e) { }
|
|
149
|
+
requestAnimationFrame(() => {
|
|
150
|
+
const newRects = getRects();
|
|
151
|
+
nextArr.forEach((item) => {
|
|
152
|
+
const prev = prevRects.get(item.id);
|
|
153
|
+
const now = newRects.get(item.id);
|
|
154
|
+
const el = itemRefs.current.get(item.id);
|
|
155
|
+
if (!el || !prev || !now)
|
|
156
|
+
return;
|
|
157
|
+
const dy = prev.top - now.top;
|
|
158
|
+
if (!dy)
|
|
159
|
+
return;
|
|
160
|
+
el.style.transition = "none";
|
|
161
|
+
el.style.transform = `translateY(${dy}px)`;
|
|
162
|
+
requestAnimationFrame(() => {
|
|
163
|
+
el.style.transition = "transform 420ms cubic-bezier(.22,.9,.39,1)";
|
|
164
|
+
el.style.transform = "";
|
|
165
|
+
const cleanup = () => {
|
|
166
|
+
el.style.transition = "";
|
|
167
|
+
el.removeEventListener("transitionend", cleanup);
|
|
168
|
+
};
|
|
169
|
+
el.addEventListener('transitionend', cleanup);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
const handleDragStart = (i, e) => {
|
|
175
|
+
try {
|
|
176
|
+
try {
|
|
177
|
+
e.dataTransfer?.setData("text/plain", String(i));
|
|
178
|
+
}
|
|
179
|
+
catch { }
|
|
180
|
+
try {
|
|
181
|
+
if (e.dataTransfer)
|
|
182
|
+
e.dataTransfer.effectAllowed = 'move';
|
|
183
|
+
}
|
|
184
|
+
catch (err) { }
|
|
185
|
+
try {
|
|
186
|
+
const ghostEl = document.createElement('div');
|
|
187
|
+
ghostEl.style.cssText = 'position:absolute;top:-9999px;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none;';
|
|
188
|
+
document.body.appendChild(ghostEl);
|
|
189
|
+
e.dataTransfer?.setDragImage(ghostEl, 0, 0);
|
|
190
|
+
requestAnimationFrame(() => { try {
|
|
191
|
+
document.body.removeChild(ghostEl);
|
|
192
|
+
}
|
|
193
|
+
catch { } });
|
|
194
|
+
}
|
|
195
|
+
catch (err) { }
|
|
196
|
+
}
|
|
197
|
+
catch { }
|
|
198
|
+
setDraggedIndex(i);
|
|
199
|
+
try {
|
|
200
|
+
const it = shuffled[i];
|
|
201
|
+
const obj = document.createElement("div");
|
|
202
|
+
obj.className = "order-list__dragging-object order-list__dragging-object--visible";
|
|
203
|
+
obj.textContent = it && it.text ? it.text : "";
|
|
204
|
+
document.body.appendChild(obj);
|
|
205
|
+
draggingObjRef.current = obj;
|
|
206
|
+
const srcEl = itemRefs.current.get(it.id);
|
|
207
|
+
let startX = (e.clientX || 0);
|
|
208
|
+
let startY = (e.clientY || 0);
|
|
209
|
+
try {
|
|
210
|
+
if (srcEl && srcEl.getBoundingClientRect) {
|
|
211
|
+
const srcRect = srcEl.getBoundingClientRect();
|
|
212
|
+
startX = srcRect.left + srcRect.width / 2;
|
|
213
|
+
startY = srcRect.top + srcRect.height / 2;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch (err) { }
|
|
217
|
+
const rect = obj.getBoundingClientRect();
|
|
218
|
+
const dx = rect.width / 2;
|
|
219
|
+
const dy = rect.height / 2;
|
|
220
|
+
dragOffsetRef.current = { dx, dy };
|
|
221
|
+
obj.style.transition = "none";
|
|
222
|
+
lastPosRef.current = { x: startX, y: startY };
|
|
223
|
+
obj.style.transform = `translate3d(${startX - dx}px, ${startY - dy}px, 0)`;
|
|
224
|
+
requestAnimationFrame(() => {
|
|
225
|
+
try {
|
|
226
|
+
obj.style.transition = "";
|
|
227
|
+
}
|
|
228
|
+
catch (e) { }
|
|
229
|
+
startRafLoop();
|
|
230
|
+
});
|
|
231
|
+
const mouseHandler = (ev) => {
|
|
232
|
+
const e = ev;
|
|
233
|
+
lastPosRef.current = { x: e.clientX, y: e.clientY };
|
|
234
|
+
startRafLoop();
|
|
235
|
+
};
|
|
236
|
+
docMouseMoveHandlerRef.current = mouseHandler;
|
|
237
|
+
document.addEventListener("mousemove", mouseHandler);
|
|
238
|
+
const handler = (ev) => {
|
|
239
|
+
const e = ev;
|
|
240
|
+
lastPosRef.current = { x: e.clientX, y: e.clientY };
|
|
241
|
+
startRafLoop();
|
|
242
|
+
};
|
|
243
|
+
docDragOverHandlerRef.current = handler;
|
|
244
|
+
document.addEventListener("dragover", handler);
|
|
245
|
+
try {
|
|
246
|
+
e.dataTransfer?.setData('text/plain', String(i));
|
|
247
|
+
try {
|
|
248
|
+
e.dataTransfer?.setData('application/json', JSON.stringify({ idx: i }));
|
|
249
|
+
}
|
|
250
|
+
catch (err) { }
|
|
251
|
+
}
|
|
252
|
+
catch (err) { }
|
|
253
|
+
}
|
|
254
|
+
catch (err) { }
|
|
255
|
+
};
|
|
256
|
+
const handleDragOverWithClass = (_i, e) => {
|
|
257
|
+
e.preventDefault();
|
|
258
|
+
try {
|
|
259
|
+
if (e.dataTransfer)
|
|
260
|
+
e.dataTransfer.dropEffect = 'move';
|
|
261
|
+
}
|
|
262
|
+
catch (err) { }
|
|
263
|
+
try {
|
|
264
|
+
if (dragLeaveTimeoutRef.current !== null) {
|
|
265
|
+
clearTimeout(dragLeaveTimeoutRef.current);
|
|
266
|
+
dragLeaveTimeoutRef.current = null;
|
|
267
|
+
}
|
|
268
|
+
const targetItem = (e.currentTarget && e.currentTarget.closest)
|
|
269
|
+
? e.currentTarget.closest('.order-list__item')
|
|
270
|
+
: null;
|
|
271
|
+
if (targetItem && lastDragOverRef.current !== targetItem) {
|
|
272
|
+
if (lastDragOverRef.current) {
|
|
273
|
+
try {
|
|
274
|
+
lastDragOverRef.current.classList.remove('drag-over');
|
|
275
|
+
}
|
|
276
|
+
catch (err) { }
|
|
277
|
+
}
|
|
278
|
+
try {
|
|
279
|
+
targetItem.classList.add('drag-over');
|
|
280
|
+
}
|
|
281
|
+
catch (err) { }
|
|
282
|
+
lastDragOverRef.current = targetItem;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
catch (err) { }
|
|
286
|
+
};
|
|
287
|
+
const handleDrop = (i, e) => {
|
|
288
|
+
e.preventDefault();
|
|
289
|
+
const fromStr = e.dataTransfer?.getData("text/plain") || "";
|
|
290
|
+
const from = fromStr ? parseInt(fromStr, 10) : draggedIndex;
|
|
291
|
+
const to = i;
|
|
292
|
+
if (typeof from !== "number" || isNaN(from) || from === to) {
|
|
293
|
+
setDraggedIndex(null);
|
|
294
|
+
clearDragOverClasses();
|
|
295
|
+
clearDragState();
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
const arr = reorderArray(shuffled, from, to);
|
|
299
|
+
flipSetShuffled(arr);
|
|
300
|
+
setDraggedIndex(null);
|
|
301
|
+
clearDragState();
|
|
302
|
+
try {
|
|
303
|
+
if (typeof onDone === 'function' && currentState === 'active') {
|
|
304
|
+
const sc2 = arr.filter((s, i) => s.text === toText(items[i])).length;
|
|
305
|
+
// 드롭 핸들러에서만 호출되며 렌더링 중에는 실행되지 않는다
|
|
306
|
+
// eslint-disable-next-line react-hooks/purity
|
|
307
|
+
onDone({ shuffled: arr, score: sc2, total: (items || []).length, __ts: Date.now() });
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
catch (e) { }
|
|
311
|
+
try {
|
|
312
|
+
requestAnimationFrame(() => {
|
|
313
|
+
const list = document.querySelectorAll('.order-list .order-list__item');
|
|
314
|
+
const el = list[to];
|
|
315
|
+
if (!el)
|
|
316
|
+
return;
|
|
317
|
+
const slotEl = el.querySelector('.order-list__slot') || el;
|
|
318
|
+
try {
|
|
319
|
+
slotEl.classList.add('pulse');
|
|
320
|
+
void slotEl.offsetHeight;
|
|
321
|
+
slotEl.classList.add('to-dark');
|
|
322
|
+
const cleanup = () => {
|
|
323
|
+
slotEl.classList.remove('pulse', 'to-dark');
|
|
324
|
+
slotEl.removeEventListener('transitionend', cleanup);
|
|
325
|
+
};
|
|
326
|
+
slotEl.addEventListener('transitionend', cleanup);
|
|
327
|
+
}
|
|
328
|
+
catch (e) { }
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
catch (err) { }
|
|
332
|
+
clearDragOverClasses();
|
|
333
|
+
};
|
|
334
|
+
const clearDragState = () => {
|
|
335
|
+
if (draggingObjRef.current) {
|
|
336
|
+
try {
|
|
337
|
+
document.body.removeChild(draggingObjRef.current);
|
|
338
|
+
}
|
|
339
|
+
catch { }
|
|
340
|
+
draggingObjRef.current = null;
|
|
341
|
+
}
|
|
342
|
+
if (docDragOverHandlerRef.current) {
|
|
343
|
+
document.removeEventListener("dragover", docDragOverHandlerRef.current);
|
|
344
|
+
docDragOverHandlerRef.current = null;
|
|
345
|
+
}
|
|
346
|
+
if (docMouseMoveHandlerRef.current) {
|
|
347
|
+
document.removeEventListener("mousemove", docMouseMoveHandlerRef.current);
|
|
348
|
+
docMouseMoveHandlerRef.current = null;
|
|
349
|
+
}
|
|
350
|
+
if (rafRef.current !== null) {
|
|
351
|
+
cancelAnimationFrame(rafRef.current);
|
|
352
|
+
rafRef.current = null;
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
const handleDragEnd = () => {
|
|
356
|
+
setDraggedIndex(null);
|
|
357
|
+
clearDragOverClasses();
|
|
358
|
+
clearDragState();
|
|
359
|
+
};
|
|
360
|
+
// 드래그 도중(dragend/drop 발생 전) 컴포넌트가 언마운트되면(예: 훈련 스텝 자동 전환)
|
|
361
|
+
// document에 등록한 mousemove/dragover 리스너와 rAF 루프가 정리되지 않고 남아
|
|
362
|
+
// 언마운트된 클로저를 계속 참조하며 실행된다 — 언마운트 시 명시적으로 정리한다.
|
|
363
|
+
useEffect(() => {
|
|
364
|
+
return () => clearDragState();
|
|
365
|
+
}, []);
|
|
366
|
+
const clearDragOverClasses = () => {
|
|
367
|
+
try {
|
|
368
|
+
if (dragLeaveTimeoutRef.current !== null) {
|
|
369
|
+
clearTimeout(dragLeaveTimeoutRef.current);
|
|
370
|
+
dragLeaveTimeoutRef.current = null;
|
|
371
|
+
}
|
|
372
|
+
if (lastDragOverRef.current) {
|
|
373
|
+
try {
|
|
374
|
+
lastDragOverRef.current.classList.remove('drag-over');
|
|
375
|
+
}
|
|
376
|
+
catch (err) { }
|
|
377
|
+
lastDragOverRef.current = null;
|
|
378
|
+
}
|
|
379
|
+
const list = document.querySelectorAll('.order-list .order-list__item');
|
|
380
|
+
list.forEach((el) => el.classList.remove('drag-over'));
|
|
381
|
+
}
|
|
382
|
+
catch (err) { }
|
|
383
|
+
};
|
|
384
|
+
useEffect(() => {
|
|
385
|
+
try {
|
|
386
|
+
const total = Math.max(1, (shuffled || []).length);
|
|
387
|
+
shuffled.forEach((it, idx) => {
|
|
388
|
+
const el = markerRefs.current.get(it.id);
|
|
389
|
+
if (!el)
|
|
390
|
+
return;
|
|
391
|
+
let pct = 50;
|
|
392
|
+
if (total > 1)
|
|
393
|
+
pct = Math.round((idx / (total - 1)) * 100);
|
|
394
|
+
try {
|
|
395
|
+
el.style.setProperty('--marker-pos', pct + '%');
|
|
396
|
+
}
|
|
397
|
+
catch (err) { }
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
catch (err) { }
|
|
401
|
+
}, [shuffled]);
|
|
402
|
+
useEffect(() => {
|
|
403
|
+
return () => {
|
|
404
|
+
clearDragState();
|
|
405
|
+
if (dragLeaveTimeoutRef.current !== null) {
|
|
406
|
+
clearTimeout(dragLeaveTimeoutRef.current);
|
|
407
|
+
dragLeaveTimeoutRef.current = null;
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
}, []);
|
|
411
|
+
return (_jsx(TrainingStep, { index: index, stepIndex: stepIndex, isLast: isLast, title: resolvedTitle, children: _jsx("div", { className: "order-list", children: shuffled.map((it, idx) => {
|
|
412
|
+
const total = Math.max(1, (shuffled || []).length);
|
|
413
|
+
const pct = total > 1 ? Math.round((idx / (total - 1)) * 100) : 50;
|
|
414
|
+
return (_jsx("div", { className: `order-list__item`, children: _jsxs("div", { className: "order-list__slot", "data-disabled": currentState === 'disabled', "aria-disabled": currentState === 'disabled', children: [currentState !== 'disabled' ? (_jsx("div", { className: "order-list__marker caption-1", style: { '--marker-pos': pct + '%' }, ref: (el) => {
|
|
415
|
+
const map = markerRefs.current;
|
|
416
|
+
if (el)
|
|
417
|
+
map.set(it.id, el);
|
|
418
|
+
else
|
|
419
|
+
map.delete(it.id);
|
|
420
|
+
}, children: _jsx("span", { className: "order-list__slot-number button-1", children: idx + 1 }) })) : null, _jsxs("div", { ref: (el) => {
|
|
421
|
+
const map = itemRefs.current;
|
|
422
|
+
if (el)
|
|
423
|
+
map.set(it.id, el);
|
|
424
|
+
else
|
|
425
|
+
map.delete(it.id);
|
|
426
|
+
}, className: `order-list__draggable ${draggedIndex === idx ? "dragging" : ""}`, "data-disabled": currentState === 'disabled', "aria-disabled": currentState === 'disabled', tabIndex: currentState === 'disabled' ? -1 : 0, draggable: currentState === 'active', onDragStart: currentState === 'active' ? (e) => handleDragStart(idx, e) : undefined, onDragEnter: currentState === 'active' ? (e) => handleDragOverWithClass(idx, e) : undefined, onDragOver: currentState === 'active' ? (e) => handleDragOverWithClass(idx, e) : undefined, onDragLeave: currentState === 'active' ? () => {
|
|
427
|
+
try {
|
|
428
|
+
if (dragLeaveTimeoutRef.current !== null)
|
|
429
|
+
clearTimeout(dragLeaveTimeoutRef.current);
|
|
430
|
+
dragLeaveTimeoutRef.current = setTimeout(() => {
|
|
431
|
+
try {
|
|
432
|
+
const list = document.querySelectorAll('.order-list .order-list__item');
|
|
433
|
+
if (list && list[idx]) {
|
|
434
|
+
list[idx].classList.remove('drag-over');
|
|
435
|
+
if (lastDragOverRef.current === list[idx])
|
|
436
|
+
lastDragOverRef.current = null;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
catch (err) { }
|
|
440
|
+
}, 80);
|
|
441
|
+
}
|
|
442
|
+
catch (err) { }
|
|
443
|
+
} : undefined, onDrop: currentState === 'active' ? (e) => handleDrop(idx, e) : undefined, onDragEnd: currentState === 'active' ? handleDragEnd : undefined, children: [_jsx("span", { className: "order-list__item-text body-2", children: it.text }), currentState === 'active' ? (_jsxs("span", { className: "order-list__item-buttons", children: [_jsx(Button, { size: 32, type: "dot", onClick: () => move(idx, -1), ariaLabel: t("training.up"), icon: 'chevron-up', variant: 'transparent-gray', width: 48, useFaded: "true", disabled: idx === 0, useBorder: false, useDisabledInvisible: true }), _jsx(Button, { size: 32, type: "dot", onClick: () => move(idx, 1), ariaLabel: t("training.down"), icon: 'chevron-down', variant: 'transparent-gray', width: 48, useFaded: "true", disabled: idx === shuffled.length - 1, useBorder: false, useDisabledInvisible: true })] })) : null] })] }) }, it.id));
|
|
444
|
+
}) }) }));
|
|
445
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
.training-text-box {
|
|
2
|
+
background: var(--color-darkWhite);
|
|
3
|
+
border-radius: var(--radius-m);
|
|
4
|
+
color: var(--color-black);
|
|
5
|
+
max-width: 100%;
|
|
6
|
+
text-align: center;
|
|
7
|
+
word-break: keep-all;
|
|
8
|
+
overflow-wrap: anywhere;
|
|
9
|
+
/* allow overflow so preview button shadow isn't clipped */
|
|
10
|
+
overflow: visible;
|
|
11
|
+
position: relative;
|
|
12
|
+
padding: var(--spacing-content);
|
|
13
|
+
border: 1px solid var(--color-deepWhite);
|
|
14
|
+
|
|
15
|
+
/* make textbox a column flex container so inner parts can stretch */
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
min-height: 160px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* 상태 변형 */
|
|
22
|
+
.training-text-box--disabled {
|
|
23
|
+
pointer-events: none;
|
|
24
|
+
user-select: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* hide inner text when disabled, keep layout */
|
|
28
|
+
.training-text-box--disabled .training-text-box__inner {
|
|
29
|
+
visibility: hidden;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* optional subtle overlay to indicate hidden state */
|
|
33
|
+
.training-text-box--disabled::after {
|
|
34
|
+
content: "";
|
|
35
|
+
position: absolute;
|
|
36
|
+
pointer-events: none;
|
|
37
|
+
z-index: 5;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Preview button container - center overlay */
|
|
41
|
+
.training-text-box__preview {
|
|
42
|
+
position: absolute;
|
|
43
|
+
left: 50%;
|
|
44
|
+
top: 50%;
|
|
45
|
+
transform: translate(-50%, -50%);
|
|
46
|
+
z-index: 60;
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
pointer-events: auto; /* ensure clickable even when parent has pointer-events:none */
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.training-text-box__buttons {
|
|
54
|
+
position: relative;
|
|
55
|
+
left: 0; right:0;
|
|
56
|
+
height: 28px;
|
|
57
|
+
display: flex;
|
|
58
|
+
gap: 4px;
|
|
59
|
+
align-items: center;
|
|
60
|
+
justify-content: center;
|
|
61
|
+
box-sizing: border-box;
|
|
62
|
+
z-index: 40;
|
|
63
|
+
pointer-events: auto;
|
|
64
|
+
border-radius: 999px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.training-text-box__area {
|
|
68
|
+
position: relative;
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
justify-content: center;
|
|
72
|
+
text-align: center;
|
|
73
|
+
box-sizing: border-box;
|
|
74
|
+
z-index: 40;
|
|
75
|
+
pointer-events: auto;
|
|
76
|
+
margin: 0 auto;
|
|
77
|
+
width: 100%;
|
|
78
|
+
/* take remaining vertical space inside .textbox */
|
|
79
|
+
flex: 1 1 auto;
|
|
80
|
+
min-height: 0;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.training-text-box--active,
|
|
84
|
+
.training-text-box--done {
|
|
85
|
+
pointer-events: auto;
|
|
86
|
+
user-select: auto;
|
|
87
|
+
background-color: var(--color-white);
|
|
88
|
+
transition: box-shadow 180ms ease, transform 180ms ease, opacity 160ms ease;
|
|
89
|
+
border-color: var(--color-main);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.training-text-box.is-dark {
|
|
93
|
+
background: var(--color-darkGray);
|
|
94
|
+
border: 1px solid var(--color-black);
|
|
95
|
+
color: var(--color-deepWhite);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* ensure inner text block wraps and defines height */
|
|
99
|
+
.training-text-box .training-text-box__inner {
|
|
100
|
+
display: block;
|
|
101
|
+
text-align: center;
|
|
102
|
+
white-space: normal;
|
|
103
|
+
word-break: keep-all;
|
|
104
|
+
overflow-wrap: anywhere;
|
|
105
|
+
width: 100%;
|
|
106
|
+
}
|
|
107
|
+
/* ensure tooltip/text color inside dark mode is readable */
|
|
108
|
+
.training-text-box.is-dark .tooltip-textbox__text,
|
|
109
|
+
.training-text-box.is-dark .training-text-box__inner {
|
|
110
|
+
color: var(--color-deepWhite);
|
|
111
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "./TrainingStep.css";
|
|
2
|
+
import "./TrainingStepTextBox.css";
|
|
3
|
+
/** @public */
|
|
4
|
+
export default function TrainingStepTextBox({ context, state, theme: themeProp }: {
|
|
5
|
+
context?: string | Record<string, unknown>;
|
|
6
|
+
state?: string;
|
|
7
|
+
theme?: string;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
5
|
+
import Button from '../Button';
|
|
6
|
+
import Toast from '../Toast';
|
|
7
|
+
import { useFontScale } from '../../hooks';
|
|
8
|
+
import "./TrainingStep.css";
|
|
9
|
+
import "./TrainingStepTextBox.css";
|
|
10
|
+
/** @public */
|
|
11
|
+
export default function TrainingStepTextBox({ context, state = "disabled", theme: themeProp = 'light' }) {
|
|
12
|
+
const { t } = useTranslation();
|
|
13
|
+
const [localStatus, setLocalStatus] = useState("disabled");
|
|
14
|
+
const [theme, setTheme] = useState(() => {
|
|
15
|
+
try {
|
|
16
|
+
return localStorage.getItem('tooltip-theme') || themeProp;
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
return themeProp;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
try {
|
|
24
|
+
localStorage.setItem('tooltip-theme', theme);
|
|
25
|
+
}
|
|
26
|
+
catch (e) { }
|
|
27
|
+
}, [theme]);
|
|
28
|
+
const toggleTheme = () => setTheme((t) => (t === 'dark' ? 'light' : 'dark'));
|
|
29
|
+
const { increase, decrease, canIncrease, canDecrease, fontSize, lineHeight, } = useFontScale({
|
|
30
|
+
storageKey: 'textbox_fontScale',
|
|
31
|
+
});
|
|
32
|
+
const [noticeMessage, setNoticeMessage] = useState('');
|
|
33
|
+
const handleActivate = useCallback(() => setLocalStatus("active"), []);
|
|
34
|
+
const handleNoticeClose = useCallback(() => setNoticeMessage(''), []);
|
|
35
|
+
const showNotice = (msg) => {
|
|
36
|
+
try {
|
|
37
|
+
setNoticeMessage(msg);
|
|
38
|
+
}
|
|
39
|
+
catch (e) { }
|
|
40
|
+
};
|
|
41
|
+
const isMobile = typeof navigator !== "undefined" &&
|
|
42
|
+
/Mobi|Android/i.test(navigator.userAgent || "");
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (state !== "disabled") {
|
|
45
|
+
const id = setTimeout(() => setLocalStatus(state), 0);
|
|
46
|
+
return () => clearTimeout(id);
|
|
47
|
+
}
|
|
48
|
+
return undefined;
|
|
49
|
+
}, [state]);
|
|
50
|
+
const content = useMemo(() => {
|
|
51
|
+
if (context && typeof context === "object")
|
|
52
|
+
return String(context.sentence ?? context.text ?? "");
|
|
53
|
+
if (typeof context === "string")
|
|
54
|
+
return context;
|
|
55
|
+
return "";
|
|
56
|
+
}, [context]);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
const id = setTimeout(() => setLocalStatus("disabled"), 0);
|
|
59
|
+
return () => clearTimeout(id);
|
|
60
|
+
}, [content]);
|
|
61
|
+
const displayStatus = state === "disabled" ? localStatus : state;
|
|
62
|
+
const stateClass = displayStatus === "disabled"
|
|
63
|
+
? "training-text-box--disabled"
|
|
64
|
+
: displayStatus === "active"
|
|
65
|
+
? "training-text-box--active"
|
|
66
|
+
: displayStatus === "done"
|
|
67
|
+
? "training-text-box--done"
|
|
68
|
+
: "";
|
|
69
|
+
const textStyle = useMemo(() => ({
|
|
70
|
+
fontSize: `${fontSize}px`,
|
|
71
|
+
lineHeight: `${lineHeight}px`,
|
|
72
|
+
}), [fontSize, lineHeight]);
|
|
73
|
+
return (_jsxs("div", { className: `training-text-box ${stateClass} ${displayStatus !== 'disabled' && theme === 'dark' ? 'is-dark' : ''}`, children: [displayStatus === "disabled" && (_jsx("div", { className: "training-text-box__preview", children: _jsx(Button, { size: 48, type: "bar", onClick: handleActivate, icon: 'eye', ariaLabel: t('training.sentencePreview', '문장 미리보기'), label: t('training.sentencePreview', '문장 미리보기'), useBorder: false }) })), _jsx("div", { className: "training-text-box__area", "aria-hidden": displayStatus === "disabled", children: _jsx("span", { className: "training-text-box__inner h3", style: textStyle, children: content }) }), displayStatus !== "disabled" && (_jsxs("div", { className: "training-text-box__buttons", "aria-hidden": displayStatus === "disabled", children: [_jsx(Button, { size: 32, type: "dot", onClick: decrease, onDisabledClick: () => showNotice(t('training.fontSizeMin', '글씨 크기가 최소입니다.')), ariaLabel: t('training.fontSizeDecrease', '글자 크기 감소'), icon: 'minus', variant: theme === 'dark' ? 'transparent-white' : 'transparent-gray', disabled: !canDecrease, useBorder: false, showTooltipInfo: true, ...(!isMobile && { width: '60px' }) }), _jsx(Button, { size: 32, type: "dot", onClick: increase, onDisabledClick: () => showNotice(t('training.fontSizeMax', '글씨 크기가 최대입니다.')), ariaLabel: t('training.fontSizeIncrease', '글자 크기 증가'), icon: 'plus', variant: theme === 'dark' ? 'transparent-white' : 'transparent-gray', disabled: !canIncrease, useBorder: false, showTooltipInfo: true, ...(!isMobile && { width: '60px' }) }), _jsx(Button, { size: 32, showTooltipInfo: true, type: "dot", useBorder: false, width: 48, icon: theme === 'dark' ? 'moon' : 'sun-medium', onClick: toggleTheme, ariaLabel: t('training.toggleBackground', '배경 전환'), variant: theme === 'dark' ? 'transparent-white' : 'transparent-gray' })] })), _jsx(Toast, { message: noticeMessage, position: "top", onClose: handleNoticeClose })] }));
|
|
74
|
+
}
|