@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,654 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 한글 음절 분해/조립/거리 계산 유틸
|
|
3
|
+
* @public
|
|
4
|
+
*/
|
|
5
|
+
export const CHOSEONG = ['ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'];
|
|
6
|
+
export const JUNGSEONG = ['ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ'];
|
|
7
|
+
/** 종성 0번은 받침 없음 */
|
|
8
|
+
export const JONGSEONG = ['', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'];
|
|
9
|
+
/** @public 한 글자를 초/중/종성으로 분해. 한글 음절이 아니면 null. */
|
|
10
|
+
export function parseSyllable(ch) {
|
|
11
|
+
if (!ch)
|
|
12
|
+
return null;
|
|
13
|
+
const code = ch.charCodeAt(0) - 0xAC00;
|
|
14
|
+
if (code < 0 || code >= 11172)
|
|
15
|
+
return null;
|
|
16
|
+
return {
|
|
17
|
+
cho: Math.floor(code / (21 * 28)),
|
|
18
|
+
jung: Math.floor((code % (21 * 28)) / 28),
|
|
19
|
+
jong: code % 28,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @public 단어→음절 분해 배열 캐시 팩토리. `[...word].map(parseSyllable)`를 단어당 1회만 수행한다.
|
|
24
|
+
* 캐시 수명은 호출부가 소유한다 — 모듈 레벨에 두면 영속, 함수 안에 두면 호출당 새 캐시.
|
|
25
|
+
* (프리뷰 편집기와 wordTrainingRuntime이 동일 로직을 중복 정의하던 것을 단일화.)
|
|
26
|
+
*/
|
|
27
|
+
export function createDecompCache() {
|
|
28
|
+
const cache = new Map();
|
|
29
|
+
return (word) => {
|
|
30
|
+
let d = cache.get(word);
|
|
31
|
+
if (!d) {
|
|
32
|
+
d = [...word].map(ch => parseSyllable(ch));
|
|
33
|
+
cache.set(word, d);
|
|
34
|
+
}
|
|
35
|
+
return d;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** @public 초/중/종성 index로 한글 음절 조립. */
|
|
39
|
+
export function composeSyllable(cho, jung, jong = 0) {
|
|
40
|
+
return String.fromCharCode(0xAC00 + (cho * 21 + jung) * 28 + jong);
|
|
41
|
+
}
|
|
42
|
+
export function classifyPairDifficulty(a, b) {
|
|
43
|
+
if (!a || !b || a === b)
|
|
44
|
+
return 'random';
|
|
45
|
+
if (a.length !== b.length)
|
|
46
|
+
return 'random';
|
|
47
|
+
let diffSyllableCount = 0;
|
|
48
|
+
let lastDiff = null;
|
|
49
|
+
for (let i = 0; i < a.length; i++) {
|
|
50
|
+
const sa = parseSyllable(a[i]);
|
|
51
|
+
const sb = parseSyllable(b[i]);
|
|
52
|
+
if (!sa || !sb)
|
|
53
|
+
return 'random';
|
|
54
|
+
if (sa.cho === sb.cho && sa.jung === sb.jung && sa.jong === sb.jong)
|
|
55
|
+
continue;
|
|
56
|
+
diffSyllableCount++;
|
|
57
|
+
const choDiff = sa.cho !== sb.cho;
|
|
58
|
+
const jungDiff = sa.jung !== sb.jung;
|
|
59
|
+
const jongDiff = sa.jong !== sb.jong;
|
|
60
|
+
const cnt = (choDiff ? 1 : 0) + (jungDiff ? 1 : 0) + (jongDiff ? 1 : 0);
|
|
61
|
+
if (cnt > 1)
|
|
62
|
+
lastDiff = 'multi';
|
|
63
|
+
else if (choDiff)
|
|
64
|
+
lastDiff = 'cho';
|
|
65
|
+
else if (jungDiff)
|
|
66
|
+
lastDiff = 'jung';
|
|
67
|
+
else
|
|
68
|
+
lastDiff = 'jong';
|
|
69
|
+
}
|
|
70
|
+
if (diffSyllableCount !== 1)
|
|
71
|
+
return 'random';
|
|
72
|
+
if (lastDiff === 'cho')
|
|
73
|
+
return 'cho';
|
|
74
|
+
if (lastDiff === 'jung')
|
|
75
|
+
return 'jung';
|
|
76
|
+
if (lastDiff === 'jong')
|
|
77
|
+
return 'jong';
|
|
78
|
+
return 'random';
|
|
79
|
+
}
|
|
80
|
+
/** @public 단어의 초성 자모 ('가구' → 'ㄱ') */
|
|
81
|
+
export function firstChoseongOf(word) {
|
|
82
|
+
const s = parseSyllable(word[0] || '');
|
|
83
|
+
return s ? CHOSEONG[s.cho] : '';
|
|
84
|
+
}
|
|
85
|
+
/** @public 문자열 전체를 초성으로 변환 ('한지민' → 'ㅎㅈㅁ'). 한글 음절이 아닌 문자는 그대로 유지. */
|
|
86
|
+
export function toChoseong(text) {
|
|
87
|
+
return [...text].map(ch => {
|
|
88
|
+
const s = parseSyllable(ch);
|
|
89
|
+
return s ? CHOSEONG[s.cho] : ch;
|
|
90
|
+
}).join('');
|
|
91
|
+
}
|
|
92
|
+
/** @public 검색어가 초성으로만 이루어졌는지 (예: 'ㅎㅈ' → true, '한' → false) */
|
|
93
|
+
export function isAllChoseong(search) {
|
|
94
|
+
return !!search && [...search].every(ch => CHOSEONG.includes(ch));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* @public 초성 검색을 지원하는 부분 일치 매칭 — 검색어가 전부 초성이면 대상 텍스트도
|
|
98
|
+
* 초성으로 변환해 비교(예: 'ㄷ' → '단어 표' 매칭), 아니면 일반 부분 문자열 매칭.
|
|
99
|
+
*/
|
|
100
|
+
export function matchesChoseongSearch(text, search) {
|
|
101
|
+
if (!search)
|
|
102
|
+
return true;
|
|
103
|
+
if (isAllChoseong(search))
|
|
104
|
+
return toChoseong(text).includes(search);
|
|
105
|
+
return text.toLowerCase().includes(search.toLowerCase());
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* @public 단어 검색어 매칭(부분 일치=contains) — 검색어의 각 글자가 '완성 음절'이거나 '음소 자모'(초성·중성)인
|
|
109
|
+
* 혼합 검색을 지원한다. 완성 음절은 그 자리 음절과 정확히 같아야 하고, 자음 자모는 그 자리 음절의 초성과,
|
|
110
|
+
* 모음 자모는 그 자리 음절의 중성과 같으면 된다 — 위치(앞·중간·뒤) 무관.
|
|
111
|
+
* 예: 'ㄱ'→'가수'(초성 ㄱ), 'ㅏ'→'가수'(중성 ㅏ), 'ㄱㅅ'→'가수', '가ㄴ'→'가난', 'ㄱ수'→'가수', '가수'→'가수'.
|
|
112
|
+
* 검색어에 종성 겹자모·비한글 등 위 종류가 아닌 문자가 있으면 일반 부분 문자열로 폴백한다.
|
|
113
|
+
*/
|
|
114
|
+
export function matchesWordQuery(word, query) {
|
|
115
|
+
if (!query)
|
|
116
|
+
return true;
|
|
117
|
+
const q = [...query];
|
|
118
|
+
const isCho = (ch) => CHOSEONG.includes(ch);
|
|
119
|
+
const isJung = (ch) => JUNGSEONG.includes(ch);
|
|
120
|
+
// 각 글자 분류: 'cho'(자음/초성) | 'jung'(모음/중성) | 'syl'(완성 음절) | 'other'(그 외)
|
|
121
|
+
const kinds = q.map(ch => (isCho(ch) ? 'cho' : isJung(ch) ? 'jung' : parseSyllable(ch) ? 'syl' : 'other'));
|
|
122
|
+
if (kinds.includes('other'))
|
|
123
|
+
return word.includes(query);
|
|
124
|
+
const w = [...word];
|
|
125
|
+
for (let i = 0; i + q.length <= w.length; i++) {
|
|
126
|
+
let ok = true;
|
|
127
|
+
for (let j = 0; j < q.length; j++) {
|
|
128
|
+
const wc = w[i + j];
|
|
129
|
+
const k = kinds[j];
|
|
130
|
+
if (k === 'cho') {
|
|
131
|
+
if (firstChoseongOf(wc) !== q[j]) {
|
|
132
|
+
ok = false;
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else if (k === 'jung') {
|
|
137
|
+
const s = parseSyllable(wc);
|
|
138
|
+
if (!s || JUNGSEONG[s.jung] !== q[j]) {
|
|
139
|
+
ok = false;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else { // 'syl' — 완성 음절
|
|
144
|
+
const qs = parseSyllable(q[j]);
|
|
145
|
+
if (qs && qs.jong === 0) {
|
|
146
|
+
// 받침 없는 글자는 초성+중성만 비교(받침 무관): '수' → 수·술·숙·순 …
|
|
147
|
+
const ws = parseSyllable(wc);
|
|
148
|
+
if (!ws || ws.cho !== qs.cho || ws.jung !== qs.jung) {
|
|
149
|
+
ok = false;
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else if (wc !== q[j]) {
|
|
154
|
+
ok = false;
|
|
155
|
+
break;
|
|
156
|
+
} // 받침 있으면 정확 일치
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (ok)
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
// 복합 종성 자모 분해 (예: ㄺ → ㄹ+ㄱ)
|
|
165
|
+
/** @public 복합 종성 index → 구성 자모 배열 (예: 9(ㄺ) → ['ㄹ','ㄱ']) */
|
|
166
|
+
export const JONG_DECOMPOSE = {
|
|
167
|
+
3: ['ㄱ', 'ㅅ'], // ㄳ
|
|
168
|
+
5: ['ㄴ', 'ㅈ'], // ㄵ
|
|
169
|
+
6: ['ㄴ', 'ㅎ'], // ㄶ
|
|
170
|
+
9: ['ㄹ', 'ㄱ'], // ㄺ
|
|
171
|
+
10: ['ㄹ', 'ㅁ'], // ㄻ
|
|
172
|
+
11: ['ㄹ', 'ㅂ'], // ㄼ
|
|
173
|
+
12: ['ㄹ', 'ㅅ'], // ㄽ
|
|
174
|
+
13: ['ㄹ', 'ㅌ'], // ㄾ
|
|
175
|
+
14: ['ㄹ', 'ㅍ'], // ㄿ
|
|
176
|
+
15: ['ㄹ', 'ㅎ'], // ㅀ
|
|
177
|
+
18: ['ㅂ', 'ㅅ'], // ㅄ
|
|
178
|
+
};
|
|
179
|
+
/** 겹받침 구성 2자모 문자열 → 겹받침 원형 자모. 예: 'ㄹㄱ' → 'ㄺ'. (JONG_DECOMPOSE 역맵) */
|
|
180
|
+
const COMPOUND_JONG = Object.fromEntries(Object.entries(JONG_DECOMPOSE).map(([idx, parts]) => [parts.join(''), JONGSEONG[Number(idx)]]));
|
|
181
|
+
/** @public 단어가 특정 자모(음소)를 어디든 (초성/종성/복합종성) 포함하는지 */
|
|
182
|
+
export function wordContainsPhoneme(word, jamo) {
|
|
183
|
+
if (!word || !jamo)
|
|
184
|
+
return false;
|
|
185
|
+
for (const ch of word) {
|
|
186
|
+
const s = parseSyllable(ch);
|
|
187
|
+
if (!s)
|
|
188
|
+
continue;
|
|
189
|
+
if (CHOSEONG[s.cho] === jamo)
|
|
190
|
+
return true;
|
|
191
|
+
if (s.jong > 0) {
|
|
192
|
+
if (JONGSEONG[s.jong] === jamo)
|
|
193
|
+
return true; // 겹받침 원형 정확 매칭
|
|
194
|
+
const decomp = JONG_DECOMPOSE[s.jong];
|
|
195
|
+
if (decomp && decomp.includes(jamo))
|
|
196
|
+
return true; // 겹받침 구성 자모 매칭
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
/** @public 단어가 특정 자모를 초성(onset)으로 포함하는지 */
|
|
202
|
+
export function wordContainsChoseong(word, jamo) {
|
|
203
|
+
if (!word || !jamo)
|
|
204
|
+
return false;
|
|
205
|
+
for (const ch of word) {
|
|
206
|
+
const s = parseSyllable(ch);
|
|
207
|
+
if (s && CHOSEONG[s.cho] === jamo)
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
/** @public 단어가 특정 모음을 중성(vowel)으로 포함하는지 */
|
|
213
|
+
export function wordContainsJungseong(word, jamo) {
|
|
214
|
+
if (!word || !jamo)
|
|
215
|
+
return false;
|
|
216
|
+
for (const ch of word) {
|
|
217
|
+
const s = parseSyllable(ch);
|
|
218
|
+
if (s && JUNGSEONG[s.jung] === jamo)
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
/** @public 단어가 특정 자모를 종성(coda)으로 포함하는지.
|
|
224
|
+
* 글자 입력: 겹받침 '원형'(ㅄ 등) 정확 매칭. 발음 입력: 겹받침을 구성 자모(ㅂ 등)로 분해해 대표음 매칭. */
|
|
225
|
+
export function wordContainsJongseong(word, jamo) {
|
|
226
|
+
if (!word || !jamo)
|
|
227
|
+
return false;
|
|
228
|
+
for (const ch of word) {
|
|
229
|
+
const s = parseSyllable(ch);
|
|
230
|
+
if (!s || s.jong <= 0)
|
|
231
|
+
continue;
|
|
232
|
+
if (JONGSEONG[s.jong] === jamo)
|
|
233
|
+
return true; // 겹받침 원형 포함 정확 매칭
|
|
234
|
+
const decomp = JONG_DECOMPOSE[s.jong];
|
|
235
|
+
if (decomp && decomp.includes(jamo))
|
|
236
|
+
return true; // 겹받침 구성 자모(대표음) 매칭
|
|
237
|
+
}
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
/** @public 단어의 한글 음절 개수 (한글 이외 문자는 제외) */
|
|
241
|
+
export function syllableLength(word) {
|
|
242
|
+
if (!word)
|
|
243
|
+
return 0;
|
|
244
|
+
let n = 0;
|
|
245
|
+
for (const ch of word)
|
|
246
|
+
if (parseSyllable(ch))
|
|
247
|
+
n++;
|
|
248
|
+
return n;
|
|
249
|
+
}
|
|
250
|
+
/** @public 단어의 모든 한글 음절에 종성(받침)이 없는지 (열린 음절로만 구성) */
|
|
251
|
+
export function wordHasNoCoda(word) {
|
|
252
|
+
if (!word)
|
|
253
|
+
return false;
|
|
254
|
+
let sawSyllable = false;
|
|
255
|
+
for (const ch of word) {
|
|
256
|
+
const s = parseSyllable(ch);
|
|
257
|
+
if (!s)
|
|
258
|
+
continue;
|
|
259
|
+
sawSyllable = true;
|
|
260
|
+
if (s.jong > 0)
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
return sawSyllable;
|
|
264
|
+
}
|
|
265
|
+
/** 한 음절(Syllable)이 주어진 종성 자모 집합 중 하나를 종성으로 갖는지.
|
|
266
|
+
* 글자 입력: 겹받침 원형 정확 매칭. 발음 입력: 겹받침 구성 자모(대표음)도 매칭. */
|
|
267
|
+
function syllableJongMatches(s, jamos) {
|
|
268
|
+
if (s.jong <= 0)
|
|
269
|
+
return false;
|
|
270
|
+
if (jamos.includes(JONGSEONG[s.jong]))
|
|
271
|
+
return true;
|
|
272
|
+
const decomp = JONG_DECOMPOSE[s.jong];
|
|
273
|
+
return !!decomp && decomp.some(j => jamos.includes(j));
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* @public 단어에 '하나의 음절'이 주어진 초성/중성/종성 제약을 **모두** 만족하는지.
|
|
277
|
+
* 여러 자리를 함께 선택하면 서로 다른 음절에 흩어져 있는 게 아니라 같은 음절에서 결합해야 한다
|
|
278
|
+
* (예: 초성 ㄱ + 종성 ㅇ → '강'·'공'만 매칭, '코딩'처럼 다른 음절에 흩어진 건 제외).
|
|
279
|
+
* 각 제약은 배열(OR) — 미지정(null/undefined) 자리는 검사하지 않는다. jongNone은 그 음절이 받침 없음.
|
|
280
|
+
*/
|
|
281
|
+
export function wordHasSyllableMatching(word, parts,
|
|
282
|
+
// 위치 제약(선택) — 'head'=어두(첫음절), 'tail'=어말(끝음절), 'mid'=어중(가운데, 3음절+). 미지정=모든 음절.
|
|
283
|
+
position) {
|
|
284
|
+
if (!word)
|
|
285
|
+
return false;
|
|
286
|
+
const chars = [...word];
|
|
287
|
+
const matchAt = (i) => {
|
|
288
|
+
const s = parseSyllable(chars[i]);
|
|
289
|
+
if (!s)
|
|
290
|
+
return false;
|
|
291
|
+
if (parts.cho && !parts.cho.includes(CHOSEONG[s.cho]))
|
|
292
|
+
return false;
|
|
293
|
+
if (parts.jung && !parts.jung.includes(JUNGSEONG[s.jung]))
|
|
294
|
+
return false;
|
|
295
|
+
if (parts.jongNone) {
|
|
296
|
+
if (s.jong > 0)
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
else if (parts.jong && !syllableJongMatches(s, parts.jong))
|
|
300
|
+
return false;
|
|
301
|
+
return true;
|
|
302
|
+
};
|
|
303
|
+
if (position === 'head')
|
|
304
|
+
return matchAt(0);
|
|
305
|
+
if (position === 'tail')
|
|
306
|
+
return matchAt(chars.length - 1);
|
|
307
|
+
if (position === 'mid') {
|
|
308
|
+
for (let i = 1; i < chars.length - 1; i++)
|
|
309
|
+
if (matchAt(i))
|
|
310
|
+
return true;
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
for (let i = 0; i < chars.length; i++)
|
|
314
|
+
if (matchAt(i))
|
|
315
|
+
return true;
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* @public 문자열이 음절 패턴 DSL 문법인지 — 쉼표(,) 포함 여부로 판별한다.
|
|
320
|
+
* 일반 단어 검색어엔 쉼표가 쓰이지 않으므로 충돌 없이 자동 분기할 수 있다.
|
|
321
|
+
*/
|
|
322
|
+
export function isSyllablePattern(query) {
|
|
323
|
+
// 쉼표(음절 구분) 또는 밑줄(초성·중성·종성 템플릿의 '무관' 자리 '_')이 있으면 패턴 DSL로 라우팅한다.
|
|
324
|
+
// '_'는 완성 단어에 없는 문자라 일반 부분문자열 검색으로는 늘 0건 — 쉼표 없이 쓴 3자모 템플릿('ㄱ_ㄱ')도
|
|
325
|
+
// 패턴으로 인식해야 한다(예: 'ㄱ_ㄱ' → 1음절, 초성 ㄱ·종성 ㄱ·중성 무관 = 각/국/곡…).
|
|
326
|
+
return query.includes(',') || query.includes('_');
|
|
327
|
+
}
|
|
328
|
+
// 쉼표로 나눈 한 조각(청크)을 자리(atom) 목록으로 푼다.
|
|
329
|
+
// - 빈 청크 → 무관 자리 1개.
|
|
330
|
+
// - '_'가 하나라도 있으면 → 한 음절 템플릿 1개(초성·중성·종성 순, 1~3자). 생략한 뒤 자리와 '_'는 무관.
|
|
331
|
+
// 예: '__ㄱ'=종성ㄱ, 'ㄱ_'=초성ㄱ(중성·종성 무관), '_ㅏ'=중성ㅏ, 'ㄱ_ㄱ'=초성ㄱ·종성ㄱ.
|
|
332
|
+
// - '_'가 없으면 → 한 글자씩 잘라 각각 한 자리로(완성 음절/초성/중성). 예: '가ㄴ'→'가' 자리 + 초성 'ㄴ' 자리.
|
|
333
|
+
// 해석 불가한 글자는 invalid 자리 — 항상 매칭 실패해 제약이 조용히 무시되지 않게 한다.
|
|
334
|
+
function parseChunkToAtoms(chunk) {
|
|
335
|
+
if (chunk === '')
|
|
336
|
+
return [{ kind: 'any' }];
|
|
337
|
+
if (chunk.includes('_')) {
|
|
338
|
+
// 한 음절 템플릿: 초성(1) + 중성(1) + 종성(0~2, 겹받침은 2자모). 최대 4자모.
|
|
339
|
+
const arr = [...chunk];
|
|
340
|
+
if (arr.length > 4)
|
|
341
|
+
return [{ kind: 'invalid' }];
|
|
342
|
+
const cho = arr[0] ?? '_';
|
|
343
|
+
const jung = arr[1] ?? '_';
|
|
344
|
+
let jong = arr.slice(2).join(''); // '', 단일 종성, 또는 겹받침 2자모('ㄹㄱ')
|
|
345
|
+
if (jong.length === 2) {
|
|
346
|
+
const combined = COMPOUND_JONG[jong]; // 'ㄹㄱ' → 'ㄺ'
|
|
347
|
+
if (!combined)
|
|
348
|
+
return [{ kind: 'invalid' }];
|
|
349
|
+
jong = combined;
|
|
350
|
+
}
|
|
351
|
+
return [{ kind: 'template', cho, jung, jong: jong || '_' }];
|
|
352
|
+
}
|
|
353
|
+
return [...chunk].map((ch) => {
|
|
354
|
+
if (parseSyllable(ch))
|
|
355
|
+
return { kind: 'syllable', ch };
|
|
356
|
+
if (CHOSEONG.includes(ch))
|
|
357
|
+
return { kind: 'cho', jamo: ch };
|
|
358
|
+
if (JUNGSEONG.includes(ch))
|
|
359
|
+
return { kind: 'jung', jamo: ch };
|
|
360
|
+
return { kind: 'invalid' };
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
function matchesPatternAtom(ch, atom) {
|
|
364
|
+
switch (atom.kind) {
|
|
365
|
+
case 'any': return true;
|
|
366
|
+
case 'syllable': {
|
|
367
|
+
const qs = parseSyllable(atom.ch);
|
|
368
|
+
if (!qs)
|
|
369
|
+
return ch === atom.ch;
|
|
370
|
+
if (qs.jong === 0) {
|
|
371
|
+
// 받침 없는 완성형은 초성+중성만 비교(받침 무관): '수' → 수·술·숙 …
|
|
372
|
+
const s = parseSyllable(ch);
|
|
373
|
+
return !!s && s.cho === qs.cho && s.jung === qs.jung;
|
|
374
|
+
}
|
|
375
|
+
return ch === atom.ch; // 받침 있으면 정확 일치
|
|
376
|
+
}
|
|
377
|
+
case 'cho': {
|
|
378
|
+
const s = parseSyllable(ch);
|
|
379
|
+
return !!s && CHOSEONG[s.cho] === atom.jamo;
|
|
380
|
+
}
|
|
381
|
+
case 'jung': {
|
|
382
|
+
const s = parseSyllable(ch);
|
|
383
|
+
return !!s && JUNGSEONG[s.jung] === atom.jamo;
|
|
384
|
+
}
|
|
385
|
+
case 'template': {
|
|
386
|
+
const s = parseSyllable(ch);
|
|
387
|
+
if (!s)
|
|
388
|
+
return false;
|
|
389
|
+
if (atom.cho !== '_' && CHOSEONG[s.cho] !== atom.cho)
|
|
390
|
+
return false;
|
|
391
|
+
if (atom.jung !== '_' && JUNGSEONG[s.jung] !== atom.jung)
|
|
392
|
+
return false;
|
|
393
|
+
if (atom.jong !== '_' && JONGSEONG[s.jong] !== atom.jong)
|
|
394
|
+
return false;
|
|
395
|
+
return true;
|
|
396
|
+
}
|
|
397
|
+
case 'invalid': return false;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* @public 음절 패턴 미니 DSL 매칭. 쉼표(,)로 나눈 조각을 자리(음절) 단위로 자동 분해하며,
|
|
402
|
+
* **분해된 총 자리 수는 반드시 단어의 음절 수와 같아야** 매칭된다. 한 자리는 다음 중 하나:
|
|
403
|
+
* - 빈 자리(쉼표 사이가 비어 있음) — 무관(아무 음절이나 허용).
|
|
404
|
+
* - 완성 음절 한 글자(예: '가') — 그 자리 음절이 정확히 이 글자와 같아야 함.
|
|
405
|
+
* - 자음/모음 한 글자(예: 'ㄴ', 'ㅏ') — 자음이면 그 자리 초성이, 모음이면 그 자리 중성이 정확히 그
|
|
406
|
+
* 자모여야 함(나머지는 무관).
|
|
407
|
+
* - 초성·중성·종성 3자모 템플릿(예: '__ㄱ', 쉼표로 나눈 조각이 정확히 3글자일 때만) — 각 자리가 '_'면
|
|
408
|
+
* 무관, 자모면 그 위치(초성/중성/종성)가 정확히 그 자모여야 함. 종성 자리 '_'는 받침 유무 모두 허용.
|
|
409
|
+
* 쉼표 사이에 완성 음절·자음·모음을 이어 붙이면(예: '가ㄴ') 한 글자씩 각각 한 음절 자리로 자동 분해된다
|
|
410
|
+
* (3글자로 붙이면 템플릿과 구분이 안 되므로 예외 — 그 경우는 쉼표로 나눠 쓴다).
|
|
411
|
+
* 예: '가,,다' → 3음절, 첫 음절 '가' · 가운데 무관 · 끝 음절 '다'.
|
|
412
|
+
* 예: '__ㄱ,고' → 2음절, 첫 음절 종성이 'ㄱ'(초성·중성 무관) · 끝 음절 '고'.
|
|
413
|
+
* 예: '가ㄴ,,다'(= '가,ㄴ,,다'와 동일) → 4음절, 첫 음절 '가' · 둘째 음절 초성 'ㄴ' · 셋째 무관 · 넷째 '다'.
|
|
414
|
+
* 해석할 수 없는 글자(자음·모음·완성 음절이 아님)가 섞이면 그 자리는 항상 매칭 실패 처리되어 결과가
|
|
415
|
+
* 0건이 된다(조용히 무관 처리하지 않는다 — 제약이 무시된 채 결과가 나오는 오해를 막기 위해).
|
|
416
|
+
*/
|
|
417
|
+
export function matchesSyllablePattern(word, pattern) {
|
|
418
|
+
const atoms = pattern.split(',').flatMap(chunk => parseChunkToAtoms(chunk.trim()));
|
|
419
|
+
if (atoms.length === 0)
|
|
420
|
+
return true;
|
|
421
|
+
const chars = [...word];
|
|
422
|
+
if (chars.length < atoms.length)
|
|
423
|
+
return false;
|
|
424
|
+
// '포함' 매칭 — 패턴(연속 음절 자리들)이 단어의 어느 위치에서든 연속으로 맞으면 통과.
|
|
425
|
+
// (단어 음절수 == 패턴 자리수를 요구하지 않는다. 예: '__ㄱ,고' → 첫음절 종성ㄱ+둘째음절 '고'를
|
|
426
|
+
// 포함한 모든 단어 = 학교·박고구마… 길이 무관.)
|
|
427
|
+
for (let i = 0; i + atoms.length <= chars.length; i++) {
|
|
428
|
+
if (atoms.every((atom, j) => matchesPatternAtom(chars[i + j], atom)))
|
|
429
|
+
return true;
|
|
430
|
+
}
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* @public 음절 패턴 DSL을 대립쌍 생성용 구성요소(초성/중성/종성) 집합으로 축약한다.
|
|
435
|
+
* 패턴의 모든 자리(atom)가 지정한 초성/중성/종성 자모를 종류별로 합집합(OR)해 돌려준다 —
|
|
436
|
+
* 훈련 '글자 입력' 모드에서 이 조합을 buildMultiPartPosContrast에 넣어 (위치 지정과 함께)
|
|
437
|
+
* "그 자리의 해당 음소만 다른 최소대립쌍"을 오답으로 만든다.
|
|
438
|
+
* 예: 'ㄱ,ㄱ'(연속 초성 ㄱ) → { cho: ['ㄱ'] } → 위치 음절의 초성만 다른 실단어가 오답.
|
|
439
|
+
* 'ㄱ_ㄱ'(초성 ㄱ·종성 ㄱ) → { cho: ['ㄱ'], jong: ['ㄱ'] }.
|
|
440
|
+
* 완성 음절 자리('가')는 그 음절의 초성·중성(·종성)을 모두 제약으로 넣는다.
|
|
441
|
+
* 지정된 음소가 하나도 없으면(무관/무효 자리뿐) null — 호출부는 무작위 오답으로 폴백한다.
|
|
442
|
+
*/
|
|
443
|
+
export function patternToComposition(pattern) {
|
|
444
|
+
const atoms = pattern.split(',').flatMap(chunk => parseChunkToAtoms(chunk.trim()));
|
|
445
|
+
const cho = new Set(), jung = new Set(), jong = new Set();
|
|
446
|
+
for (const atom of atoms) {
|
|
447
|
+
switch (atom.kind) {
|
|
448
|
+
case 'cho':
|
|
449
|
+
cho.add(atom.jamo);
|
|
450
|
+
break;
|
|
451
|
+
case 'jung':
|
|
452
|
+
jung.add(atom.jamo);
|
|
453
|
+
break;
|
|
454
|
+
case 'template':
|
|
455
|
+
if (atom.cho !== '_')
|
|
456
|
+
cho.add(atom.cho);
|
|
457
|
+
if (atom.jung !== '_')
|
|
458
|
+
jung.add(atom.jung);
|
|
459
|
+
if (atom.jong !== '_')
|
|
460
|
+
jong.add(atom.jong);
|
|
461
|
+
break;
|
|
462
|
+
case 'syllable': {
|
|
463
|
+
const s = parseSyllable(atom.ch);
|
|
464
|
+
if (s) {
|
|
465
|
+
cho.add(CHOSEONG[s.cho]);
|
|
466
|
+
jung.add(JUNGSEONG[s.jung]);
|
|
467
|
+
if (s.jong !== 0)
|
|
468
|
+
jong.add(JONGSEONG[s.jong]);
|
|
469
|
+
}
|
|
470
|
+
break;
|
|
471
|
+
}
|
|
472
|
+
// 'any' / 'invalid' 는 음소 제약 없음 — 무시.
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
if (cho.size === 0 && jung.size === 0 && jong.size === 0)
|
|
476
|
+
return null;
|
|
477
|
+
return {
|
|
478
|
+
cho: cho.size ? [...cho] : null,
|
|
479
|
+
jung: jung.size ? [...jung] : null,
|
|
480
|
+
jong: jong.size ? [...jong] : null,
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
/** 검색 입력에서 한 자리로 쓸 수 있는 글자: 완성 음절 · 초성 자모 · 중성 자모. */
|
|
484
|
+
function isSearchAtomChar(ch) {
|
|
485
|
+
return !!parseSyllable(ch)
|
|
486
|
+
|| CHOSEONG.includes(ch)
|
|
487
|
+
|| JUNGSEONG.includes(ch);
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* @public 단어 검색 '글자 입력'의 형식 유효성 검사.
|
|
491
|
+
* 허용: 완성 음절('가'), 초성/중성 자모('ㄱ'·'ㅏ'), 초성·중성·종성 3자모 템플릿('__ㄱ', 정확히 3글자),
|
|
492
|
+
* 쉼표(,) 구분(빈 자리는 '무관'). 그 외(예: '_' 오용, 라틴 문자, 한 자리에 음소 4개 이상인 '___ㄱ')는 무효.
|
|
493
|
+
* @returns 유효하면 `{ ok: true }`, 아니면 `{ ok: false }`(호출부가 안내 문구를 표시).
|
|
494
|
+
*/
|
|
495
|
+
export function validateSyllableSearchInput(input) {
|
|
496
|
+
const trimmed = input.trim();
|
|
497
|
+
if (!trimmed)
|
|
498
|
+
return { ok: true };
|
|
499
|
+
for (const raw of trimmed.split(',')) {
|
|
500
|
+
const chunk = raw.trim();
|
|
501
|
+
if (chunk === '')
|
|
502
|
+
continue; // 쉼표 사이 빈 자리 = '무관'
|
|
503
|
+
if (chunk.includes('_')) {
|
|
504
|
+
// '_' 있으면 한 음절 템플릿(초성·중성·종성 순). 종성은 겹받침(2자모)까지 허용 — 최대 4자모.
|
|
505
|
+
const arr = [...chunk];
|
|
506
|
+
if (arr.length > 4)
|
|
507
|
+
return { ok: false };
|
|
508
|
+
const a = arr[0], b = arr[1], jong = arr.slice(2).join('');
|
|
509
|
+
const okCho = a === undefined || a === '_' || CHOSEONG.includes(a);
|
|
510
|
+
const okJung = b === undefined || b === '_' || JUNGSEONG.includes(b);
|
|
511
|
+
const okJong = jong === '' || jong === '_'
|
|
512
|
+
|| JONGSEONG.filter(Boolean).includes(jong) // 단일(겹받침 원형 포함)
|
|
513
|
+
|| !!COMPOUND_JONG[jong]; // 2자모 겹받침('ㄹㄱ')
|
|
514
|
+
if (okCho && okJung && okJong)
|
|
515
|
+
continue;
|
|
516
|
+
return { ok: false };
|
|
517
|
+
}
|
|
518
|
+
// '_' 없으면 각 글자가 완성 음절/초성/중성이어야 한다(기타 문자는 무효).
|
|
519
|
+
if (![...chunk].every(isSearchAtomChar))
|
|
520
|
+
return { ok: false };
|
|
521
|
+
}
|
|
522
|
+
return { ok: true };
|
|
523
|
+
}
|
|
524
|
+
const PART_DIM = {
|
|
525
|
+
cho: CHOSEONG.length, // 19
|
|
526
|
+
jung: JUNGSEONG.length, // 21
|
|
527
|
+
jong: JONGSEONG.length, // 28
|
|
528
|
+
};
|
|
529
|
+
/**
|
|
530
|
+
* @public
|
|
531
|
+
* 정확히 `count`개 음절에서 지정 구성요소(초성/중성/종성)만 다르고 나머지 성분은 완전히 동일한
|
|
532
|
+
* 실제 단어들을 찾는다. (compose-and-check 방식 — wordSet 멤버십으로 실재 단어만 반환)
|
|
533
|
+
*
|
|
534
|
+
* 예: findTypedContrastWords('가수', 'jung', 2, set) → ['개시','고소','기사', …] (모음 2곳 차이)
|
|
535
|
+
*
|
|
536
|
+
* @param word 기준 단어
|
|
537
|
+
* @param type 대립 종류 (cho/jung/jong)
|
|
538
|
+
* @param count 차이 나는 음절 수 (대립 갯수)
|
|
539
|
+
* @param wordSet 유효 단어 집합 (여기 포함된 단어만 결과에 포함)
|
|
540
|
+
* @param limit 최대 결과 수 (조기 종료로 연산량 제한, 기본 Infinity)
|
|
541
|
+
*/
|
|
542
|
+
export function findTypedContrastWords(word, type, count, wordSet, limit = Infinity) {
|
|
543
|
+
if (!word || count < 1)
|
|
544
|
+
return [];
|
|
545
|
+
const parsed = [...word].map(ch => parseSyllable(ch));
|
|
546
|
+
if (parsed.some(s => !s))
|
|
547
|
+
return [];
|
|
548
|
+
const syls = parsed;
|
|
549
|
+
const k = syls.length;
|
|
550
|
+
if (count > k)
|
|
551
|
+
return [];
|
|
552
|
+
const dim = PART_DIM[type];
|
|
553
|
+
const results = new Set();
|
|
554
|
+
// 차이 낼 음절 위치 조합 C(k, count)
|
|
555
|
+
const positions = [];
|
|
556
|
+
(function pick(start, acc) {
|
|
557
|
+
if (acc.length === count) {
|
|
558
|
+
positions.push([...acc]);
|
|
559
|
+
return;
|
|
560
|
+
}
|
|
561
|
+
for (let i = start; i < k; i++) {
|
|
562
|
+
acc.push(i);
|
|
563
|
+
pick(i + 1, acc);
|
|
564
|
+
acc.pop();
|
|
565
|
+
}
|
|
566
|
+
})(0, []);
|
|
567
|
+
for (const combo of positions) {
|
|
568
|
+
// combo 위치들의 type 성분을 서로 다른 값으로 변화, 나머지는 원본 유지
|
|
569
|
+
;
|
|
570
|
+
(function vary(idx, cur) {
|
|
571
|
+
if (results.size >= limit)
|
|
572
|
+
return;
|
|
573
|
+
if (idx === combo.length) {
|
|
574
|
+
const w = cur.map(s => composeSyllable(s.cho, s.jung, s.jong)).join('');
|
|
575
|
+
if (w !== word && wordSet.has(w))
|
|
576
|
+
results.add(w);
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
const p = combo[idx];
|
|
580
|
+
const orig = syls[p][type];
|
|
581
|
+
for (let v = 0; v < dim; v++) {
|
|
582
|
+
if (v === orig)
|
|
583
|
+
continue;
|
|
584
|
+
const next = cur.slice();
|
|
585
|
+
next[p] = { ...cur[p], [type]: v };
|
|
586
|
+
vary(idx + 1, next);
|
|
587
|
+
if (results.size >= limit)
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
})(0, syls);
|
|
591
|
+
if (results.size >= limit)
|
|
592
|
+
break;
|
|
593
|
+
}
|
|
594
|
+
return [...results];
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* @public
|
|
598
|
+
* 위치 구분 없이 두 단어의 서로 다른 음소(초성/중성/종성 슬롯) 총 개수를 센다.
|
|
599
|
+
* 음절 수가 다르거나 한글이 아닌 문자가 있으면 -1.
|
|
600
|
+
* 예: countPhonemeDiff('독립','독일') → 2 (둘째 음절 초성 ㄹ↔ㅇ, 종성 ㅂ↔ㄹ)
|
|
601
|
+
*/
|
|
602
|
+
export function countPhonemeDiff(a, b) {
|
|
603
|
+
if (!a || !b || a.length !== b.length)
|
|
604
|
+
return -1;
|
|
605
|
+
let diff = 0;
|
|
606
|
+
for (let i = 0; i < a.length; i++) {
|
|
607
|
+
const sa = parseSyllable(a[i]);
|
|
608
|
+
const sb = parseSyllable(b[i]);
|
|
609
|
+
if (!sa || !sb)
|
|
610
|
+
return -1;
|
|
611
|
+
if (sa.cho !== sb.cho)
|
|
612
|
+
diff++;
|
|
613
|
+
if (sa.jung !== sb.jung)
|
|
614
|
+
diff++;
|
|
615
|
+
if (sa.jong !== sb.jong)
|
|
616
|
+
diff++;
|
|
617
|
+
}
|
|
618
|
+
return diff;
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* 단어 목록을 검색어로 거르고, 앞에서부터 맞는 것을 위로 올린다.
|
|
622
|
+
*
|
|
623
|
+
* 회원 앱의 '단어 관리'와 어드민의 '데이터 → 단어'가 이 규칙을 각자 한 벌씩 적고
|
|
624
|
+
* 있었다. 주석까지 서로를 가리키고 있었는데("회원 앱 '단어 관리'와 같은 매칭 규칙",
|
|
625
|
+
* "단어표 '글자 입력'과 동일 규약") — 알면서 베낀 것이다. 한쪽만 고치면 두 화면이
|
|
626
|
+
* 같은 검색어에 다른 결과를 내놓는다.
|
|
627
|
+
*
|
|
628
|
+
* 규칙은 셋이다.
|
|
629
|
+
* · **의미 없는 입력은 조건으로 보지 않는다.** 공백·쉼표·밑줄만 남은 것은 아직 다
|
|
630
|
+
* 치지 않은 패턴이라, 그걸로 거르면 목록이 통째로 빈다.
|
|
631
|
+
* · **패턴 DSL 이면 자리 맞춤으로 본다**('ㄱ_ㄱ' 처럼). 아니면 초성·완성음절+초성·
|
|
632
|
+
* 부분문자열을 모두 받는 공용 매칭으로 본다.
|
|
633
|
+
* · **앞에서부터 맞는 것을 위로.** '나'로 찾을 때 '가시나무'가 먼저 나오면 '나무'가
|
|
634
|
+
* 묻힌다. 앞 글자 수만큼 잘라 맞춰 보면 '첫 음절부터 일치'만 남는다(초성도 같다).
|
|
635
|
+
* 같은 순위 안에서는 원래 순서를 지킨다 — Array.sort 가 안정 정렬이다.
|
|
636
|
+
*
|
|
637
|
+
* @param items 거를 목록 — 단어와 발음을 가진 것이면 무엇이든
|
|
638
|
+
* @param query 사용자가 친 검색어(다듬지 않은 것을 그대로 넘겨도 된다)
|
|
639
|
+
* @public
|
|
640
|
+
*/
|
|
641
|
+
export function searchAndRankWords(items, query) {
|
|
642
|
+
const q = query.trim();
|
|
643
|
+
if (!q || !/[^\s,_]/.test(q))
|
|
644
|
+
return items;
|
|
645
|
+
if (isSyllablePattern(q))
|
|
646
|
+
return items.filter(w => matchesSyllablePattern(w.word, q));
|
|
647
|
+
const hit = items.filter(w => matchesWordQuery(w.word, q) || matchesWordQuery(w.pronunciation ?? '', q));
|
|
648
|
+
const headLen = [...q].length;
|
|
649
|
+
const startsWith = (s) => !!s && matchesWordQuery(s.slice(0, headLen), q);
|
|
650
|
+
return hit
|
|
651
|
+
.map(w => ({ w, rank: (startsWith(w.word) || startsWith(w.pronunciation ?? '')) ? 0 : 1 }))
|
|
652
|
+
.sort((a, b) => a.rank - b.rank)
|
|
653
|
+
.map(s => s.w);
|
|
654
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ComponentType } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* 정적으로 번들되는 아이콘 목록.
|
|
4
|
+
*
|
|
5
|
+
* 이 목록은 speechear·kscan 소스의 icon 리터럴(`icon="..."`, `icon: '...'`)을
|
|
6
|
+
* 훑어 만들었습니다. **여기 없는 이름은 지연 로드됩니다** — 화면에는 결국
|
|
7
|
+
* 나오지만 첫 렌더에는 잠깐 비어 보입니다. 새 아이콘을 쓰기 시작했는데
|
|
8
|
+
* 유독 그것만 늦게 뜬다면 이 목록에 추가하세요.
|
|
9
|
+
*
|
|
10
|
+
* 왜 이렇게 하는가: 예전에는 `import * as lucide from 'lucide-react'` 로
|
|
11
|
+
* 통째로 가져와 이름으로 조회했습니다. 그러면 어떤 이름이든 들어올 수 있으니
|
|
12
|
+
* 번들러가 아이콘을 하나도 떨궈내지 못합니다 — 소비 앱 청크 하나에 아이콘
|
|
13
|
+
* 모듈 1767개, JS 전송량 6.8MB 가 실렸습니다. 이름을 하나씩 적어 두면
|
|
14
|
+
* tree-shaking 이 동작합니다.
|
|
15
|
+
*/
|
|
16
|
+
export declare const STATIC_LUCIDE_ICONS: Record<string, ComponentType<Record<string, unknown>>>;
|