@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.
Files changed (848) hide show
  1. package/README.md +591 -0
  2. package/dist/components.cjs.css +19 -0
  3. package/dist/components.cjs.js +975 -0
  4. package/dist/components.esm.css +19 -0
  5. package/dist/components.esm.js +975 -0
  6. package/dist/hooks.cjs.css +1 -0
  7. package/dist/hooks.cjs.js +799 -0
  8. package/dist/hooks.esm.css +1 -0
  9. package/dist/hooks.esm.js +799 -0
  10. package/dist/ihabdevteam-core-tokens.css +1 -0
  11. package/dist/ihabdevteam-core.cjs.js +993 -0
  12. package/dist/ihabdevteam-core.css +1 -0
  13. package/dist/ihabdevteam-core.d.ts +8272 -0
  14. package/dist/ihabdevteam-core.esm.js +993 -0
  15. package/dist/logo/Logo_APEB.svg +53 -0
  16. package/dist/logo/Logo_APEB_black.svg +42 -0
  17. package/dist/logo/Logo_APEB_white.svg +42 -0
  18. package/dist/logo/Logo_HTP_kr.svg +21 -0
  19. package/dist/logo/Logo_HTP_kr_black.svg +17 -0
  20. package/dist/logo/Logo_HTP_kr_white.svg +17 -0
  21. package/dist/logo/Logo_IHAB_en.svg +18 -0
  22. package/dist/logo/Logo_IHAB_en_black.svg +14 -0
  23. package/dist/logo/Logo_IHAB_en_white.svg +14 -0
  24. package/dist/logo/Logo_IHAB_kr.svg +18 -0
  25. package/dist/logo/Logo_IHAB_kr_black.svg +14 -0
  26. package/dist/logo/Logo_IHAB_kr_white.svg +14 -0
  27. package/dist/logo/Logo_SDS_kr.svg +22 -0
  28. package/dist/logo/Logo_SDS_kr_black.svg +18 -0
  29. package/dist/logo/Logo_SDS_kr_white.svg +18 -0
  30. package/dist/logo/Logo_speechearManager_kr.svg +20 -0
  31. package/dist/logo/Logo_speechearManager_kr_black.svg +21 -0
  32. package/dist/logo/Logo_speechearManager_kr_textWhite.svg +45 -0
  33. package/dist/logo/Logo_speechearManager_kr_white.svg +21 -0
  34. package/dist/logo/Logo_speechear_kr.svg +17 -0
  35. package/dist/logo/Logo_speechear_kr_black.svg +16 -0
  36. package/dist/logo/Logo_speechear_kr_textWhite.svg +42 -0
  37. package/dist/logo/Logo_speechear_kr_white.svg +16 -0
  38. package/dist/logo/Symbol_APEB.svg +34 -0
  39. package/dist/logo/Symbol_APEB_black.svg +15 -0
  40. package/dist/logo/Symbol_APEB_white.svg +15 -0
  41. package/dist/logo/Symbol_HTP.svg +14 -0
  42. package/dist/logo/Symbol_HTP_black.svg +10 -0
  43. package/dist/logo/Symbol_HTP_white.svg +10 -0
  44. package/dist/logo/Symbol_IHAB.svg +14 -0
  45. package/dist/logo/Symbol_IHAB_black.svg +10 -0
  46. package/dist/logo/Symbol_IHAB_white.svg +10 -0
  47. package/dist/logo/Symbol_SDS.svg +14 -0
  48. package/dist/logo/Symbol_SDS_black.svg +10 -0
  49. package/dist/logo/Symbol_SDS_white.svg +10 -0
  50. package/dist/logo/Symbol_speechear.svg +15 -0
  51. package/dist/logo/Symbol_speechear_black.svg +16 -0
  52. package/dist/logo/Symbol_speechear_white.svg +16 -0
  53. package/dist/logo/qr_speechear.svg +1 -0
  54. package/dist/packages/core/src/CoreScope.d.ts +40 -0
  55. package/dist/packages/core/src/CoreScope.js +19 -0
  56. package/dist/packages/core/src/components/Accordion.css +125 -0
  57. package/dist/packages/core/src/components/Accordion.d.ts +19 -0
  58. package/dist/packages/core/src/components/Accordion.js +33 -0
  59. package/dist/packages/core/src/components/ActionCard.css +109 -0
  60. package/dist/packages/core/src/components/ActionCard.d.ts +33 -0
  61. package/dist/packages/core/src/components/ActionCard.js +28 -0
  62. package/dist/packages/core/src/components/Alert.css +76 -0
  63. package/dist/packages/core/src/components/Alert.d.ts +18 -0
  64. package/dist/packages/core/src/components/Alert.js +28 -0
  65. package/dist/packages/core/src/components/AudioMeter.css +80 -0
  66. package/dist/packages/core/src/components/AudioMeter.d.ts +49 -0
  67. package/dist/packages/core/src/components/AudioMeter.js +91 -0
  68. package/dist/packages/core/src/components/Avatar.css +42 -0
  69. package/dist/packages/core/src/components/Avatar.d.ts +21 -0
  70. package/dist/packages/core/src/components/Avatar.js +31 -0
  71. package/dist/packages/core/src/components/Badge.css +166 -0
  72. package/dist/packages/core/src/components/Badge.d.ts +82 -0
  73. package/dist/packages/core/src/components/Badge.js +62 -0
  74. package/dist/packages/core/src/components/BarChart.css +142 -0
  75. package/dist/packages/core/src/components/BarChart.d.ts +16 -0
  76. package/dist/packages/core/src/components/BarChart.js +187 -0
  77. package/dist/packages/core/src/components/Board.css +85 -0
  78. package/dist/packages/core/src/components/Board.d.ts +39 -0
  79. package/dist/packages/core/src/components/Board.js +12 -0
  80. package/dist/packages/core/src/components/BottomNav.css +105 -0
  81. package/dist/packages/core/src/components/BottomNav.d.ts +32 -0
  82. package/dist/packages/core/src/components/BottomNav.js +92 -0
  83. package/dist/packages/core/src/components/Breadcrumb.css +62 -0
  84. package/dist/packages/core/src/components/Breadcrumb.d.ts +13 -0
  85. package/dist/packages/core/src/components/Breadcrumb.js +10 -0
  86. package/dist/packages/core/src/components/BulkBar.css +75 -0
  87. package/dist/packages/core/src/components/BulkBar.d.ts +22 -0
  88. package/dist/packages/core/src/components/BulkBar.js +40 -0
  89. package/dist/packages/core/src/components/Button.css +655 -0
  90. package/dist/packages/core/src/components/Button.d.ts +5 -0
  91. package/dist/packages/core/src/components/Button.js +202 -0
  92. package/dist/packages/core/src/components/Calendar.css +249 -0
  93. package/dist/packages/core/src/components/Calendar.d.ts +23 -0
  94. package/dist/packages/core/src/components/Calendar.js +92 -0
  95. package/dist/packages/core/src/components/ChartSection.css +191 -0
  96. package/dist/packages/core/src/components/ChartSection.d.ts +42 -0
  97. package/dist/packages/core/src/components/ChartSection.js +22 -0
  98. package/dist/packages/core/src/components/Checkbox.css +94 -0
  99. package/dist/packages/core/src/components/Checkbox.d.ts +16 -0
  100. package/dist/packages/core/src/components/Checkbox.js +15 -0
  101. package/dist/packages/core/src/components/ChoiceChips.css +65 -0
  102. package/dist/packages/core/src/components/ChoiceChips.d.ts +15 -0
  103. package/dist/packages/core/src/components/ChoiceChips.js +8 -0
  104. package/dist/packages/core/src/components/CircleBadge.d.ts +31 -0
  105. package/dist/packages/core/src/components/CircleBadge.js +20 -0
  106. package/dist/packages/core/src/components/CodeBox.css +62 -0
  107. package/dist/packages/core/src/components/CodeBox.d.ts +18 -0
  108. package/dist/packages/core/src/components/CodeBox.js +132 -0
  109. package/dist/packages/core/src/components/ColorPicker.css +40 -0
  110. package/dist/packages/core/src/components/ColorPicker.d.ts +17 -0
  111. package/dist/packages/core/src/components/ColorPicker.js +23 -0
  112. package/dist/packages/core/src/components/CompanyMeta.css +33 -0
  113. package/dist/packages/core/src/components/CompanyMeta.d.ts +14 -0
  114. package/dist/packages/core/src/components/CompanyMeta.js +12 -0
  115. package/dist/packages/core/src/components/CountTile.css +47 -0
  116. package/dist/packages/core/src/components/CountTile.d.ts +22 -0
  117. package/dist/packages/core/src/components/CountTile.js +24 -0
  118. package/dist/packages/core/src/components/DatePicker.css +151 -0
  119. package/dist/packages/core/src/components/DatePicker.d.ts +13 -0
  120. package/dist/packages/core/src/components/DatePicker.js +107 -0
  121. package/dist/packages/core/src/components/Dialog.css +98 -0
  122. package/dist/packages/core/src/components/Dialog.d.ts +31 -0
  123. package/dist/packages/core/src/components/Dialog.js +51 -0
  124. package/dist/packages/core/src/components/Divider.css +33 -0
  125. package/dist/packages/core/src/components/Divider.d.ts +13 -0
  126. package/dist/packages/core/src/components/Divider.js +14 -0
  127. package/dist/packages/core/src/components/Dropdown.css +175 -0
  128. package/dist/packages/core/src/components/Dropdown.d.ts +23 -0
  129. package/dist/packages/core/src/components/Dropdown.js +117 -0
  130. package/dist/packages/core/src/components/Effect/EffectPartyPopper.css +25 -0
  131. package/dist/packages/core/src/components/Effect/EffectPartyPopper.d.ts +11 -0
  132. package/dist/packages/core/src/components/Effect/EffectPartyPopper.js +298 -0
  133. package/dist/packages/core/src/components/Effect/EffectPartyPopperHost.d.ts +5 -0
  134. package/dist/packages/core/src/components/Effect/EffectPartyPopperHost.js +13 -0
  135. package/dist/packages/core/src/components/EmptyState.css +23 -0
  136. package/dist/packages/core/src/components/EmptyState.d.ts +19 -0
  137. package/dist/packages/core/src/components/EmptyState.js +7 -0
  138. package/dist/packages/core/src/components/ErrorState.css +2 -0
  139. package/dist/packages/core/src/components/ErrorState.d.ts +18 -0
  140. package/dist/packages/core/src/components/ErrorState.js +11 -0
  141. package/dist/packages/core/src/components/FileUpload.css +114 -0
  142. package/dist/packages/core/src/components/FileUpload.d.ts +25 -0
  143. package/dist/packages/core/src/components/FileUpload.js +111 -0
  144. package/dist/packages/core/src/components/FilterPanel.css +188 -0
  145. package/dist/packages/core/src/components/FilterPanel.d.ts +34 -0
  146. package/dist/packages/core/src/components/FilterPanel.js +82 -0
  147. package/dist/packages/core/src/components/FilterSectionInfo.d.ts +12 -0
  148. package/dist/packages/core/src/components/FilterSectionInfo.js +15 -0
  149. package/dist/packages/core/src/components/Footer.css +186 -0
  150. package/dist/packages/core/src/components/Footer.d.ts +18 -0
  151. package/dist/packages/core/src/components/Footer.js +19 -0
  152. package/dist/packages/core/src/components/Header.css +274 -0
  153. package/dist/packages/core/src/components/Header.d.ts +44 -0
  154. package/dist/packages/core/src/components/Header.js +98 -0
  155. package/dist/packages/core/src/components/HearingDeviceInfo.css +48 -0
  156. package/dist/packages/core/src/components/HearingDeviceInfo.d.ts +22 -0
  157. package/dist/packages/core/src/components/HearingDeviceInfo.js +13 -0
  158. package/dist/packages/core/src/components/Icon.d.ts +14 -0
  159. package/dist/packages/core/src/components/Icon.js +73 -0
  160. package/dist/packages/core/src/components/IconGridMenu.css +141 -0
  161. package/dist/packages/core/src/components/IconGridMenu.d.ts +20 -0
  162. package/dist/packages/core/src/components/IconGridMenu.js +45 -0
  163. package/dist/packages/core/src/components/LandingBottomSticky.css +114 -0
  164. package/dist/packages/core/src/components/LandingBottomSticky.d.ts +26 -0
  165. package/dist/packages/core/src/components/LandingBottomSticky.js +20 -0
  166. package/dist/packages/core/src/components/LandingHeader.css +192 -0
  167. package/dist/packages/core/src/components/LandingHeader.d.ts +67 -0
  168. package/dist/packages/core/src/components/LandingHeader.js +40 -0
  169. package/dist/packages/core/src/components/Loader.css +88 -0
  170. package/dist/packages/core/src/components/Loader.d.ts +14 -0
  171. package/dist/packages/core/src/components/Loader.js +12 -0
  172. package/dist/packages/core/src/components/NoticeBox.css +79 -0
  173. package/dist/packages/core/src/components/NoticeBox.d.ts +21 -0
  174. package/dist/packages/core/src/components/NoticeBox.js +19 -0
  175. package/dist/packages/core/src/components/PageTitle.css +27 -0
  176. package/dist/packages/core/src/components/PageTitle.d.ts +23 -0
  177. package/dist/packages/core/src/components/PageTitle.js +10 -0
  178. package/dist/packages/core/src/components/Pagination.css +11 -0
  179. package/dist/packages/core/src/components/Pagination.d.ts +22 -0
  180. package/dist/packages/core/src/components/Pagination.js +20 -0
  181. package/dist/packages/core/src/components/Panel.css +361 -0
  182. package/dist/packages/core/src/components/Panel.d.ts +166 -0
  183. package/dist/packages/core/src/components/Panel.js +162 -0
  184. package/dist/packages/core/src/components/PassCard/PassCard.css +289 -0
  185. package/dist/packages/core/src/components/PassCard/PassCard.d.ts +56 -0
  186. package/dist/packages/core/src/components/PassCard/PassCard.js +313 -0
  187. package/dist/packages/core/src/components/PassCard/PassCardBg.css +39 -0
  188. package/dist/packages/core/src/components/PassCard/PassCardBg.d.ts +8 -0
  189. package/dist/packages/core/src/components/PassCard/PassCardBg.js +6 -0
  190. package/dist/packages/core/src/components/PassCard/PassCardBgIHAB.css +25 -0
  191. package/dist/packages/core/src/components/PassCard/PassCardBgIHAB.d.ts +7 -0
  192. package/dist/packages/core/src/components/PassCard/PassCardBgIHAB.js +18 -0
  193. package/dist/packages/core/src/components/PassCard/PassCardBgLeftColorGrid.css +45 -0
  194. package/dist/packages/core/src/components/PassCard/PassCardBgLeftColorGrid.d.ts +9 -0
  195. package/dist/packages/core/src/components/PassCard/PassCardBgLeftColorGrid.js +19 -0
  196. package/dist/packages/core/src/components/PassCard/PassCardBgSoundLine.css +19 -0
  197. package/dist/packages/core/src/components/PassCard/PassCardBgSoundLine.d.ts +9 -0
  198. package/dist/packages/core/src/components/PassCard/PassCardBgSoundLine.js +23 -0
  199. package/dist/packages/core/src/components/PassCard/PassCardBgSoundLineV1.css +15 -0
  200. package/dist/packages/core/src/components/PassCard/PassCardBgSoundLineV1.d.ts +9 -0
  201. package/dist/packages/core/src/components/PassCard/PassCardBgSoundLineV1.js +24 -0
  202. package/dist/packages/core/src/components/PassCard/PassCardBgSoundMove.css +16 -0
  203. package/dist/packages/core/src/components/PassCard/PassCardBgSoundMove.d.ts +9 -0
  204. package/dist/packages/core/src/components/PassCard/PassCardBgSoundMove.js +31 -0
  205. package/dist/packages/core/src/components/PassCard/PassCardBgSoundMoveV1.css +16 -0
  206. package/dist/packages/core/src/components/PassCard/PassCardBgSoundMoveV1.d.ts +9 -0
  207. package/dist/packages/core/src/components/PassCard/PassCardBgSoundMoveV1.js +32 -0
  208. package/dist/packages/core/src/components/PassCard/PassCardBgTalk.css +33 -0
  209. package/dist/packages/core/src/components/PassCard/PassCardBgTalk.d.ts +9 -0
  210. package/dist/packages/core/src/components/PassCard/PassCardBgTalk.js +18 -0
  211. package/dist/packages/core/src/components/PassCard/PassCardBgTalkV1.css +36 -0
  212. package/dist/packages/core/src/components/PassCard/PassCardBgTalkV1.d.ts +13 -0
  213. package/dist/packages/core/src/components/PassCard/PassCardBgTalkV1.js +22 -0
  214. package/dist/packages/core/src/components/PassCard/PassCardBgTheme.d.ts +38 -0
  215. package/dist/packages/core/src/components/PassCard/PassCardBgTheme.js +34 -0
  216. package/dist/packages/core/src/components/PassCard/PassCardBgTwoCircle.css +36 -0
  217. package/dist/packages/core/src/components/PassCard/PassCardBgTwoCircle.d.ts +9 -0
  218. package/dist/packages/core/src/components/PassCard/PassCardBgTwoCircle.js +18 -0
  219. package/dist/packages/core/src/components/PassCard/PassCard_Back.css +76 -0
  220. package/dist/packages/core/src/components/PassCard/PassCard_Back.d.ts +13 -0
  221. package/dist/packages/core/src/components/PassCard/PassCard_Back.js +20 -0
  222. package/dist/packages/core/src/components/PassCard/ihabOutlinePath.d.ts +12 -0
  223. package/dist/packages/core/src/components/PassCard/ihabOutlinePath.js +19 -0
  224. package/dist/packages/core/src/components/PassCard/passCardProduct.d.ts +48 -0
  225. package/dist/packages/core/src/components/PassCard/passCardProduct.js +56 -0
  226. package/dist/packages/core/src/components/PaymentPlan.css +318 -0
  227. package/dist/packages/core/src/components/PaymentPlan.d.ts +57 -0
  228. package/dist/packages/core/src/components/PaymentPlan.js +126 -0
  229. package/dist/packages/core/src/components/PersonCard.css +72 -0
  230. package/dist/packages/core/src/components/PersonCard.d.ts +27 -0
  231. package/dist/packages/core/src/components/PersonCard.js +11 -0
  232. package/dist/packages/core/src/components/Popup/ConfirmPopup.d.ts +58 -0
  233. package/dist/packages/core/src/components/Popup/ConfirmPopup.js +59 -0
  234. package/dist/packages/core/src/components/Popup/CouponInputPopup.css +28 -0
  235. package/dist/packages/core/src/components/Popup/CouponInputPopup.d.ts +8 -0
  236. package/dist/packages/core/src/components/Popup/CouponInputPopup.js +45 -0
  237. package/dist/packages/core/src/components/Popup/DeviceListPopup.css +78 -0
  238. package/dist/packages/core/src/components/Popup/DeviceListPopup.d.ts +28 -0
  239. package/dist/packages/core/src/components/Popup/DeviceListPopup.js +31 -0
  240. package/dist/packages/core/src/components/Popup/DeviceSideTable.d.ts +41 -0
  241. package/dist/packages/core/src/components/Popup/DeviceSideTable.js +92 -0
  242. package/dist/packages/core/src/components/Popup/ListPopup.css +44 -0
  243. package/dist/packages/core/src/components/Popup/ListPopup.d.ts +75 -0
  244. package/dist/packages/core/src/components/Popup/ListPopup.js +85 -0
  245. package/dist/packages/core/src/components/Popup/LoadTablePopup.css +248 -0
  246. package/dist/packages/core/src/components/Popup/LoadTablePopup.d.ts +12 -0
  247. package/dist/packages/core/src/components/Popup/LoadTablePopup.js +86 -0
  248. package/dist/packages/core/src/components/Popup/Popup.css +136 -0
  249. package/dist/packages/core/src/components/Popup/Popup.d.ts +77 -0
  250. package/dist/packages/core/src/components/Popup/Popup.js +135 -0
  251. package/dist/packages/core/src/components/Popup/SaveTablePopup.css +32 -0
  252. package/dist/packages/core/src/components/Popup/SaveTablePopup.d.ts +25 -0
  253. package/dist/packages/core/src/components/Popup/SaveTablePopup.js +55 -0
  254. package/dist/packages/core/src/components/Popup/TrainingResultPopup.css +277 -0
  255. package/dist/packages/core/src/components/Popup/TrainingResultPopup.d.ts +14 -0
  256. package/dist/packages/core/src/components/Popup/TrainingResultPopup.js +104 -0
  257. package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.css +119 -0
  258. package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.d.ts +12 -0
  259. package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.js +73 -0
  260. package/dist/packages/core/src/components/Popup/customerDetailUtils.d.ts +19 -0
  261. package/dist/packages/core/src/components/Popup/customerDetailUtils.js +45 -0
  262. package/dist/packages/core/src/components/ProgressBar.css +114 -0
  263. package/dist/packages/core/src/components/ProgressBar.d.ts +65 -0
  264. package/dist/packages/core/src/components/ProgressBar.js +51 -0
  265. package/dist/packages/core/src/components/ProgressIndicator.css +41 -0
  266. package/dist/packages/core/src/components/ProgressIndicator.d.ts +18 -0
  267. package/dist/packages/core/src/components/ProgressIndicator.js +45 -0
  268. package/dist/packages/core/src/components/PromoBanner.css +54 -0
  269. package/dist/packages/core/src/components/PromoBanner.d.ts +30 -0
  270. package/dist/packages/core/src/components/PromoBanner.js +54 -0
  271. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBg.css +8 -0
  272. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDark.css +3 -0
  273. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDark.d.ts +11 -0
  274. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDark.js +20 -0
  275. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDeep.css +3 -0
  276. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDeep.d.ts +10 -0
  277. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDeep.js +19 -0
  278. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDiagonal.css +10 -0
  279. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDiagonal.d.ts +10 -0
  280. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDiagonal.js +19 -0
  281. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDots.css +5 -0
  282. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDots.d.ts +10 -0
  283. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgDots.js +19 -0
  284. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgInstagram.css +3 -0
  285. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgInstagram.d.ts +11 -0
  286. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgInstagram.js +20 -0
  287. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgMain.css +3 -0
  288. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgMain.d.ts +12 -0
  289. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgMain.js +21 -0
  290. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgNaver.css +3 -0
  291. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgNaver.d.ts +11 -0
  292. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgNaver.js +20 -0
  293. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgOutline.css +16 -0
  294. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgOutline.d.ts +11 -0
  295. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgOutline.js +20 -0
  296. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgRadial.css +3 -0
  297. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgRadial.d.ts +10 -0
  298. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgRadial.js +19 -0
  299. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoft.css +3 -0
  300. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoft.d.ts +12 -0
  301. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoft.js +21 -0
  302. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoftSub.css +3 -0
  303. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoftSub.d.ts +10 -0
  304. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSoftSub.js +19 -0
  305. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSub.css +3 -0
  306. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSub.d.ts +10 -0
  307. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSub.js +19 -0
  308. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSuccess.css +3 -0
  309. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSuccess.d.ts +11 -0
  310. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgSuccess.js +20 -0
  311. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgTheme.d.ts +32 -0
  312. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgTheme.js +29 -0
  313. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgWarm.css +3 -0
  314. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgWarm.d.ts +11 -0
  315. package/dist/packages/core/src/components/PromoBannerBg/PromoBannerBgWarm.js +20 -0
  316. package/dist/packages/core/src/components/PromoBannerBg/promoBannerBg.d.ts +21 -0
  317. package/dist/packages/core/src/components/PromoBannerBg/promoBannerBg.js +49 -0
  318. package/dist/packages/core/src/components/PublicationCard.css +70 -0
  319. package/dist/packages/core/src/components/PublicationCard.d.ts +31 -0
  320. package/dist/packages/core/src/components/PublicationCard.js +11 -0
  321. package/dist/packages/core/src/components/Radio.css +64 -0
  322. package/dist/packages/core/src/components/Radio.d.ts +13 -0
  323. package/dist/packages/core/src/components/Radio.js +9 -0
  324. package/dist/packages/core/src/components/RadioGroup.css +14 -0
  325. package/dist/packages/core/src/components/RadioGroup.d.ts +21 -0
  326. package/dist/packages/core/src/components/RadioGroup.js +14 -0
  327. package/dist/packages/core/src/components/Rating.css +69 -0
  328. package/dist/packages/core/src/components/Rating.d.ts +21 -0
  329. package/dist/packages/core/src/components/Rating.js +51 -0
  330. package/dist/packages/core/src/components/RingChart.css +50 -0
  331. package/dist/packages/core/src/components/RingChart.d.ts +68 -0
  332. package/dist/packages/core/src/components/RingChart.js +57 -0
  333. package/dist/packages/core/src/components/SearchSummary.css +62 -0
  334. package/dist/packages/core/src/components/SearchSummary.d.ts +32 -0
  335. package/dist/packages/core/src/components/SearchSummary.js +48 -0
  336. package/dist/packages/core/src/components/Section.css +73 -0
  337. package/dist/packages/core/src/components/Section.d.ts +16 -0
  338. package/dist/packages/core/src/components/Section.js +15 -0
  339. package/dist/packages/core/src/components/SectionHeader.css +87 -0
  340. package/dist/packages/core/src/components/SectionHeader.d.ts +31 -0
  341. package/dist/packages/core/src/components/SectionHeader.js +16 -0
  342. package/dist/packages/core/src/components/SegmentedControl.css +67 -0
  343. package/dist/packages/core/src/components/SegmentedControl.d.ts +26 -0
  344. package/dist/packages/core/src/components/SegmentedControl.js +13 -0
  345. package/dist/packages/core/src/components/ShortcutBadge.css +68 -0
  346. package/dist/packages/core/src/components/ShortcutBadge.d.ts +31 -0
  347. package/dist/packages/core/src/components/ShortcutBadge.js +23 -0
  348. package/dist/packages/core/src/components/SideNav.css +281 -0
  349. package/dist/packages/core/src/components/SideNav.d.ts +32 -0
  350. package/dist/packages/core/src/components/SideNav.js +92 -0
  351. package/dist/packages/core/src/components/Slider.css +184 -0
  352. package/dist/packages/core/src/components/Slider.d.ts +67 -0
  353. package/dist/packages/core/src/components/Slider.js +97 -0
  354. package/dist/packages/core/src/components/SoundCompass.css +138 -0
  355. package/dist/packages/core/src/components/SoundCompass.d.ts +42 -0
  356. package/dist/packages/core/src/components/SoundCompass.js +136 -0
  357. package/dist/packages/core/src/components/SplashLogo.css +32 -0
  358. package/dist/packages/core/src/components/SplashLogo.d.ts +35 -0
  359. package/dist/packages/core/src/components/SplashLogo.js +32 -0
  360. package/dist/packages/core/src/components/StatChart.css +83 -0
  361. package/dist/packages/core/src/components/StatChart.d.ts +26 -0
  362. package/dist/packages/core/src/components/StatChart.js +41 -0
  363. package/dist/packages/core/src/components/Table.css +158 -0
  364. package/dist/packages/core/src/components/Table.d.ts +94 -0
  365. package/dist/packages/core/src/components/Table.js +200 -0
  366. package/dist/packages/core/src/components/TableCell.css +12 -0
  367. package/dist/packages/core/src/components/TableField.css +60 -0
  368. package/dist/packages/core/src/components/Tabs.css +55 -0
  369. package/dist/packages/core/src/components/Tabs.d.ts +30 -0
  370. package/dist/packages/core/src/components/Tabs.js +55 -0
  371. package/dist/packages/core/src/components/TextField.css +266 -0
  372. package/dist/packages/core/src/components/TextField.d.ts +86 -0
  373. package/dist/packages/core/src/components/TextField.js +149 -0
  374. package/dist/packages/core/src/components/Timeline.css +62 -0
  375. package/dist/packages/core/src/components/Timeline.d.ts +26 -0
  376. package/dist/packages/core/src/components/Timeline.js +11 -0
  377. package/dist/packages/core/src/components/Toast.css +76 -0
  378. package/dist/packages/core/src/components/Toast.d.ts +10 -0
  379. package/dist/packages/core/src/components/Toast.js +19 -0
  380. package/dist/packages/core/src/components/Toggle.css +61 -0
  381. package/dist/packages/core/src/components/Toggle.d.ts +18 -0
  382. package/dist/packages/core/src/components/Toggle.js +7 -0
  383. package/dist/packages/core/src/components/Toolbar.css +86 -0
  384. package/dist/packages/core/src/components/Toolbar.d.ts +52 -0
  385. package/dist/packages/core/src/components/Toolbar.js +20 -0
  386. package/dist/packages/core/src/components/Tooltip/DebugTooltip.css +27 -0
  387. package/dist/packages/core/src/components/Tooltip/DebugTooltip.d.ts +12 -0
  388. package/dist/packages/core/src/components/Tooltip/DebugTooltip.js +79 -0
  389. package/dist/packages/core/src/components/Tooltip/DescriptionTooltip.css +50 -0
  390. package/dist/packages/core/src/components/Tooltip/DescriptionTooltip.d.ts +16 -0
  391. package/dist/packages/core/src/components/Tooltip/DescriptionTooltip.js +11 -0
  392. package/dist/packages/core/src/components/Tooltip/InfoTooltip.css +39 -0
  393. package/dist/packages/core/src/components/Tooltip/InfoTooltip.d.ts +13 -0
  394. package/dist/packages/core/src/components/Tooltip/InfoTooltip.js +10 -0
  395. package/dist/packages/core/src/components/Tooltip/MenuTooltip.css +93 -0
  396. package/dist/packages/core/src/components/Tooltip/MenuTooltip.d.ts +30 -0
  397. package/dist/packages/core/src/components/Tooltip/MenuTooltip.js +92 -0
  398. package/dist/packages/core/src/components/Tooltip/TextBoxTooltip.css +95 -0
  399. package/dist/packages/core/src/components/Tooltip/TextBoxTooltip.d.ts +13 -0
  400. package/dist/packages/core/src/components/Tooltip/TextBoxTooltip.js +55 -0
  401. package/dist/packages/core/src/components/Tooltip/Tooltip.css +120 -0
  402. package/dist/packages/core/src/components/Tooltip/Tooltip.d.ts +25 -0
  403. package/dist/packages/core/src/components/Tooltip/Tooltip.js +296 -0
  404. package/dist/packages/core/src/components/Tooltip/TrainingTooltip.css +67 -0
  405. package/dist/packages/core/src/components/Tooltip/TrainingTooltip.d.ts +16 -0
  406. package/dist/packages/core/src/components/Tooltip/TrainingTooltip.js +40 -0
  407. package/dist/packages/core/src/components/Tooltip/WordImageTooltip.css +61 -0
  408. package/dist/packages/core/src/components/Tooltip/WordImageTooltip.d.ts +12 -0
  409. package/dist/packages/core/src/components/Tooltip/WordImageTooltip.js +39 -0
  410. package/dist/packages/core/src/components/Tooltip/tooltipConstants.d.ts +44 -0
  411. package/dist/packages/core/src/components/Tooltip/tooltipConstants.js +38 -0
  412. package/dist/packages/core/src/components/TopBanner.css +100 -0
  413. package/dist/packages/core/src/components/TopBanner.d.ts +25 -0
  414. package/dist/packages/core/src/components/TopBanner.js +36 -0
  415. package/dist/packages/core/src/components/Training/AudioPlayerWaveForm.d.ts +17 -0
  416. package/dist/packages/core/src/components/Training/AudioPlayerWaveForm.js +237 -0
  417. package/dist/packages/core/src/components/Training/CategoryIcon.css +85 -0
  418. package/dist/packages/core/src/components/Training/CategoryIcon.d.ts +16 -0
  419. package/dist/packages/core/src/components/Training/CategoryIcon.js +79 -0
  420. package/dist/packages/core/src/components/Training/NoisePlayerContext.d.ts +43 -0
  421. package/dist/packages/core/src/components/Training/NoisePlayerContext.js +26 -0
  422. package/dist/packages/core/src/components/Training/NoiseSettingsTooltip.css +52 -0
  423. package/dist/packages/core/src/components/Training/NoiseSettingsTooltip.d.ts +13 -0
  424. package/dist/packages/core/src/components/Training/NoiseSettingsTooltip.js +81 -0
  425. package/dist/packages/core/src/components/Training/TrainingBlock.css +33 -0
  426. package/dist/packages/core/src/components/Training/TrainingBlock.d.ts +45 -0
  427. package/dist/packages/core/src/components/Training/TrainingBlock.js +44 -0
  428. package/dist/packages/core/src/components/Training/TrainingBlockButton.css +337 -0
  429. package/dist/packages/core/src/components/Training/TrainingBlockButton.d.ts +5 -0
  430. package/dist/packages/core/src/components/Training/TrainingBlockButton.js +193 -0
  431. package/dist/packages/core/src/components/Training/TrainingCard.css +178 -0
  432. package/dist/packages/core/src/components/Training/TrainingCard.d.ts +24 -0
  433. package/dist/packages/core/src/components/Training/TrainingCard.js +29 -0
  434. package/dist/packages/core/src/components/Training/TrainingCardGroup.css +73 -0
  435. package/dist/packages/core/src/components/Training/TrainingCardGroup.d.ts +41 -0
  436. package/dist/packages/core/src/components/Training/TrainingCardGroup.js +16 -0
  437. package/dist/packages/core/src/components/Training/TrainingPagePopup.css +210 -0
  438. package/dist/packages/core/src/components/Training/TrainingPagePopup.d.ts +91 -0
  439. package/dist/packages/core/src/components/Training/TrainingPagePopup.js +799 -0
  440. package/dist/packages/core/src/components/Training/TrainingPagePopupBottom.css +45 -0
  441. package/dist/packages/core/src/components/Training/TrainingPagePopupBottom.d.ts +14 -0
  442. package/dist/packages/core/src/components/Training/TrainingPagePopupBottom.js +60 -0
  443. package/dist/packages/core/src/components/Training/TrainingPagePopupContext.d.ts +13 -0
  444. package/dist/packages/core/src/components/Training/TrainingPagePopupContext.js +12 -0
  445. package/dist/packages/core/src/components/Training/TrainingPagePopupTitle.css +77 -0
  446. package/dist/packages/core/src/components/Training/TrainingPagePopupTitle.d.ts +21 -0
  447. package/dist/packages/core/src/components/Training/TrainingPagePopupTitle.js +41 -0
  448. package/dist/packages/core/src/components/Training/TrainingStep.css +236 -0
  449. package/dist/packages/core/src/components/Training/TrainingStep.d.ts +15 -0
  450. package/dist/packages/core/src/components/Training/TrainingStep.js +89 -0
  451. package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.css +320 -0
  452. package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.d.ts +5 -0
  453. package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.js +971 -0
  454. package/dist/packages/core/src/components/Training/TrainingStepBullet.css +148 -0
  455. package/dist/packages/core/src/components/Training/TrainingStepBullet.d.ts +6 -0
  456. package/dist/packages/core/src/components/Training/TrainingStepBullet.js +11 -0
  457. package/dist/packages/core/src/components/Training/TrainingStepCard.css +0 -0
  458. package/dist/packages/core/src/components/Training/TrainingStepCard.d.ts +36 -0
  459. package/dist/packages/core/src/components/Training/TrainingStepCard.js +110 -0
  460. package/dist/packages/core/src/components/Training/TrainingStepCardOrder.d.ts +15 -0
  461. package/dist/packages/core/src/components/Training/TrainingStepCardOrder.js +58 -0
  462. package/dist/packages/core/src/components/Training/TrainingStepComponents.d.ts +35 -0
  463. package/dist/packages/core/src/components/Training/TrainingStepComponents.js +60 -0
  464. package/dist/packages/core/src/components/Training/TrainingStepConfirm.d.ts +24 -0
  465. package/dist/packages/core/src/components/Training/TrainingStepConfirm.js +117 -0
  466. package/dist/packages/core/src/components/Training/TrainingStepConfirmWithText.d.ts +16 -0
  467. package/dist/packages/core/src/components/Training/TrainingStepConfirmWithText.js +60 -0
  468. package/dist/packages/core/src/components/Training/TrainingStepListen.d.ts +27 -0
  469. package/dist/packages/core/src/components/Training/TrainingStepListen.js +13 -0
  470. package/dist/packages/core/src/components/Training/TrainingStepOrderList.css +221 -0
  471. package/dist/packages/core/src/components/Training/TrainingStepOrderList.d.ts +7 -0
  472. package/dist/packages/core/src/components/Training/TrainingStepOrderList.js +445 -0
  473. package/dist/packages/core/src/components/Training/TrainingStepTextBox.css +111 -0
  474. package/dist/packages/core/src/components/Training/TrainingStepTextBox.d.ts +8 -0
  475. package/dist/packages/core/src/components/Training/TrainingStepTextBox.js +74 -0
  476. package/dist/packages/core/src/components/Training/TrainingStepTitle.css +89 -0
  477. package/dist/packages/core/src/components/Training/TrainingStepTitle.d.ts +21 -0
  478. package/dist/packages/core/src/components/Training/TrainingStepTitle.js +91 -0
  479. package/dist/packages/core/src/components/Training/TrainingWordCard.css +266 -0
  480. package/dist/packages/core/src/components/Training/TrainingWordCard.d.ts +43 -0
  481. package/dist/packages/core/src/components/Training/TrainingWordCard.js +229 -0
  482. package/dist/packages/core/src/components/Training/WordTablePopup.css +56 -0
  483. package/dist/packages/core/src/components/Training/WordTablePopup.d.ts +61 -0
  484. package/dist/packages/core/src/components/Training/WordTablePopup.js +105 -0
  485. package/dist/packages/core/src/components/Training/audioPlaybackRules.d.ts +95 -0
  486. package/dist/packages/core/src/components/Training/audioPlaybackRules.js +125 -0
  487. package/dist/packages/core/src/components/Training/audioWaits.d.ts +27 -0
  488. package/dist/packages/core/src/components/Training/audioWaits.js +64 -0
  489. package/dist/packages/core/src/components/Training/currentSound.d.ts +26 -0
  490. package/dist/packages/core/src/components/Training/currentSound.js +46 -0
  491. package/dist/packages/core/src/components/Training/pagePopupTiming.d.ts +17 -0
  492. package/dist/packages/core/src/components/Training/pagePopupTiming.js +17 -0
  493. package/dist/packages/core/src/components/Training/trainingBlockButtonTypes.d.ts +79 -0
  494. package/dist/packages/core/src/components/Training/trainingBlockButtonTypes.js +27 -0
  495. package/dist/packages/core/src/components/Training/trainingMissStats.d.ts +148 -0
  496. package/dist/packages/core/src/components/Training/trainingMissStats.js +163 -0
  497. package/dist/packages/core/src/components/Training/trainingPopupUtils.d.ts +108 -0
  498. package/dist/packages/core/src/components/Training/trainingPopupUtils.js +226 -0
  499. package/dist/packages/core/src/components/Training/trainingScenario.d.ts +42 -0
  500. package/dist/packages/core/src/components/Training/trainingScenario.js +25 -0
  501. package/dist/packages/core/src/components/Training/trainingStepAudioPlayerTypes.d.ts +37 -0
  502. package/dist/packages/core/src/components/Training/trainingStepAudioPlayerTypes.js +20 -0
  503. package/dist/packages/core/src/components/Training/trainingStepOrderListTypes.d.ts +34 -0
  504. package/dist/packages/core/src/components/Training/trainingStepOrderListTypes.js +5 -0
  505. package/dist/packages/core/src/components/Training/useAnchorRect.d.ts +26 -0
  506. package/dist/packages/core/src/components/Training/useAnchorRect.js +52 -0
  507. package/dist/packages/core/src/components/Training/useAudioPreview.d.ts +11 -0
  508. package/dist/packages/core/src/components/Training/useAudioPreview.js +178 -0
  509. package/dist/packages/core/src/components/Training/useNoiseFade.d.ts +24 -0
  510. package/dist/packages/core/src/components/Training/useNoiseFade.js +303 -0
  511. package/dist/packages/core/src/components/Training/useObjectUrls.d.ts +25 -0
  512. package/dist/packages/core/src/components/Training/useObjectUrls.js +56 -0
  513. package/dist/packages/core/src/components/Training/useProgressTicker.d.ts +33 -0
  514. package/dist/packages/core/src/components/Training/useProgressTicker.js +74 -0
  515. package/dist/packages/core/src/components/Training/useTTSPlayback.d.ts +30 -0
  516. package/dist/packages/core/src/components/Training/useTTSPlayback.js +172 -0
  517. package/dist/packages/core/src/components/Training/useWaveReady.d.ts +36 -0
  518. package/dist/packages/core/src/components/Training/useWaveReady.js +65 -0
  519. package/dist/packages/core/src/components/UpdateAlert.css +116 -0
  520. package/dist/packages/core/src/components/UpdateAlert.d.ts +23 -0
  521. package/dist/packages/core/src/components/UpdateAlert.js +25 -0
  522. package/dist/packages/core/src/components/Word/ContrastFilterPanel.d.ts +25 -0
  523. package/dist/packages/core/src/components/Word/ContrastFilterPanel.js +69 -0
  524. package/dist/packages/core/src/components/Word/PhonemeFilterPanel.d.ts +24 -0
  525. package/dist/packages/core/src/components/Word/PhonemeFilterPanel.js +15 -0
  526. package/dist/packages/core/src/components/Word/PhonemeSelectBlock.css +272 -0
  527. package/dist/packages/core/src/components/Word/PhonemeSelectBlock.d.ts +45 -0
  528. package/dist/packages/core/src/components/Word/PhonemeSelectBlock.js +71 -0
  529. package/dist/packages/core/src/components/Word/TableFilterPanel.d.ts +56 -0
  530. package/dist/packages/core/src/components/Word/TableFilterPanel.js +42 -0
  531. package/dist/packages/core/src/components/Word/WordSearchFilterPanel.d.ts +23 -0
  532. package/dist/packages/core/src/components/Word/WordSearchFilterPanel.js +14 -0
  533. package/dist/packages/core/src/components/Word/WordSearchResultBlock.css +130 -0
  534. package/dist/packages/core/src/components/Word/WordSearchResultBlock.d.ts +47 -0
  535. package/dist/packages/core/src/components/Word/WordSearchResultBlock.js +141 -0
  536. package/dist/packages/core/src/components/Word/WordTableBlock.css +85 -0
  537. package/dist/packages/core/src/components/Word/WordTableBlock.d.ts +5 -0
  538. package/dist/packages/core/src/components/Word/WordTableBlock.js +297 -0
  539. package/dist/packages/core/src/components/Word/WordTableButton.css +185 -0
  540. package/dist/packages/core/src/components/Word/WordTableButton.d.ts +48 -0
  541. package/dist/packages/core/src/components/Word/WordTableButton.js +28 -0
  542. package/dist/packages/core/src/components/Word/WordTableThumbnail.css +56 -0
  543. package/dist/packages/core/src/components/Word/WordTableThumbnail.d.ts +10 -0
  544. package/dist/packages/core/src/components/Word/WordTableThumbnail.js +21 -0
  545. package/dist/packages/core/src/components/Word/generatedDraft.d.ts +39 -0
  546. package/dist/packages/core/src/components/Word/generatedDraft.js +69 -0
  547. package/dist/packages/core/src/components/Word/phonemeSelectBlockUtils.d.ts +14 -0
  548. package/dist/packages/core/src/components/Word/phonemeSelectBlockUtils.js +10 -0
  549. package/dist/packages/core/src/components/Word/useWordTableDisplaySettings.d.ts +35 -0
  550. package/dist/packages/core/src/components/Word/useWordTableDisplaySettings.js +82 -0
  551. package/dist/packages/core/src/components/Word/useWordTablePrint.d.ts +31 -0
  552. package/dist/packages/core/src/components/Word/useWordTablePrint.js +43 -0
  553. package/dist/packages/core/src/components/Word/wordScoreStats.d.ts +77 -0
  554. package/dist/packages/core/src/components/Word/wordScoreStats.js +100 -0
  555. package/dist/packages/core/src/components/Word/wordTableBlockTypes.d.ts +85 -0
  556. package/dist/packages/core/src/components/Word/wordTableBlockTypes.js +3 -0
  557. package/dist/packages/core/src/components/Word/wordTablePrint.d.ts +14 -0
  558. package/dist/packages/core/src/components/Word/wordTablePrint.js +210 -0
  559. package/dist/packages/core/src/components/Word/wordTableRecommend.d.ts +67 -0
  560. package/dist/packages/core/src/components/Word/wordTableRecommend.js +91 -0
  561. package/dist/packages/core/src/components/Word/wordTableReview.d.ts +49 -0
  562. package/dist/packages/core/src/components/Word/wordTableReview.js +112 -0
  563. package/dist/packages/core/src/components/Word/wordTableScoring.d.ts +100 -0
  564. package/dist/packages/core/src/components/Word/wordTableScoring.js +126 -0
  565. package/dist/packages/core/src/components/Word/wordTableSettings.d.ts +56 -0
  566. package/dist/packages/core/src/components/Word/wordTableSettings.js +140 -0
  567. package/dist/packages/core/src/components/WordTable.css +424 -0
  568. package/dist/packages/core/src/components/WordTable.d.ts +75 -0
  569. package/dist/packages/core/src/components/WordTable.js +184 -0
  570. package/dist/packages/core/src/components/barChartData.d.ts +48 -0
  571. package/dist/packages/core/src/components/barChartData.js +111 -0
  572. package/dist/packages/core/src/components/barChartTypes.d.ts +82 -0
  573. package/dist/packages/core/src/components/barChartTypes.js +22 -0
  574. package/dist/packages/core/src/components/buttonTypes.d.ts +102 -0
  575. package/dist/packages/core/src/components/buttonTypes.js +1 -0
  576. package/dist/packages/core/src/components/tableTrackList.d.ts +9 -0
  577. package/dist/packages/core/src/components/tableTrackList.js +32 -0
  578. package/dist/packages/core/src/components/useAnchoredMenu.d.ts +28 -0
  579. package/dist/packages/core/src/components/useAnchoredMenu.js +72 -0
  580. package/dist/packages/core/src/components/useBarChartControl.d.ts +8 -0
  581. package/dist/packages/core/src/components/useBarChartControl.js +76 -0
  582. package/dist/packages/core/src/components/useCalendarMonth.d.ts +12 -0
  583. package/dist/packages/core/src/components/useCalendarMonth.js +50 -0
  584. package/dist/packages/core/src/components/useComboboxSuggestions.d.ts +22 -0
  585. package/dist/packages/core/src/components/useComboboxSuggestions.js +60 -0
  586. package/dist/packages/core/src/components/useFitScale.d.ts +16 -0
  587. package/dist/packages/core/src/components/useFitScale.js +43 -0
  588. package/dist/packages/core/src/components/useSoundCompassExam.d.ts +54 -0
  589. package/dist/packages/core/src/components/useSoundCompassExam.js +128 -0
  590. package/dist/packages/core/src/components/useToastLifecycle.d.ts +16 -0
  591. package/dist/packages/core/src/components/useToastLifecycle.js +140 -0
  592. package/dist/packages/core/src/components/wordTableLayout.d.ts +76 -0
  593. package/dist/packages/core/src/components/wordTableLayout.js +162 -0
  594. package/dist/packages/core/src/components.d.ts +314 -0
  595. package/dist/packages/core/src/components.js +232 -0
  596. package/dist/packages/core/src/context/I18nContext.d.ts +11 -0
  597. package/dist/packages/core/src/context/I18nContext.js +20 -0
  598. package/dist/packages/core/src/context/I18nProvider.d.ts +9 -0
  599. package/dist/packages/core/src/context/I18nProvider.js +15 -0
  600. package/dist/packages/core/src/context/WordDataContext.d.ts +25 -0
  601. package/dist/packages/core/src/context/WordDataContext.js +6 -0
  602. package/dist/packages/core/src/context/WordDataProvider.d.ts +5 -0
  603. package/dist/packages/core/src/context/WordDataProvider.js +5 -0
  604. package/dist/packages/core/src/hooks/bodyScrollLock.d.ts +5 -0
  605. package/dist/packages/core/src/hooks/bodyScrollLock.js +62 -0
  606. package/dist/packages/core/src/hooks/escStack.d.ts +2 -0
  607. package/dist/packages/core/src/hooks/escStack.js +38 -0
  608. package/dist/packages/core/src/hooks/useBackgroundUrl.d.ts +2 -0
  609. package/dist/packages/core/src/hooks/useBackgroundUrl.js +13 -0
  610. package/dist/packages/core/src/hooks/useCacheManagement.d.ts +34 -0
  611. package/dist/packages/core/src/hooks/useCacheManagement.js +107 -0
  612. package/dist/packages/core/src/hooks/useDailyTrainingSelection.d.ts +17 -0
  613. package/dist/packages/core/src/hooks/useDailyTrainingSelection.js +87 -0
  614. package/dist/packages/core/src/hooks/useDeviceManagement.d.ts +37 -0
  615. package/dist/packages/core/src/hooks/useDeviceManagement.js +40 -0
  616. package/dist/packages/core/src/hooks/useDocumentTitle.d.ts +22 -0
  617. package/dist/packages/core/src/hooks/useDocumentTitle.js +49 -0
  618. package/dist/packages/core/src/hooks/useEditableList.d.ts +20 -0
  619. package/dist/packages/core/src/hooks/useEditableList.js +73 -0
  620. package/dist/packages/core/src/hooks/useEscToClose.d.ts +19 -0
  621. package/dist/packages/core/src/hooks/useEscToClose.js +30 -0
  622. package/dist/packages/core/src/hooks/useFocusTrap.d.ts +19 -0
  623. package/dist/packages/core/src/hooks/useFocusTrap.js +50 -0
  624. package/dist/packages/core/src/hooks/useFontScale.d.ts +20 -0
  625. package/dist/packages/core/src/hooks/useFontScale.js +51 -0
  626. package/dist/packages/core/src/hooks/useHoverAnchor.d.ts +33 -0
  627. package/dist/packages/core/src/hooks/useHoverAnchor.js +49 -0
  628. package/dist/packages/core/src/hooks/useIcon.d.ts +7 -0
  629. package/dist/packages/core/src/hooks/useIcon.js +124 -0
  630. package/dist/packages/core/src/hooks/useLatestRef.d.ts +12 -0
  631. package/dist/packages/core/src/hooks/useLatestRef.js +17 -0
  632. package/dist/packages/core/src/hooks/useLucideIcon.d.ts +15 -0
  633. package/dist/packages/core/src/hooks/useLucideIcon.js +71 -0
  634. package/dist/packages/core/src/hooks/useMediaQuery.d.ts +17 -0
  635. package/dist/packages/core/src/hooks/useMediaQuery.js +45 -0
  636. package/dist/packages/core/src/hooks/usePagedList.d.ts +23 -0
  637. package/dist/packages/core/src/hooks/usePagedList.js +26 -0
  638. package/dist/packages/core/src/hooks/useParentBgTheme.d.ts +8 -0
  639. package/dist/packages/core/src/hooks/useParentBgTheme.js +18 -0
  640. package/dist/packages/core/src/hooks/usePasswordChange.d.ts +28 -0
  641. package/dist/packages/core/src/hooks/usePasswordChange.js +54 -0
  642. package/dist/packages/core/src/hooks/useRelativeDay.d.ts +12 -0
  643. package/dist/packages/core/src/hooks/useRelativeDay.js +30 -0
  644. package/dist/packages/core/src/hooks/useTablePaging.d.ts +46 -0
  645. package/dist/packages/core/src/hooks/useTablePaging.js +63 -0
  646. package/dist/packages/core/src/hooks/useToastState.d.ts +15 -0
  647. package/dist/packages/core/src/hooks/useToastState.js +29 -0
  648. package/dist/packages/core/src/hooks/useTrainingSessionLog.d.ts +7 -0
  649. package/dist/packages/core/src/hooks/useTrainingSessionLog.js +26 -0
  650. package/dist/packages/core/src/hooks/useTrainingTypeLabels.d.ts +16 -0
  651. package/dist/packages/core/src/hooks/useTrainingTypeLabels.js +25 -0
  652. package/dist/packages/core/src/hooks/useVisitAllPanel.d.ts +30 -0
  653. package/dist/packages/core/src/hooks/useVisitAllPanel.js +43 -0
  654. package/dist/packages/core/src/hooks/useVisitHistory.d.ts +38 -0
  655. package/dist/packages/core/src/hooks/useVisitHistory.js +59 -0
  656. package/dist/packages/core/src/hooks/useVisitSchedule.d.ts +31 -0
  657. package/dist/packages/core/src/hooks/useVisitSchedule.js +101 -0
  658. package/dist/packages/core/src/hooks/useWindowEvent.d.ts +11 -0
  659. package/dist/packages/core/src/hooks/useWindowEvent.js +27 -0
  660. package/dist/packages/core/src/hooks/useWordAttributeFilter.d.ts +70 -0
  661. package/dist/packages/core/src/hooks/useWordAttributeFilter.js +115 -0
  662. package/dist/packages/core/src/hooks/useWordDataStats.d.ts +22 -0
  663. package/dist/packages/core/src/hooks/useWordDataStats.js +40 -0
  664. package/dist/packages/core/src/hooks/useWordImage.d.ts +19 -0
  665. package/dist/packages/core/src/hooks/useWordImage.js +28 -0
  666. package/dist/packages/core/src/hooks/useWordMeanings.d.ts +39 -0
  667. package/dist/packages/core/src/hooks/useWordMeanings.js +62 -0
  668. package/dist/packages/core/src/hooks/useWordTrainingDataGeneration.d.ts +34 -0
  669. package/dist/packages/core/src/hooks/useWordTrainingDataGeneration.js +98 -0
  670. package/dist/packages/core/src/hooks/useWordTrainingFilter.d.ts +91 -0
  671. package/dist/packages/core/src/hooks/useWordTrainingFilter.js +549 -0
  672. package/dist/packages/core/src/hooks/wordTrainingFilterModel.d.ts +61 -0
  673. package/dist/packages/core/src/hooks/wordTrainingFilterModel.js +102 -0
  674. package/dist/packages/core/src/hooks.d.ts +27 -0
  675. package/dist/packages/core/src/hooks.js +28 -0
  676. package/dist/packages/core/src/i18n/index.d.ts +21 -0
  677. package/dist/packages/core/src/i18n/index.js +68 -0
  678. package/dist/packages/core/src/i18n/locales/en.json +4055 -0
  679. package/dist/packages/core/src/i18n/locales/ko.json +4052 -0
  680. package/dist/packages/core/src/icon/none.svg +4 -0
  681. package/dist/packages/core/src/icon/null.svg +3 -0
  682. package/dist/packages/core/src/index.d.ts +16 -0
  683. package/dist/packages/core/src/index.js +25 -0
  684. package/dist/packages/core/src/logo/Logo_APEB.svg +53 -0
  685. package/dist/packages/core/src/logo/Logo_APEB_black.svg +42 -0
  686. package/dist/packages/core/src/logo/Logo_APEB_white.svg +42 -0
  687. package/dist/packages/core/src/logo/Logo_HTP_kr.svg +21 -0
  688. package/dist/packages/core/src/logo/Logo_HTP_kr_black.svg +17 -0
  689. package/dist/packages/core/src/logo/Logo_HTP_kr_white.svg +17 -0
  690. package/dist/packages/core/src/logo/Logo_IHAB_en.svg +18 -0
  691. package/dist/packages/core/src/logo/Logo_IHAB_en_black.svg +14 -0
  692. package/dist/packages/core/src/logo/Logo_IHAB_en_white.svg +14 -0
  693. package/dist/packages/core/src/logo/Logo_IHAB_kr.svg +18 -0
  694. package/dist/packages/core/src/logo/Logo_IHAB_kr_black.svg +14 -0
  695. package/dist/packages/core/src/logo/Logo_IHAB_kr_white.svg +14 -0
  696. package/dist/packages/core/src/logo/Logo_SDS_kr.svg +22 -0
  697. package/dist/packages/core/src/logo/Logo_SDS_kr_black.svg +18 -0
  698. package/dist/packages/core/src/logo/Logo_SDS_kr_white.svg +18 -0
  699. package/dist/packages/core/src/logo/Logo_speechearManager_kr.svg +20 -0
  700. package/dist/packages/core/src/logo/Logo_speechearManager_kr_black.svg +21 -0
  701. package/dist/packages/core/src/logo/Logo_speechearManager_kr_textWhite.svg +45 -0
  702. package/dist/packages/core/src/logo/Logo_speechearManager_kr_white.svg +21 -0
  703. package/dist/packages/core/src/logo/Logo_speechear_kr.svg +17 -0
  704. package/dist/packages/core/src/logo/Logo_speechear_kr_black.svg +16 -0
  705. package/dist/packages/core/src/logo/Logo_speechear_kr_textWhite.svg +42 -0
  706. package/dist/packages/core/src/logo/Logo_speechear_kr_white.svg +16 -0
  707. package/dist/packages/core/src/logo/Symbol_APEB.svg +34 -0
  708. package/dist/packages/core/src/logo/Symbol_APEB_black.svg +15 -0
  709. package/dist/packages/core/src/logo/Symbol_APEB_white.svg +15 -0
  710. package/dist/packages/core/src/logo/Symbol_HTP.svg +14 -0
  711. package/dist/packages/core/src/logo/Symbol_HTP_black.svg +10 -0
  712. package/dist/packages/core/src/logo/Symbol_HTP_white.svg +10 -0
  713. package/dist/packages/core/src/logo/Symbol_IHAB.svg +14 -0
  714. package/dist/packages/core/src/logo/Symbol_IHAB_black.svg +10 -0
  715. package/dist/packages/core/src/logo/Symbol_IHAB_white.svg +10 -0
  716. package/dist/packages/core/src/logo/Symbol_SDS.svg +14 -0
  717. package/dist/packages/core/src/logo/Symbol_SDS_black.svg +10 -0
  718. package/dist/packages/core/src/logo/Symbol_SDS_white.svg +10 -0
  719. package/dist/packages/core/src/logo/Symbol_speechear.svg +15 -0
  720. package/dist/packages/core/src/logo/Symbol_speechear_black.svg +16 -0
  721. package/dist/packages/core/src/logo/Symbol_speechear_white.svg +16 -0
  722. package/dist/packages/core/src/logo/qr_speechear.svg +1 -0
  723. package/dist/packages/core/src/sounds/noiseAssets.d.ts +6 -0
  724. package/dist/packages/core/src/sounds/noiseAssets.js +24 -0
  725. package/dist/packages/core/src/styles.css +144 -0
  726. package/dist/packages/core/src/tokens.css +407 -0
  727. package/dist/packages/core/src/types/audio.d.ts +11 -0
  728. package/dist/packages/core/src/types/audio.js +1 -0
  729. package/dist/packages/core/src/types/device.d.ts +10 -0
  730. package/dist/packages/core/src/types/device.js +1 -0
  731. package/dist/packages/core/src/types/filterPanel.d.ts +63 -0
  732. package/dist/packages/core/src/types/filterPanel.js +8 -0
  733. package/dist/packages/core/src/types/geometry.d.ts +14 -0
  734. package/dist/packages/core/src/types/geometry.js +1 -0
  735. package/dist/packages/core/src/types/training.d.ts +131 -0
  736. package/dist/packages/core/src/types/training.js +1 -0
  737. package/dist/packages/core/src/types/wordSearch.d.ts +49 -0
  738. package/dist/packages/core/src/types/wordSearch.js +1 -0
  739. package/dist/packages/core/src/types.d.ts +3 -0
  740. package/dist/packages/core/src/types.js +1 -0
  741. package/dist/packages/core/src/utils/CategoryData.d.ts +91 -0
  742. package/dist/packages/core/src/utils/CategoryData.js +57 -0
  743. package/dist/packages/core/src/utils/array.d.ts +20 -0
  744. package/dist/packages/core/src/utils/array.js +36 -0
  745. package/dist/packages/core/src/utils/assets.d.ts +41 -0
  746. package/dist/packages/core/src/utils/assets.js +62 -0
  747. package/dist/packages/core/src/utils/audioMeter.d.ts +19 -0
  748. package/dist/packages/core/src/utils/audioMeter.js +70 -0
  749. package/dist/packages/core/src/utils/categories.d.ts +67 -0
  750. package/dist/packages/core/src/utils/categories.js +70 -0
  751. package/dist/packages/core/src/utils/clipboard.d.ts +10 -0
  752. package/dist/packages/core/src/utils/clipboard.js +46 -0
  753. package/dist/packages/core/src/utils/companyTypes.d.ts +2 -0
  754. package/dist/packages/core/src/utils/companyTypes.js +6 -0
  755. package/dist/packages/core/src/utils/csv.d.ts +22 -0
  756. package/dist/packages/core/src/utils/csv.js +35 -0
  757. package/dist/packages/core/src/utils/cx.d.ts +7 -0
  758. package/dist/packages/core/src/utils/cx.js +9 -0
  759. package/dist/packages/core/src/utils/dailySelectionUtils.d.ts +15 -0
  760. package/dist/packages/core/src/utils/dailySelectionUtils.js +68 -0
  761. package/dist/packages/core/src/utils/date.d.ts +86 -0
  762. package/dist/packages/core/src/utils/date.js +171 -0
  763. package/dist/packages/core/src/utils/deviceKind.d.ts +13 -0
  764. package/dist/packages/core/src/utils/deviceKind.js +19 -0
  765. package/dist/packages/core/src/utils/encoding.d.ts +26 -0
  766. package/dist/packages/core/src/utils/encoding.js +33 -0
  767. package/dist/packages/core/src/utils/errorMessage.d.ts +44 -0
  768. package/dist/packages/core/src/utils/errorMessage.js +63 -0
  769. package/dist/packages/core/src/utils/fontScale.d.ts +10 -0
  770. package/dist/packages/core/src/utils/fontScale.js +28 -0
  771. package/dist/packages/core/src/utils/format.d.ts +48 -0
  772. package/dist/packages/core/src/utils/format.js +122 -0
  773. package/dist/packages/core/src/utils/gameScoreLogger.d.ts +48 -0
  774. package/dist/packages/core/src/utils/gameScoreLogger.js +42 -0
  775. package/dist/packages/core/src/utils/getTrainingData.d.ts +61 -0
  776. package/dist/packages/core/src/utils/getTrainingData.js +156 -0
  777. package/dist/packages/core/src/utils/imageConfig.d.ts +48 -0
  778. package/dist/packages/core/src/utils/imageConfig.js +159 -0
  779. package/dist/packages/core/src/utils/josa.d.ts +29 -0
  780. package/dist/packages/core/src/utils/josa.js +103 -0
  781. package/dist/packages/core/src/utils/koreanPronunciation.d.ts +16 -0
  782. package/dist/packages/core/src/utils/koreanPronunciation.js +223 -0
  783. package/dist/packages/core/src/utils/koreanSyllable.d.ts +174 -0
  784. package/dist/packages/core/src/utils/koreanSyllable.js +654 -0
  785. package/dist/packages/core/src/utils/lucideIconSet.d.ts +16 -0
  786. package/dist/packages/core/src/utils/lucideIconSet.js +350 -0
  787. package/dist/packages/core/src/utils/lucideLoader.d.ts +44 -0
  788. package/dist/packages/core/src/utils/lucideLoader.js +76 -0
  789. package/dist/packages/core/src/utils/noiseSettingsStore.d.ts +22 -0
  790. package/dist/packages/core/src/utils/noiseSettingsStore.js +36 -0
  791. package/dist/packages/core/src/utils/phonemeConvert.d.ts +9 -0
  792. package/dist/packages/core/src/utils/phonemeConvert.js +53 -0
  793. package/dist/packages/core/src/utils/phonemeGroups.d.ts +22 -0
  794. package/dist/packages/core/src/utils/phonemeGroups.js +29 -0
  795. package/dist/packages/core/src/utils/phonemePairSearch.d.ts +22 -0
  796. package/dist/packages/core/src/utils/phonemePairSearch.js +583 -0
  797. package/dist/packages/core/src/utils/phonemePairSearchTypes.d.ts +46 -0
  798. package/dist/packages/core/src/utils/phonemePairSearchTypes.js +1 -0
  799. package/dist/packages/core/src/utils/planFeatures.d.ts +61 -0
  800. package/dist/packages/core/src/utils/planFeatures.js +168 -0
  801. package/dist/packages/core/src/utils/pronunciationConfig.d.ts +7 -0
  802. package/dist/packages/core/src/utils/pronunciationConfig.js +21 -0
  803. package/dist/packages/core/src/utils/savedWordTables.d.ts +18 -0
  804. package/dist/packages/core/src/utils/savedWordTables.js +70 -0
  805. package/dist/packages/core/src/utils/sortValue.d.ts +24 -0
  806. package/dist/packages/core/src/utils/sortValue.js +26 -0
  807. package/dist/packages/core/src/utils/speak.d.ts +7 -0
  808. package/dist/packages/core/src/utils/speak.js +35 -0
  809. package/dist/packages/core/src/utils/storage.d.ts +102 -0
  810. package/dist/packages/core/src/utils/storage.js +118 -0
  811. package/dist/packages/core/src/utils/theme.d.ts +11 -0
  812. package/dist/packages/core/src/utils/theme.js +28 -0
  813. package/dist/packages/core/src/utils/trainingItemResults.d.ts +60 -0
  814. package/dist/packages/core/src/utils/trainingItemResults.js +72 -0
  815. package/dist/packages/core/src/utils/trainingLogger.d.ts +58 -0
  816. package/dist/packages/core/src/utils/trainingLogger.js +50 -0
  817. package/dist/packages/core/src/utils/trainingPalette.d.ts +12 -0
  818. package/dist/packages/core/src/utils/trainingPalette.js +12 -0
  819. package/dist/packages/core/src/utils/ttsConfig.d.ts +78 -0
  820. package/dist/packages/core/src/utils/ttsConfig.js +89 -0
  821. package/dist/packages/core/src/utils/ttsResolver.d.ts +17 -0
  822. package/dist/packages/core/src/utils/ttsResolver.js +56 -0
  823. package/dist/packages/core/src/utils/wordContrast.d.ts +54 -0
  824. package/dist/packages/core/src/utils/wordContrast.js +198 -0
  825. package/dist/packages/core/src/utils/wordPairIndex.d.ts +26 -0
  826. package/dist/packages/core/src/utils/wordPairIndex.js +194 -0
  827. package/dist/packages/core/src/utils/wordPool.d.ts +34 -0
  828. package/dist/packages/core/src/utils/wordPool.js +20 -0
  829. package/dist/packages/core/src/utils/wordSuggestionPolicy.d.ts +55 -0
  830. package/dist/packages/core/src/utils/wordSuggestionPolicy.js +97 -0
  831. package/dist/packages/core/src/utils/wordTrainingGenerators.d.ts +122 -0
  832. package/dist/packages/core/src/utils/wordTrainingGenerators.js +560 -0
  833. package/dist/packages/core/src/utils/wordTrainingGroups.d.ts +10 -0
  834. package/dist/packages/core/src/utils/wordTrainingGroups.js +69 -0
  835. package/dist/packages/core/src/utils/wordTrainingPool.d.ts +51 -0
  836. package/dist/packages/core/src/utils/wordTrainingPool.js +436 -0
  837. package/dist/packages/core/src/utils/wordTrainingRuntime.d.ts +38 -0
  838. package/dist/packages/core/src/utils/wordTrainingRuntime.js +641 -0
  839. package/dist/packages/core/src/utils/wordTrainingRuntimeTypes.d.ts +89 -0
  840. package/dist/packages/core/src/utils/wordTrainingRuntimeTypes.js +77 -0
  841. package/dist/packages/core/src/utils.d.ts +57 -0
  842. package/dist/packages/core/src/utils.js +46 -0
  843. package/dist/tsdoc-metadata.json +11 -0
  844. package/dist/types.cjs.js +1 -0
  845. package/dist/types.esm.js +1 -0
  846. package/dist/utils.cjs.js +20 -0
  847. package/dist/utils.esm.js +20 -0
  848. package/package.json +171 -0
@@ -0,0 +1,89 @@
1
+ import { type DifficultyLevel, type Syllable } from './koreanSyllable';
2
+ /** @public 단어 구성요소 필터 — 초성/중성/종성. 각 값은 string|string[](배열은 OR), 미지정/null은 무제약. 서로 다른 구성요소 간에는 AND */
3
+ export interface CompositionFilter {
4
+ cho?: string | string[] | null;
5
+ jung?: string | string[] | null;
6
+ jong?: string | string[] | null;
7
+ /** true 이면 종성(받침)이 있는 단어를 제외 — 열린 음절로만 구성된 단어만 사용. jong 과 상호배타 */
8
+ jongNone?: boolean;
9
+ /** 음절 수 — number 또는 number[](OR). 미지정/null은 무제약 */
10
+ syllable?: number | number[] | null;
11
+ }
12
+ /** @public 문제 옵션 */
13
+ export interface GenOptions {
14
+ difficulty?: DifficultyLevel | null;
15
+ /** 초성 — string 또는 string[]. 배열은 OR (예: ['ㄷ','ㄸ']). @deprecated composition.cho 사용 (단어 어디든 자음 매칭 — 초성/종성 무관) */
16
+ choseong?: string | string[] | null;
17
+ /** 단어 구성요소 필터 (초성/중성/종성). 위치별 정확 매칭. */
18
+ composition?: CompositionFilter | null;
19
+ /** 난이도 등급('1'~'4') 필터 — 배열은 OR. 정답(후보) 단어에만 적용, 오답 풀은 무관. 미지정/null/빈 배열은 무제약 */
20
+ grade?: string[] | null;
21
+ /** (deprecated) 기준 글자 — 첫 음절 자체. 호환을 위해 유지 */
22
+ targetSyllable?: string | null;
23
+ /** 보기 개수 (기본 3) */
24
+ choicesPerItem?: number;
25
+ /**
26
+ * 대립 갯수 — 정답과 대립어(오답) 사이에서 difficulty(대립 종류)에 해당하는 음소가
27
+ * 다른 음절 수. difficulty가 cho/jung/jong 일 때만 의미 있음. 기본 1(최소대립쌍).
28
+ */
29
+ contrastCount?: number;
30
+ /** 문제 수 (기본 10) */
31
+ count?: number;
32
+ /**
33
+ * true 이면 이미지 없는 단어를 문제/보기에서 제외.
34
+ * false (기본) 이면 이미지 유무 무관하게 모든 단어 사용 가능.
35
+ */
36
+ excludeNoImage?: boolean;
37
+ /**
38
+ * true(기본) 이면 오답이 정답과 '음절 구조'(초성 ㅇ 유무·받침 유무)가 같은 단어만 되도록 강제.
39
+ * false 이면 구조가 다른 대립(예: 발↔알, 파↔판)도 오답으로 허용.
40
+ */
41
+ sameStructureOnly?: boolean;
42
+ /**
43
+ * 음소 선택 방식. 'char'(글자 선택, 기본): 정답을 철자로 검색.
44
+ * 'pron'(발음 입력): 정답을 표준발음으로 검색. 대립(오답) 비교는 두 모드 모두 표준발음 기준.
45
+ */
46
+ phonemeView?: 'char' | 'pron';
47
+ /**
48
+ * true 이면 후보 단어 샘플링 캡(생성 성능용)을 적용하지 않고 조건에 맞는
49
+ * 전체 단어 수를 계산한다. 카운트 표시(countUsableWords) 전용 — 문제 생성에는 쓰지 않는다.
50
+ * (캡을 쓰면 무작위=500, 유형별=1500로 잘려 실제 가능 단어 수를 왜곡한다.)
51
+ */
52
+ fullCount?: boolean;
53
+ }
54
+ /** @public 카테고리 키 */
55
+ export type WordTrainingTypeKey = 'SAME_SOUND_PICK' | 'SAME_OR_DIFF' | 'HEAR_AND_PICK_SAME' | 'HEAR_AND_PICK_INCLUDED' | 'STARTS_WITH_SAME_SOUND' | 'LISTEN_AND_REMEMBER_ORDER' | 'MERGE_2_SYLLABLES' | 'MERGE_3_SYLLABLES' | 'MERGE_2_PHONEMES' | 'MERGE_3_PHONEMES' | 'DROP_1_FROM_2SYLL' | 'DROP_1_FROM_3SYLL' | 'DROP_PART_FROM_COMPOUND' | 'DROP_FINAL_CONSONANT_FROM_1SYLL' | 'REMOVE_CONSONANT_AND_IDENTIFY_PHONEME' | 'CHANGE_1_SYLL_IN_2SYLL' | 'CHANGE_1_SYLL_IN_3SYLL' | 'CHANGE_1_PHONEME_IN_1SYLL' | 'CHANGE_1_PHONEME_IN_2SYLL';
56
+ /** @public 훈련 유형이 속한 상위 그룹(카테고리). 앱의 STATIC_TYPE_GROUPS와 동일 분류. */
57
+ export type WordTrainingGroup = 'discrimination' | 'synthesis' | 'deletion' | 'substitution' | 'attention';
58
+ /** 카테고리별 capability 메타 + 소속 그룹. group은 유형↔카드 스텝 계열 판정의 단일 소스. */
59
+ export declare const CAPABILITY: Record<WordTrainingTypeKey, {
60
+ difficulty: boolean;
61
+ choseong: boolean;
62
+ group: WordTrainingGroup;
63
+ }>;
64
+ /**
65
+ * @public 카드형(2스텝: 듣기 → 카드 선택) 훈련의 카드 계열 판정. 합성/탈락/대치 그룹이 카드형이다.
66
+ * (변별·주의집중은 오디오+보기/기본 경로). 알 수 없는 키는 null.
67
+ */
68
+ export declare function cardGroupOf(typeKey?: string): 'synthesis' | 'deletion' | 'substitution' | null;
69
+ /**
70
+ * @public 타입별 '문제(정답) 단어' 구조 제약.
71
+ *
72
+ * 런타임 자동생성기(genDropFinalConsonant / genRemoveConsonant / genMerge2Syllables 등)의 단어 풀
73
+ * 조건과 **동일한 규칙**을 담는다. 편집기(단어훈련 만들기)의 무작위 선택 후보·표시 단어수·직접입력
74
+ * 검증이 이 규칙을 공유해, 프리뷰가 런타임이 실제로 뽑을 수 있는 단어와 어긋나지 않게 한다.
75
+ * (음절 자체의 자모 구조(초성/종성 등)를 따지지 않는 타입은 syllable을 항상 true로 둬 음절 수만 강제한다.)
76
+ */
77
+ export declare const QUESTION_WORD_RULE: Partial<Record<WordTrainingTypeKey, {
78
+ syllables: number;
79
+ syllable: (s: Syllable) => boolean;
80
+ }>>;
81
+ /** @public 자동 문제생성이 불가하고 수동 구성만 지원하는 타입. 현재는 없음.
82
+ * (합성어 부분 탈락은 앞/뒤 조각이 모두 실단어인 합성어를 휴리스틱으로 자동 추천 — buildDropCompoundProblem.) */
83
+ export declare const MANUAL_ONLY_TYPES: ReadonlySet<WordTrainingTypeKey>;
84
+ /** @public 이 타입에 '문제(정답) 단어' 구조 제약이 있는가(편집기 카운트/후보 좁히기 판단용). */
85
+ export declare function hasQuestionWordConstraint(typeKey: WordTrainingTypeKey): boolean;
86
+ /** @public 단어가 해당 타입의 문제(정답) 단어로 구조적으로 유효한가. 제약 없는 타입은 항상 true. */
87
+ export declare function isValidQuestionWord(typeKey: WordTrainingTypeKey, word: string): boolean;
88
+ /** @public 자동 문제생성 불가(수동 구성 전용) 타입인가. */
89
+ export declare function isManualOnlyType(typeKey: WordTrainingTypeKey): boolean;
@@ -0,0 +1,77 @@
1
+ import { parseSyllable, CHOSEONG } from './koreanSyllable';
2
+ /** 카테고리별 capability 메타 + 소속 그룹. group은 유형↔카드 스텝 계열 판정의 단일 소스. */
3
+ export const CAPABILITY = {
4
+ SAME_SOUND_PICK: { difficulty: true, choseong: true, group: 'discrimination' },
5
+ SAME_OR_DIFF: { difficulty: true, choseong: true, group: 'discrimination' },
6
+ HEAR_AND_PICK_SAME: { difficulty: true, choseong: true, group: 'discrimination' },
7
+ HEAR_AND_PICK_INCLUDED: { difficulty: true, choseong: true, group: 'discrimination' },
8
+ STARTS_WITH_SAME_SOUND: { difficulty: false, choseong: true, group: 'discrimination' },
9
+ LISTEN_AND_REMEMBER_ORDER: { difficulty: false, choseong: true, group: 'attention' },
10
+ MERGE_2_SYLLABLES: { difficulty: false, choseong: true, group: 'synthesis' },
11
+ MERGE_3_SYLLABLES: { difficulty: false, choseong: true, group: 'synthesis' },
12
+ MERGE_2_PHONEMES: { difficulty: false, choseong: true, group: 'synthesis' },
13
+ MERGE_3_PHONEMES: { difficulty: false, choseong: true, group: 'synthesis' },
14
+ DROP_1_FROM_2SYLL: { difficulty: false, choseong: true, group: 'deletion' },
15
+ DROP_1_FROM_3SYLL: { difficulty: false, choseong: true, group: 'deletion' },
16
+ DROP_PART_FROM_COMPOUND: { difficulty: false, choseong: true, group: 'deletion' },
17
+ DROP_FINAL_CONSONANT_FROM_1SYLL: { difficulty: false, choseong: true, group: 'deletion' },
18
+ REMOVE_CONSONANT_AND_IDENTIFY_PHONEME: { difficulty: false, choseong: true, group: 'deletion' },
19
+ CHANGE_1_SYLL_IN_2SYLL: { difficulty: true, choseong: true, group: 'substitution' },
20
+ CHANGE_1_SYLL_IN_3SYLL: { difficulty: true, choseong: true, group: 'substitution' },
21
+ CHANGE_1_PHONEME_IN_1SYLL: { difficulty: false, choseong: true, group: 'substitution' },
22
+ CHANGE_1_PHONEME_IN_2SYLL: { difficulty: true, choseong: true, group: 'substitution' },
23
+ };
24
+ /**
25
+ * @public 카드형(2스텝: 듣기 → 카드 선택) 훈련의 카드 계열 판정. 합성/탈락/대치 그룹이 카드형이다.
26
+ * (변별·주의집중은 오디오+보기/기본 경로). 알 수 없는 키는 null.
27
+ */
28
+ export function cardGroupOf(typeKey) {
29
+ const g = typeKey ? CAPABILITY[typeKey]?.group : undefined;
30
+ return (g === 'synthesis' || g === 'deletion' || g === 'substitution') ? g : null;
31
+ }
32
+ const _IEUNG_CHO = CHOSEONG.indexOf('ㅇ');
33
+ /**
34
+ * @public 타입별 '문제(정답) 단어' 구조 제약.
35
+ *
36
+ * 런타임 자동생성기(genDropFinalConsonant / genRemoveConsonant / genMerge2Syllables 등)의 단어 풀
37
+ * 조건과 **동일한 규칙**을 담는다. 편집기(단어훈련 만들기)의 무작위 선택 후보·표시 단어수·직접입력
38
+ * 검증이 이 규칙을 공유해, 프리뷰가 런타임이 실제로 뽑을 수 있는 단어와 어긋나지 않게 한다.
39
+ * (음절 자체의 자모 구조(초성/종성 등)를 따지지 않는 타입은 syllable을 항상 true로 둬 음절 수만 강제한다.)
40
+ */
41
+ export const QUESTION_WORD_RULE = {
42
+ // 받침 탈락(닭→다): 1음절 + 받침 있음
43
+ DROP_FINAL_CONSONANT_FROM_1SYLL: { syllables: 1, syllable: s => s.jong > 0 },
44
+ // 자음(초성) 탈락(가→아): 1음절 + 받침 없음 + 초성 ≠ ㅇ(무음)
45
+ REMOVE_CONSONANT_AND_IDENTIFY_PHONEME: { syllables: 1, syllable: s => s.jong === 0 && s.cho !== _IEUNG_CHO },
46
+ // 음절 2개 합치기: 정답 단어가 항상 2음절이어야 함(genMerge2Syllables와 동일 제약)
47
+ MERGE_2_SYLLABLES: { syllables: 2, syllable: () => true },
48
+ // 음절 3개 합치기: 정답 단어가 항상 3음절이어야 함(genMerge3Syllables와 동일 제약)
49
+ MERGE_3_SYLLABLES: { syllables: 3, syllable: () => true },
50
+ // 음소 2개 합치기(초성+중성): 정답은 받침 없는 1음절(CV) — genMerge2Phonemes(s.jong===0)와 동일 제약
51
+ MERGE_2_PHONEMES: { syllables: 1, syllable: s => s.jong === 0 },
52
+ // 음소 3개 합치기(초성+중성+종성): 정답은 받침 있는 1음절(CVC) — genMerge3Phonemes와 동일 제약
53
+ MERGE_3_PHONEMES: { syllables: 1, syllable: s => s.jong > 0 },
54
+ };
55
+ /** @public 자동 문제생성이 불가하고 수동 구성만 지원하는 타입. 현재는 없음.
56
+ * (합성어 부분 탈락은 앞/뒤 조각이 모두 실단어인 합성어를 휴리스틱으로 자동 추천 — buildDropCompoundProblem.) */
57
+ export const MANUAL_ONLY_TYPES = new Set([]);
58
+ /** @public 이 타입에 '문제(정답) 단어' 구조 제약이 있는가(편집기 카운트/후보 좁히기 판단용). */
59
+ export function hasQuestionWordConstraint(typeKey) {
60
+ return typeKey in QUESTION_WORD_RULE;
61
+ }
62
+ /** @public 단어가 해당 타입의 문제(정답) 단어로 구조적으로 유효한가. 제약 없는 타입은 항상 true. */
63
+ export function isValidQuestionWord(typeKey, word) {
64
+ const rule = QUESTION_WORD_RULE[typeKey];
65
+ if (!rule)
66
+ return true;
67
+ const chars = [...word];
68
+ if (chars.length !== rule.syllables)
69
+ return false;
70
+ // 현재 규칙은 1음절 전제라 유일 음절에 술어를 적용한다.
71
+ const s = parseSyllable(chars[0]);
72
+ return !!s && rule.syllable(s);
73
+ }
74
+ /** @public 자동 문제생성 불가(수동 구성 전용) 타입인가. */
75
+ export function isManualOnlyType(typeKey) {
76
+ return MANUAL_ONLY_TYPES.has(typeKey);
77
+ }
@@ -0,0 +1,57 @@
1
+ export { speak, stopSpeaking } from './utils/speak';
2
+ export { getAssetBaseUrl, resolveAssetUrl, setAssetBaseUrl } from './utils/assets';
3
+ export { configureStorage, downloadSound, fileExists, getSignedOrPublicUrl, resolveSoundPath, getNoiseBaseUrl } from './utils/storage';
4
+ export type { StorageResolvers } from './utils/storage';
5
+ export { configureTTS, getTTSUrlResolver, getTTSFallbackUrlResolver, clearAudioExistsCache } from './utils/ttsConfig';
6
+ export { configurePronunciationResolver, getPronunciationResolver } from './utils/pronunciationConfig';
7
+ export { getElementAnalyser, resumeAudioMeter, readLevel } from './utils/audioMeter';
8
+ export { configureImageResolver, getImageResolver, checkImageExists, getImageExistsCached, prewarmImageCache, bulkSetImageExistence, clearImageExistenceCache, getImageExistenceStats } from './utils/imageConfig';
9
+ export { buildPairIndex, getPairIndex, clearPairIndexCache } from './utils/wordPairIndex';
10
+ export type { PairIndex, PairIndexEntry, PairInput } from './utils/wordPairIndex';
11
+ export { minimalPairDistractors, filterContrastCandidates, hasStructureContrast, buildMultiPartPosContrast, hasSel } from './utils/wordContrast';
12
+ export type { ContrastFilterOpts } from './utils/wordContrast';
13
+ export type { CompositionFilter } from './utils/wordTrainingRuntimeTypes';
14
+ export { parseSyllable, composeSyllable, createDecompCache, CHOSEONG, JUNGSEONG, JONGSEONG } from './utils/koreanSyllable';
15
+ export type { Syllable } from './utils/koreanSyllable';
16
+ export { toStandardPronunciation } from './utils/koreanPronunciation';
17
+ export { finalToPhoneme } from './utils/phonemeConvert';
18
+ export { withIga, withEulReul, withEunNeun, withWaGwa, withEuRo, pickIga, pickEulReul, pickEunNeun, pickWaGwa, pickEuRo } from './utils/josa';
19
+ export { syllablePron, soundOf, primarySelPart, syllMatchesComp, matchSyllables, syllableContrasts, buildDropContrastProblem, buildDropContrast3Problem, buildDropCompoundProblem, buildDropFinalConsonantProblem, buildRemoveConsonantProblem, buildChangeWholeSyllableProblem, buildSyllableMaskIndex, mergeQuestionText, phonemePartsOf, jamoToNamesForSpeech, cardQuestionTitle } from './utils/wordTrainingGenerators';
20
+ export { reorderArray, shuffle, sample } from './utils/array';
21
+ export { getErrorMessage, toUserErrorMessage, isNetworkErrorMessage, NETWORK_ERROR_MESSAGE } from './utils/errorMessage';
22
+ export { sortToValue, parseSortValue } from './utils/sortValue';
23
+ export { escapeCsvField, downloadCsvText } from './utils/csv';
24
+ export { setWordPool, getWordPool } from './utils/wordPool';
25
+ export type { WordPool, WordPoolEntry } from './utils/wordPool';
26
+ export { setTrainingTimeLogger, logTrainingTime, setCrosswordLogger, logCrossword, setTrainingCompletionLogger, logTrainingCompletion } from './utils/trainingLogger';
27
+ export { toItemResults, wrongItems, itemCorrectness } from './utils/trainingItemResults';
28
+ export type { TrainingItemResult } from './utils/trainingItemResults';
29
+ export type { TrainingTimeLogEntry, CrosswordLogEntry, TrainingCompletionEntry } from './utils/trainingLogger';
30
+ export { setGameScoreSubmitter, setGameRanksLoader, setGameLeaderboardLoader, submitGameScore, loadMyGameRanks, loadGameLeaderboard } from './utils/gameScoreLogger';
31
+ export type { LeaderboardRow } from './utils/gameScoreLogger';
32
+ export { configureNoiseSettingsStore, loadNoiseSettings, saveNoiseSettings } from './utils/noiseSettingsStore';
33
+ export type { NoiseSettingsStore } from './utils/noiseSettingsStore';
34
+ export type { TTSConfig } from './utils/ttsConfig';
35
+ export { createTTSUrlResolver } from './utils/ttsResolver';
36
+ export type { CreateTTSResolverOptions } from './utils/ttsResolver';
37
+ export { toStorageName, toBase64UrlSafe, officialSoundPath } from './utils/encoding';
38
+ export { copyText } from './utils/clipboard';
39
+ export { formatPhone, normalizeDate, dateToDb, formatTimeHM, formatCount } from './utils/format';
40
+ export { configureTrainingCategories, getTopicTypes, getTrainingTypes } from './utils/categories';
41
+ export type { TopicType, TopicSubType, TrainingType, TrainingCategoryConfig } from './utils/categories';
42
+ export { formatYmd, formatRelativeTime, getTodayKst, toKstYmd, toKstHm, formatDateKo, formatDateLongKo, formatDatetimeKo, formatDateLocale, formatDateLongLocale } from './utils/date';
43
+ export type { FormatYmdOptions } from './utils/date';
44
+ export { getSavedTheme, applyTheme, initTheme } from './utils/theme';
45
+ export type { ThemeMode } from './utils/theme';
46
+ export { getSavedFontScale, applyFontScale, initFontScale } from './utils/fontScale';
47
+ export type { FontScale } from './utils/fontScale';
48
+ export { classifyPairDifficulty, firstChoseongOf, toChoseong, isAllChoseong, matchesChoseongSearch } from './utils/koreanSyllable';
49
+ export { ensureTrainingDataLoaded, getTrainingPools, loadTrainingData, isTrainingDataLoaded, getDailySelection, computeDailySelection, NOISE_DATAS, SHORT_STORIES, LONG_STORIES, ORDER_SETS } from './utils/getTrainingData';
50
+ export type { TrainingCounts, ComputeDailySelectionOptions } from './utils/getTrainingData';
51
+ export { TRAINING_TYPES, TOPIC_TYPES, TRAINING_TYPE_I18N_KEY } from './utils/CategoryData';
52
+ export type { WordEntry } from './utils/phonemePairSearch';
53
+ export { CAPABILITY, isValidQuestionWord, hasQuestionWordConstraint, isManualOnlyType } from './utils/wordTrainingRuntime';
54
+ export { wordContainsChoseong, wordContainsJungseong, wordContainsJongseong, wordHasNoCoda, wordHasSyllableMatching, syllableLength } from './utils/koreanSyllable';
55
+ export { isSyllablePattern, matchesSyllablePattern, validateSyllableSearchInput, patternToComposition, matchesWordQuery, searchAndRankWords } from './utils/koreanSyllable';
56
+ export { PLAN_FEATURES, PLAN_LIMITS, TIER_RANK, getPlanTier, type PlanTier, type DataLevel, type PlanFeatures, type PlanLimits, } from './utils/planFeatures';
57
+ export { WORD_SUGGESTION_WEEKLY_QUOTA, WORD_SUGGESTION_ACCOUNT_LIMIT, WORD_SUGGESTION_EXISTING_ERROR, isThisWeekPick, } from './utils/wordSuggestionPolicy';
@@ -0,0 +1,46 @@
1
+ export { speak, stopSpeaking } from './utils/speak';
2
+ export { getAssetBaseUrl, resolveAssetUrl, setAssetBaseUrl } from './utils/assets';
3
+ export { configureStorage, downloadSound, fileExists, getSignedOrPublicUrl, resolveSoundPath, getNoiseBaseUrl } from './utils/storage';
4
+ export { configureTTS, getTTSUrlResolver, getTTSFallbackUrlResolver, clearAudioExistsCache } from './utils/ttsConfig';
5
+ export { configurePronunciationResolver, getPronunciationResolver } from './utils/pronunciationConfig';
6
+ export { getElementAnalyser, resumeAudioMeter, readLevel } from './utils/audioMeter';
7
+ export { configureImageResolver, getImageResolver, checkImageExists, getImageExistsCached, prewarmImageCache, bulkSetImageExistence, clearImageExistenceCache, getImageExistenceStats } from './utils/imageConfig';
8
+ export { buildPairIndex, getPairIndex, clearPairIndexCache } from './utils/wordPairIndex';
9
+ export { minimalPairDistractors, filterContrastCandidates, hasStructureContrast, buildMultiPartPosContrast, hasSel } from './utils/wordContrast';
10
+ export { parseSyllable, composeSyllable, createDecompCache, CHOSEONG, JUNGSEONG, JONGSEONG } from './utils/koreanSyllable';
11
+ export { toStandardPronunciation } from './utils/koreanPronunciation';
12
+ export { finalToPhoneme } from './utils/phonemeConvert';
13
+ export { withIga, withEulReul, withEunNeun, withWaGwa, withEuRo, pickIga, pickEulReul, pickEunNeun, pickWaGwa, pickEuRo } from './utils/josa';
14
+ export { syllablePron, soundOf, primarySelPart, syllMatchesComp, matchSyllables, syllableContrasts, buildDropContrastProblem, buildDropContrast3Problem, buildDropCompoundProblem, buildDropFinalConsonantProblem, buildRemoveConsonantProblem, buildChangeWholeSyllableProblem, buildSyllableMaskIndex, mergeQuestionText, phonemePartsOf, jamoToNamesForSpeech, cardQuestionTitle } from './utils/wordTrainingGenerators';
15
+ export { reorderArray, shuffle, sample } from './utils/array';
16
+ export { getErrorMessage, toUserErrorMessage, isNetworkErrorMessage, NETWORK_ERROR_MESSAGE } from './utils/errorMessage';
17
+ export { sortToValue, parseSortValue } from './utils/sortValue';
18
+ export { escapeCsvField, downloadCsvText } from './utils/csv';
19
+ export { setWordPool, getWordPool } from './utils/wordPool';
20
+ export { setTrainingTimeLogger, logTrainingTime, setCrosswordLogger, logCrossword, setTrainingCompletionLogger, logTrainingCompletion } from './utils/trainingLogger';
21
+ /* 문항별 결과 — 앱(useCoreLoggers)이 이걸 서버에 남긴다. 배럴에 없으면 코어 밖에서 못 쓴다 */
22
+ export { toItemResults, wrongItems, itemCorrectness } from './utils/trainingItemResults';
23
+ export { setGameScoreSubmitter, setGameRanksLoader, setGameLeaderboardLoader, submitGameScore, loadMyGameRanks, loadGameLeaderboard } from './utils/gameScoreLogger';
24
+ export { configureNoiseSettingsStore, loadNoiseSettings, saveNoiseSettings } from './utils/noiseSettingsStore';
25
+ export { createTTSUrlResolver } from './utils/ttsResolver';
26
+ export { toStorageName, toBase64UrlSafe, officialSoundPath } from './utils/encoding';
27
+ export { copyText } from './utils/clipboard';
28
+ export { formatPhone, normalizeDate, dateToDb, formatTimeHM, formatCount } from './utils/format';
29
+ export { configureTrainingCategories, getTopicTypes, getTrainingTypes } from './utils/categories';
30
+ export { formatYmd, formatRelativeTime, getTodayKst, toKstYmd, toKstHm, formatDateKo, formatDateLongKo, formatDatetimeKo, formatDateLocale, formatDateLongLocale } from './utils/date';
31
+ export { getSavedTheme, applyTheme, initTheme } from './utils/theme';
32
+ export { getSavedFontScale, applyFontScale, initFontScale } from './utils/fontScale';
33
+ export { classifyPairDifficulty, firstChoseongOf, toChoseong, isAllChoseong, matchesChoseongSearch } from './utils/koreanSyllable';
34
+ export { ensureTrainingDataLoaded, getTrainingPools, loadTrainingData, isTrainingDataLoaded, getDailySelection, computeDailySelection, NOISE_DATAS, SHORT_STORIES, LONG_STORIES, ORDER_SETS } from './utils/getTrainingData';
35
+ export { TRAINING_TYPES, TOPIC_TYPES, TRAINING_TYPE_I18N_KEY } from './utils/CategoryData';
36
+ export { CAPABILITY, isValidQuestionWord, hasQuestionWordConstraint, isManualOnlyType } from './utils/wordTrainingRuntime';
37
+ export { wordContainsChoseong, wordContainsJungseong, wordContainsJongseong, wordHasNoCoda, wordHasSyllableMatching, syllableLength } from './utils/koreanSyllable';
38
+ export { isSyllablePattern, matchesSyllablePattern, validateSyllableSearchInput, patternToComposition, matchesWordQuery, searchAndRankWords } from './utils/koreanSyllable';
39
+ /* 요금제 정의 — 회원앱과 말귀어드민이 둘 다 본다. 예전에는 회원앱(src/libs) 안에 있었고
40
+ 어드민이 '@app/libs/planFeatures' 로 끌어다 썼는데, 그 한 줄 때문에 어드민이 회원앱
41
+ 폴더 없이는 빌드되지 않았다. 값과 타입뿐이라 코어에 두는 게 맞다. */
42
+ export { PLAN_FEATURES, PLAN_LIMITS, TIER_RANK, getPlanTier, } from './utils/planFeatures';
43
+ /* 단어 제안 정책 — 요금제와 똑같은 까닭으로 여기 있다. 회원앱(단어 제안)과
44
+ 말귀어드민(단어 제안 관리)이 같은 숫자를 봐야 하는데, 한쪽 화면 폴더에 두면
45
+ 다른 쪽이 그 폴더 없이는 빌드되지 않는다. 값과 순수 함수뿐이다. */
46
+ export { WORD_SUGGESTION_WEEKLY_QUOTA, WORD_SUGGESTION_ACCOUNT_LIMIT, WORD_SUGGESTION_EXISTING_ERROR, isThisWeekPick, } from './utils/wordSuggestionPolicy';
@@ -0,0 +1,11 @@
1
+ // This file is read by tools that parse documentation comments conforming to the TSDoc standard.
2
+ // It should be published with your NPM package. It should not be tracked by Git.
3
+ {
4
+ "tsdocVersion": "0.12",
5
+ "toolPackages": [
6
+ {
7
+ "packageName": "@microsoft/api-extractor",
8
+ "packageVersion": "7.59.0"
9
+ }
10
+ ]
11
+ }
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,20 @@
1
+ "use strict";var Pe=typeof document<"u"?document.currentScript:null;function ft(e,{onEnd:n,rate:t=.9}={}){if(typeof window>"u"||typeof SpeechSynthesisUtterance>"u"||!("speechSynthesis"in window)){n?.();return}const o=window.speechSynthesis,r=()=>{o.cancel();const i=new SpeechSynthesisUtterance(e),u=o.getVoices().find(a=>a.lang.startsWith("ko"));u&&(i.voice=u),i.rate=t,i.onend=n?function(a){try{n()}catch{}}:null,o.speak(i)};o.getVoices().length>0?r():o.addEventListener("voiceschanged",r,{once:!0})}function ht(){typeof window<"u"&&"speechSynthesis"in window&&window.speechSynthesis.cancel()}const mt=/^(?:[a-z]+:)?\/\//i;let rn="";function St(e){const n=String(e||"").trim();return n?n.replace(/\/+$/,""):""}function Dt(e){rn=St(e)}function an(){return rn}function yt(e){const n=String(e||"").trim();if(!n)return"";if(mt.test(n)||n.startsWith("data:")||n.startsWith("blob:"))return n;const t=n.startsWith("/")?n:`/${n}`,o=an();return o?`${o}${t}`:t}const sn="__ihab_core_storage_resolvers__";function ee(){return globalThis[sn]??null}function Et(e){globalThis[sn]=e}let Me=class extends Error{constructor(n){super(`
2
+ [ihabdevteam-core] ${n}() \uD638\uCD9C \uC2E4\uD328 \u2014 configureStorage()\uAC00 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
3
+
4
+ \uC571 \uCD08\uAE30\uD654 \uC2DC\uC810(main.tsx \uB4F1)\uC5D0 \uC544\uB798\uC640 \uAC19\uC774 \uD55C \uBC88 \uD638\uCD9C\uD558\uC138\uC694:
5
+
6
+ import { configureStorage } from '@ihabdevteam/core'
7
+
8
+ configureStorage({
9
+ resolveUrl: (path) =>
10
+ supabase.storage.from(BUCKET).createSignedUrl(path, 3600)
11
+ .then(({ data }) => data?.signedUrl ?? null),
12
+ download: (path) =>
13
+ supabase.storage.from(BUCKET).download(path)
14
+ .then(({ data, error }) => { if (error) throw error; return data }),
15
+ })
16
+
17
+ \uC124\uCE58 \uBA85\uB839\uC5B4 (\uC2A4\uD1A0\uB9AC\uC9C0 SDK \uBBF8\uC124\uCE58 \uC2DC):
18
+ npm install @supabase/supabase-js
19
+ pnpm add @supabase/supabase-js
20
+ `),this.name="StorageNotConfiguredError"}};function Tt(e){Et(e)}function At(e,n){if(!e)return null;const t=ee();return t?.resolvePath?t.resolvePath(e,n):n?`${n}/${e}.mp3`:null}async function ln(e){if(!e)return!1;const n=ee();if(!n)throw new Me("fileExists");if(n.exists)return n.exists(e);try{return await n.resolveUrl(e)!==null}catch{return!1}}async function cn(e){if(!e)return null;const n=ee();if(!n)throw new Me("getSignedOrPublicUrl");try{return await n.resolveUrl(e)}catch{return null}}async function pt(e){const n=ee();if(!n)throw new Me("downloadSound");return n.download(e)}function wt(){return ee()?.noiseBaseUrl??"/sounds/noise"}const $e="__ihab_core_tts_config__";function bt(e){globalThis[$e]=e}function Bt(){return globalThis[$e]?.urlResolver??null}function _t(){return globalThis[$e]?.fallbackUrlResolver??null}const Nt=new Map;function Lt(){Nt.clear()}const Cn="__ihab_core_pronunciation_resolver__";function Rt(e){globalThis[Cn]=e}function jt(){return globalThis[Cn]??null}let ne=null;const gn=new WeakMap;function Ot(){if(ne)return ne;try{const e=window.AudioContext||window.webkitAudioContext;return e?(ne=new e,ne):null}catch{return null}}function kt(){try{ne?.resume()}catch{}}function It(e){if(!e)return null;const n=gn.get(e);if(n)return n;const t=Ot();if(!t)return null;try{const o=t.createMediaElementSource(e),r=t.createAnalyser();return r.fftSize=1024,r.smoothingTimeConstant=.6,o.connect(r),o.connect(t.destination),gn.set(e,r),r}catch{return null}}function Pt(e,n){e.getFloatTimeDomainData(n);let t=0;for(let o=0;o<n.length;o++){const r=n[o];t+=r*r}return Math.sqrt(t/n.length)}const dn="__ihab_core_image_config__";function Mt(e){globalThis[dn]=e}function fn(){return globalThis[dn]??null}const te="word_image_existence_map_v1";let I=null;const Te=new Map;function oe(){if(I)return I;try{const e=typeof localStorage<"u"?localStorage.getItem(te):null;I=e?JSON.parse(e):{}}catch{I={}}return I}let ve=null;function $t(){ve||(ve=setTimeout(()=>{ve=null;try{typeof localStorage<"u"&&I&&localStorage.setItem(te,JSON.stringify(I))}catch{}},200))}function Ae(e,n){return`${e}_${n??1}`}async function hn(e,n){const t=oe(),o=Ae(e,n);if(o in t)return t[o];if(Te.has(o))return Te.get(o);const r=fn();if(!r)return!1;const i=r(e,n);if(!i)return!1;const u=fetch(i,{method:"HEAD",signal:AbortSignal.timeout(8e3)}).then(a=>a.ok).catch(()=>!1).then(a=>(t[o]=a,$t(),Te.delete(o),a));return Te.set(o,u),u}function vt(e,n){const t=oe(),o=Ae(e,n);return o in t?t[o]:void 0}async function Gt(e,n={}){const{force:t=!1,concurrency:o=16,onProgress:r}=n,i=oe(),u=t?Array.from(new Set(e)):Array.from(new Set(e)).filter(l=>!(Ae(l)in i));let a=0;if(u.length>0){let l=0;const s=Array.from({length:Math.min(o,u.length)},async()=>{for(;l<u.length;){const C=l++,c=u[C],g=Ae(c);if(!t&&g in i){a++,r?.(a,u.length);continue}try{await hn(c)}catch{}a++,r?.(a,u.length)}});await Promise.all(s)}try{typeof localStorage<"u"&&I&&localStorage.setItem(te,JSON.stringify(I))}catch{}return{checked:u.length,cached:Object.keys(i).length,total:e.length}}function Ft(){const e=oe(),n=Object.values(e);return n.length===0?null:{total:n.length,exists:n.filter(Boolean).length}}function xt(e){const n=oe();Object.assign(n,e);try{typeof localStorage<"u"&&localStorage.setItem(te,JSON.stringify(n))}catch{}}function Wt(){I={};try{typeof localStorage<"u"&&localStorage.removeItem(te)}catch{}}const p=["\u3131","\u3132","\u3134","\u3137","\u3138","\u3139","\u3141","\u3142","\u3143","\u3145","\u3146","\u3147","\u3148","\u3149","\u314A","\u314B","\u314C","\u314D","\u314E"],_=["\u314F","\u3150","\u3151","\u3152","\u3153","\u3154","\u3155","\u3156","\u3157","\u3158","\u3159","\u315A","\u315B","\u315C","\u315D","\u315E","\u315F","\u3160","\u3161","\u3162","\u3163"],L=["","\u3131","\u3132","\u3133","\u3134","\u3135","\u3136","\u3137","\u3139","\u313A","\u313B","\u313C","\u313D","\u313E","\u313F","\u3140","\u3141","\u3142","\u3144","\u3145","\u3146","\u3147","\u3148","\u314A","\u314B","\u314C","\u314D","\u314E"];function h(e){if(!e)return null;const n=e.charCodeAt(0)-44032;return n<0||n>=11172?null:{cho:Math.floor(n/588),jung:Math.floor(n%588/28),jong:n%28}}function Ht(){const e=new Map;return n=>{let t=e.get(n);return t||(t=[...n].map(o=>h(o)),e.set(n,t)),t}}function H(e,n,t=0){return String.fromCharCode(44032+(e*21+n)*28+t)}function Yt(e,n){if(!e||!n||e===n||e.length!==n.length)return"random";let t=0,o=null;for(let r=0;r<e.length;r++){const i=h(e[r]),u=h(n[r]);if(!i||!u)return"random";if(i.cho===u.cho&&i.jung===u.jung&&i.jong===u.jong)continue;t++;const a=i.cho!==u.cho,l=i.jung!==u.jung,s=i.jong!==u.jong;(a?1:0)+(l?1:0)+(s?1:0)>1?o="multi":a?o="cho":l?o="jung":o="jong"}return t!==1?"random":o==="cho"?"cho":o==="jung"?"jung":o==="jong"?"jong":"random"}function mn(e){const n=h(e[0]||"");return n?p[n.cho]:""}function Sn(e){return[...e].map(n=>{const t=h(n);return t?p[t.cho]:n}).join("")}function Dn(e){return!!e&&[...e].every(n=>p.includes(n))}function Kt(e,n){return n?Dn(n)?Sn(e).includes(n):e.toLowerCase().includes(n.toLowerCase()):!0}function pe(e,n){if(!n)return!0;const t=[...n],o=a=>p.includes(a),r=a=>_.includes(a),i=t.map(a=>o(a)?"cho":r(a)?"jung":h(a)?"syl":"other");if(i.includes("other"))return e.includes(n);const u=[...e];for(let a=0;a+t.length<=u.length;a++){let l=!0;for(let s=0;s<t.length;s++){const C=u[a+s],c=i[s];if(c==="cho"){if(mn(C)!==t[s]){l=!1;break}}else if(c==="jung"){const g=h(C);if(!g||_[g.jung]!==t[s]){l=!1;break}}else{const g=h(t[s]);if(g&&g.jong===0){const m=h(C);if(!m||m.cho!==g.cho||m.jung!==g.jung){l=!1;break}}else if(C!==t[s]){l=!1;break}}}if(l)return!0}return!1}const Ge={3:["\u3131","\u3145"],5:["\u3134","\u3148"],6:["\u3134","\u314E"],9:["\u3139","\u3131"],10:["\u3139","\u3141"],11:["\u3139","\u3142"],12:["\u3139","\u3145"],13:["\u3139","\u314C"],14:["\u3139","\u314D"],15:["\u3139","\u314E"],18:["\u3142","\u3145"]},yn=Object.fromEntries(Object.entries(Ge).map(([e,n])=>[n.join(""),L[Number(e)]]));function Ut(e,n){if(!e||!n)return!1;for(const t of e){const o=h(t);if(o&&p[o.cho]===n)return!0}return!1}function Vt(e,n){if(!e||!n)return!1;for(const t of e){const o=h(t);if(o&&_[o.jung]===n)return!0}return!1}function Jt(e,n){if(!e||!n)return!1;for(const t of e){const o=h(t);if(!o||o.jong<=0)continue;if(L[o.jong]===n)return!0;const r=Ge[o.jong];if(r&&r.includes(n))return!0}return!1}function qt(e){if(!e)return 0;let n=0;for(const t of e)h(t)&&n++;return n}function Qt(e){if(!e)return!1;let n=!1;for(const t of e){const o=h(t);if(o&&(n=!0,o.jong>0))return!1}return n}function zt(e,n){if(e.jong<=0)return!1;if(n.includes(L[e.jong]))return!0;const t=Ge[e.jong];return!!t&&t.some(o=>n.includes(o))}function Zt(e,n,t){if(!e)return!1;const o=[...e],r=i=>{const u=h(o[i]);if(!u||n.cho&&!n.cho.includes(p[u.cho])||n.jung&&!n.jung.includes(_[u.jung]))return!1;if(n.jongNone){if(u.jong>0)return!1}else if(n.jong&&!zt(u,n.jong))return!1;return!0};if(t==="head")return r(0);if(t==="tail")return r(o.length-1);if(t==="mid"){for(let i=1;i<o.length-1;i++)if(r(i))return!0;return!1}for(let i=0;i<o.length;i++)if(r(i))return!0;return!1}function En(e){return e.includes(",")||e.includes("_")}function Tn(e){if(e==="")return[{kind:"any"}];if(e.includes("_")){const n=[...e];if(n.length>4)return[{kind:"invalid"}];const t=n[0]??"_",o=n[1]??"_";let r=n.slice(2).join("");if(r.length===2){const i=yn[r];if(!i)return[{kind:"invalid"}];r=i}return[{kind:"template",cho:t,jung:o,jong:r||"_"}]}return[...e].map(n=>h(n)?{kind:"syllable",ch:n}:p.includes(n)?{kind:"cho",jamo:n}:_.includes(n)?{kind:"jung",jamo:n}:{kind:"invalid"})}function Xt(e,n){switch(n.kind){case"any":return!0;case"syllable":{const t=h(n.ch);if(!t)return e===n.ch;if(t.jong===0){const o=h(e);return!!o&&o.cho===t.cho&&o.jung===t.jung}return e===n.ch}case"cho":{const t=h(e);return!!t&&p[t.cho]===n.jamo}case"jung":{const t=h(e);return!!t&&_[t.jung]===n.jamo}case"template":{const t=h(e);return!(!t||n.cho!=="_"&&p[t.cho]!==n.cho||n.jung!=="_"&&_[t.jung]!==n.jung||n.jong!=="_"&&L[t.jong]!==n.jong)}case"invalid":return!1}}function An(e,n){const t=n.split(",").flatMap(r=>Tn(r.trim()));if(t.length===0)return!0;const o=[...e];if(o.length<t.length)return!1;for(let r=0;r+t.length<=o.length;r++)if(t.every((i,u)=>Xt(o[r+u],i)))return!0;return!1}function eo(e){const n=e.split(",").flatMap(i=>Tn(i.trim())),t=new Set,o=new Set,r=new Set;for(const i of n)switch(i.kind){case"cho":t.add(i.jamo);break;case"jung":o.add(i.jamo);break;case"template":i.cho!=="_"&&t.add(i.cho),i.jung!=="_"&&o.add(i.jung),i.jong!=="_"&&r.add(i.jong);break;case"syllable":{const u=h(i.ch);u&&(t.add(p[u.cho]),o.add(_[u.jung]),u.jong!==0&&r.add(L[u.jong]));break}}return t.size===0&&o.size===0&&r.size===0?null:{cho:t.size?[...t]:null,jung:o.size?[...o]:null,jong:r.size?[...r]:null}}function no(e){return!!h(e)||p.includes(e)||_.includes(e)}function to(e){const n=e.trim();if(!n)return{ok:!0};for(const t of n.split(",")){const o=t.trim();if(o!==""){if(o.includes("_")){const r=[...o];if(r.length>4)return{ok:!1};const i=r[0],u=r[1],a=r.slice(2).join(""),l=i===void 0||i==="_"||p.includes(i),s=u===void 0||u==="_"||_.includes(u),C=a===""||a==="_"||L.filter(Boolean).includes(a)||!!yn[a];if(l&&s&&C)continue;return{ok:!1}}if(![...o].every(no))return{ok:!1}}}return{ok:!0}}p.length,_.length,L.length;function oo(e,n){const t=n.trim();if(!t||!/[^\s,_]/.test(t))return e;if(En(t))return e.filter(u=>An(u.word,t));const o=e.filter(u=>pe(u.word,t)||pe(u.pronunciation??"",t)),r=[...t].length,i=u=>!!u&&pe(u.slice(0,r),t);return o.map(u=>({w:u,rank:i(u.word)||i(u.pronunciation??"")?0:1})).sort((u,a)=>u.rank-a.rank).map(u=>u.w)}const Fe="word_pair_index_v2",xe="word_pair_index_sig_v2";let P=null,ue=null;function pn(){try{if(typeof localStorage>"u")return null;const e=localStorage.getItem(Fe),n=localStorage.getItem(xe);return!e||!n?null:{index:JSON.parse(e),sig:n}}catch{return null}}function uo(e,n){try{if(typeof localStorage>"u")return;localStorage.setItem(Fe,JSON.stringify(e)),localStorage.setItem(xe,n)}catch{}}function ro(e){const n=e.map(o=>`${o.word}|${o.pron??""}`).sort();let t=0;for(const o of n)for(let r=0;r<o.length;r++)t=(t<<5)-t+o.charCodeAt(r)|0;return`${n.length}-${t}`}async function io(e,n){const t=new Set,o=[];for(const s of e){if(!s.word||t.has(s.word))continue;const C=s.pron||s.word,c=Array.from(C).map(h);c.some(g=>g===null)||c.length===Array.from(s.word).length&&(t.add(s.word),o.push({word:s.word,syls:c}))}const r={},i=o.length,u=new Map;for(const s of o){const C=s.syls.length;u.has(C)||u.set(C,[]),u.get(C).push(s)}let a=0;const l=["cho","jung","jong"];for(const s of u.values()){const C=s[0].syls.length;for(let c=0;c<C;c++)for(const g of l){const m=new Map;for(const S of s){let D="";for(let f=0;f<C;f++){f>0&&(D+="~");const d=S.syls[f];f===c?g==="cho"?D+=`*:${d.jung}:${d.jong}`:g==="jung"?D+=`${d.cho}:*:${d.jong}`:D+=`${d.cho}:${d.jung}:*`:D+=`${d.cho}:${d.jung}:${d.jong}`}let y=m.get(D);y||(y=[],m.set(D,y)),y.push(S)}for(const S of m.values())if(!(S.length<2))for(let D=0;D<S.length;D++){const y=S[D];for(let f=D+1;f<S.length;f++){const d=S[f];y.syls[c][g]!==d.syls[c][g]&&(r[y.word]||(r[y.word]={cho:[],jung:[],jong:[]}),r[d.word]||(r[d.word]={cho:[],jung:[],jong:[]}),r[y.word][g].push(d.word),r[d.word][g].push(y.word))}}}a+=s.length,n?.(a,i),await new Promise(c=>setTimeout(c,0))}return i>0&&n?.(i,i),r}async function ao(e,n={}){const t=ro(e);if(!n.force){if(P&&ue===t)return P;const r=pn();if(r&&r.sig===t)return P=r.index,ue=t,P}const o=await io(e,n.onProgress);return P=o,ue=t,uo(o,t),o}function wn(){if(P)return P;const e=pn();return e?(P=e.index,ue=e.sig,P):null}function so(){P=null,ue=null;try{typeof localStorage<"u"&&(localStorage.removeItem(Fe),localStorage.removeItem(xe))}catch{}}const We={cho:p,jung:_,jong:L},j=e=>Array.isArray(e)?e.length>0:!!e;function He(e,n){if(e.length!==n.length)return!1;for(let t=0;t<e.length;t++){const o=e[t],r=n[t];if(!(!o||!r)&&(o.cho!==r.cho&&p[o.cho]==="\u3147"!=(p[r.cho]==="\u3147")||o.jong!==r.jong&&o.jong===0!=(r.jong===0)))return!0}return!1}function bn(e,n,t){const o=t.pronOf(e),r=t.decompOf,i=t.sameStructureOnly&&r?r(o):null,u=[];for(const a of n)a!==e&&(t.okSet&&!t.okSet.has(a)||t.pronOf(a)!==o&&(i&&r&&He(i,r(t.pronOf(a)))||u.push(a)));return u}function lo(e,n,t){const o=n?.[e];if(!o)return[];const r=t.kind?o[t.kind]??[]:[...o.cho??[],...o.jung??[],...o.jong??[]];return bn(e,r,t)}function co(e,n,t,o,r,i,u){const a=["cho","jung","jong"].filter(g=>j(e[g])),l={};for(const g of a){const m=e[g];l[g]=new Set(Array.isArray(m)?m:[m])}const s=r==="pron",C=new Map;for(const g of n){const m=t(i(g));if(m.some(f=>!f))continue;let S=m;if(!s&&(S=t(g),S.length!==m.length||S.some(f=>!f)))continue;const D=m.length,y=C.get(D);y?y.push({w:g,dPron:m,dPos:S}):C.set(D,[{w:g,dPron:m,dPos:S}])}const c=new Map;for(const[g,m]of C){const S=new Map,D=(y,f)=>{const d=y.dPos[f];return d!=null&&a.every(E=>l[E].has(We[E][d[E]]))};for(const y of m){let f;if(u==="head")f=D(y,0)?0:-1;else if(u==="tail")f=D(y,g-1)?g-1:-1;else if(u==="mid"){f=-1;for(let E=1;E<g-1;E++)if(D(y,E)){f=E;break}}else f=y.dPos.findIndex(E=>E!=null&&a.every(T=>l[T].has(We[T][E[T]])));if(f<0)continue;const d=S.get(f);d?d.push(y):S.set(f,[y])}for(const[y,f]of S){const d=new Set(a.map(w=>y+":"+w)),E=w=>{let B="";for(let b=0;b<g;b++){const O=w[b];for(const W of["cho","jung","jong"])B+=(d.has(b+":"+W)?"*":O[W])+"."}return B},T=new Map;for(const w of m){const B=E(w.dPron),b=T.get(B);b?b.push(w):T.set(B,[w])}for(const w of f){const B=T.get(E(w.dPron))??[],b=[];for(const O of B){if(O.w===w.w)continue;let W=!0;for(const A of a){const v=w.dPron[y][A],K=O.dPron[y][A];if(K===v){W=!1;break}if(s&&l[A].has(We[A][K])){W=!1;break}}W&&(o&&He(w.dPron,O.dPron)||b.push(O.w))}c.set(w.w,b)}}}return c}const we=0,Bn=1,U=2,Ye=3,Co=4,be=5,Ke=6,Be=7,go=8,_n=9,re=10,fo=11,ie=12,ho=13,ae=14,_e=15,Ne=16,se=17,mo=18,M=0,G=1,So=3,V=4,Ue=5,Ve=6,$=7,N=8,Nn=9,Ln=10,Le=11,Rn=12,Je=13,Re=15,je=16,F=17,jn=18,qe=21,On=27,Do=20,yo={1:we,2:Bn,4:U,7:Ye,8:be,16:Ke,17:Be,19:_n,20:re,22:ie,23:ae,24:_e,25:Ne,26:se},Eo={[So]:[G,re],[Ue]:[V,ie],[Nn]:[N,we],[Ln]:[N,Ke],[Le]:[N,Be],[Rn]:[N,re],[Je]:[N,Ne],14:[N,se],[jn]:[F,re]},To={[Ve]:U,[Re]:be},Qe={2:G,24:G,3:G,9:G,5:V,6:V,19:$,20:$,22:$,23:$,25:$,27:$,11:N,12:N,13:N,15:N,10:je,14:F,18:F,26:F},kn={[we]:_e,[Ye]:Ne,[Be]:se,[ie]:ae},In={[we]:Bn,[Ye]:Co,[Be]:go,[_n]:re,[ie]:ho},Ao=new Set([Ue,Ln,Le,Rn,Je,Re,jn]),po=new Set(["\uBC1F"]);function wo(e){const n=(e??"").trim();if(!n)return"";const t=[...n],o=t.map(h);if(o.some(i=>i===null))return n;const r=o;for(let i=0;i<r.length;i++){const u=r[i],a=r[i+1],l=u.jong;if(!a){u.jong=Qe[u.jong]??u.jong;break}if(u.jong===M)continue;if(a.cho===fo){if(a.jung===Do){if(u.jong===$){u.jong=M,a.cho=ie;continue}if(u.jong===25){u.jong=M,a.cho=ae;continue}if(u.jong===Je){u.jong=N,a.cho=ae;continue}}if(u.jong===On){u.jong=M;continue}const C=To[u.jong];if(C!==void 0){u.jong=M,a.cho=C;continue}const c=Eo[u.jong];if(c){u.jong=c[0],a.cho=c[1];continue}const g=yo[u.jong];g!==void 0&&(u.jong=M,a.cho=g);continue}if((u.jong===On||u.jong===Ve||u.jong===Re)&&kn[a.cho]!==void 0){a.cho=kn[a.cho],u.jong=u.jong===Ve?V:u.jong===Re?N:M;continue}if(a.cho===mo){if(u.jong===Ue){u.jong=V,a.cho=ae;continue}if(u.jong===Nn){u.jong=N,a.cho=_e;continue}if(u.jong===Le){u.jong=N,a.cho=se;continue}const C=Qe[u.jong]??u.jong;if(C===G){u.jong=M,a.cho=_e;continue}if(C===$){u.jong=M,a.cho=Ne;continue}if(C===F){u.jong=M,a.cho=se;continue}}let s=Qe[u.jong]??u.jong;l===Le&&po.has(t[i])&&(s=F),u.jong=s,In[a.cho]!==void 0&&(s===G||s===$||s===F||Ao.has(l))&&(a.cho=In[a.cho]),(a.cho===U||a.cho===Ke)&&(u.jong===G?u.jong=qe:u.jong===$?u.jong=V:u.jong===F&&(u.jong=je)),a.cho===be?u.jong===V?u.jong=N:u.jong===je||u.jong===qe?a.cho=U:u.jong===G?(u.jong=qe,a.cho=U):u.jong===F&&(u.jong=je,a.cho=U):u.jong===N&&a.cho===U&&(a.cho=be)}return r.map(i=>H(i.cho,i.jung,i.jong)).join("")}const bo={\u3131:"\u3131",\u3132:"\u3131",\u314B:"\u3131",\u3133:"\u3131",\u313A:"\u3131",\u3134:"\u3134",\u3135:"\u3134",\u3136:"\u3134",\u3137:"\u3137",\u3145:"\u3137",\u3146:"\u3137",\u3148:"\u3137",\u314A:"\u3137",\u314C:"\u3137",\u314E:"\u3137",\u3139:"\u3139",\u313C:"\u3139",\u313D:"\u3139",\u313E:"\u3139",\u3140:"\u3139",\u3141:"\u3141",\u313B:"\u3141",\u3142:"\u3142",\u314D:"\u3142",\u313F:"\u3142",\u3144:"\u3142",\u3147:"\u3147"};function Pn(e){return bo[e]??e}const q=/[ㄱ-ㅎ]/,Bo=/[ㅏ-ㅣ]/;function le(e){for(let n=e.length-1;n>=0;n--){const t=e[n],o=t.charCodeAt(0);if(o>=44032&&o<=55203||q.test(t)||Bo.test(t))return t}return null}function Mn(e){const n=le(e);if(!n)return"\uAC00";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uC774":"\uAC00":q.test(n)?"\uC774":"\uAC00"}function _o(e){return`${e}${Mn(e)}`}function $n(e){const n=le(e);if(!n)return"\uB97C";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uC744":"\uB97C":q.test(n)?"\uC744":"\uB97C"}function No(e){return`${e}${$n(e)}`}function vn(e){const n=le(e);if(!n)return"\uB294";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uC740":"\uB294":q.test(n)?"\uC740":"\uB294"}function Lo(e){return`${e}${vn(e)}`}function Gn(e){const n=le(e);if(!n)return"\uC640";const t=n.charCodeAt(0);return t>=44032&&t<=55203?(t-44032)%28!==0?"\uACFC":"\uC640":q.test(n)?"\uACFC":"\uC640"}function Ro(e){return`${e}${Gn(e)}`}function Fn(e){const n=le(e);if(!n)return"\uB85C";const t=n.charCodeAt(0);if(t>=44032&&t<=55203){const o=(t-44032)%28;return o===0||o===8?"\uB85C":"\uC73C\uB85C"}return n==="\u3139"?"\uB85C":q.test(n)?"\uC73C\uB85C":"\uB85C"}function jo(e){return`${e}${Fn(e)}`}function Oo(e,n,t){const o=e.slice(),[r]=o.splice(n,1);return o.splice(t,0,r),o}function R(e,n=Math.random){const t=e.slice();for(let o=t.length-1;o>0;o--){const r=Math.floor(n()*(o+1));[t[o],t[r]]=[t[r],t[o]]}return t}function x(e,n,t=Math.random){return!Array.isArray(e)||e.length===0||n<=0?[]:n>=e.length?R(e,t):R(e,t).slice(0,n)}const xn={SAME_SOUND_PICK:{difficulty:!0,choseong:!0,group:"discrimination"},SAME_OR_DIFF:{difficulty:!0,choseong:!0,group:"discrimination"},HEAR_AND_PICK_SAME:{difficulty:!0,choseong:!0,group:"discrimination"},HEAR_AND_PICK_INCLUDED:{difficulty:!0,choseong:!0,group:"discrimination"},STARTS_WITH_SAME_SOUND:{difficulty:!1,choseong:!0,group:"discrimination"},LISTEN_AND_REMEMBER_ORDER:{difficulty:!1,choseong:!0,group:"attention"},MERGE_2_SYLLABLES:{difficulty:!1,choseong:!0,group:"synthesis"},MERGE_3_SYLLABLES:{difficulty:!1,choseong:!0,group:"synthesis"},MERGE_2_PHONEMES:{difficulty:!1,choseong:!0,group:"synthesis"},MERGE_3_PHONEMES:{difficulty:!1,choseong:!0,group:"synthesis"},DROP_1_FROM_2SYLL:{difficulty:!1,choseong:!0,group:"deletion"},DROP_1_FROM_3SYLL:{difficulty:!1,choseong:!0,group:"deletion"},DROP_PART_FROM_COMPOUND:{difficulty:!1,choseong:!0,group:"deletion"},DROP_FINAL_CONSONANT_FROM_1SYLL:{difficulty:!1,choseong:!0,group:"deletion"},REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:{difficulty:!1,choseong:!0,group:"deletion"},CHANGE_1_SYLL_IN_2SYLL:{difficulty:!0,choseong:!0,group:"substitution"},CHANGE_1_SYLL_IN_3SYLL:{difficulty:!0,choseong:!0,group:"substitution"},CHANGE_1_PHONEME_IN_1SYLL:{difficulty:!1,choseong:!0,group:"substitution"},CHANGE_1_PHONEME_IN_2SYLL:{difficulty:!0,choseong:!0,group:"substitution"}};function ko(e){const n=e?xn[e]?.group:void 0;return n==="synthesis"||n==="deletion"||n==="substitution"?n:null}const Io=p.indexOf("\u3147"),Wn={DROP_FINAL_CONSONANT_FROM_1SYLL:{syllables:1,syllable:e=>e.jong>0},REMOVE_CONSONANT_AND_IDENTIFY_PHONEME:{syllables:1,syllable:e=>e.jong===0&&e.cho!==Io},MERGE_2_SYLLABLES:{syllables:2,syllable:()=>!0},MERGE_3_SYLLABLES:{syllables:3,syllable:()=>!0},MERGE_2_PHONEMES:{syllables:1,syllable:e=>e.jong===0},MERGE_3_PHONEMES:{syllables:1,syllable:e=>e.jong>0}},Po=new Set([]);function Mo(e){return e in Wn}function $o(e,n){const t=Wn[e];if(!t)return!0;const o=[...n];if(o.length!==t.syllables)return!1;const r=h(o[0]);return!!r&&t.syllable(r)}function vo(e){return Po.has(e)}function Go(e){const n=e.charCodeAt((e.length||1)-1)||0;return n<44032||n>55203||(n-44032)%28===0?"\uC640":"\uACFC"}function ze(e){const n=e.charCodeAt((e.length||1)-1)||0;return n<44032||n>55203||(n-44032)%28===0?"\uB97C":"\uC744"}function Hn(e){const n=e.charCodeAt((e.length||1)-1)||0;if(n<44032||n>55203)return"\uB85C";const t=(n-44032)%28;return t===0||t===8?"\uB85C":"\uC73C\uB85C"}function Yn(e){const n=e.charAt((e.length||1)-1),t=n.charCodeAt(0)||0;return t>=44032&&t<=55203?(t-44032)%28===0?"\uAC00":"\uC774":/[ㄱ-ㅎ]/.test(n)?"\uC774":"\uAC00"}const Kn={\u3131:"\uAE30\uC5ED",\u3132:"\uC30D\uAE30\uC5ED",\u3134:"\uB2C8\uC740",\u3137:"\uB514\uADFF",\u3138:"\uC30D\uB514\uADFF",\u3139:"\uB9AC\uC744",\u3141:"\uBBF8\uC74C",\u3142:"\uBE44\uC74D",\u3143:"\uC30D\uBE44\uC74D",\u3145:"\uC2DC\uC637",\u3146:"\uC30D\uC2DC\uC637",\u3147:"\uC774\uC751",\u3148:"\uC9C0\uC752",\u3149:"\uC30D\uC9C0\uC752",\u314A:"\uCE58\uC753",\u314B:"\uD0A4\uC754",\u314C:"\uD2F0\uC755",\u314D:"\uD53C\uC756",\u314E:"\uD788\uC757",\u3133:"\uAE30\uC5ED\uC2DC\uC637",\u3135:"\uB2C8\uC740\uC9C0\uC752",\u3136:"\uB2C8\uC740\uD788\uC757",\u313A:"\uB9AC\uC744\uAE30\uC5ED",\u313B:"\uB9AC\uC744\uBBF8\uC74C",\u313C:"\uB9AC\uC744\uBE44\uC74D",\u313D:"\uB9AC\uC744\uC2DC\uC637",\u313E:"\uB9AC\uC744\uD2F0\uC755",\u313F:"\uB9AC\uC744\uD53C\uC756",\u3140:"\uB9AC\uC744\uD788\uC757",\u3144:"\uBE44\uC74D\uC2DC\uC637",\u314F:"\uC544",\u3150:"\uC560",\u3151:"\uC57C",\u3152:"\uC598",\u3153:"\uC5B4",\u3154:"\uC5D0",\u3155:"\uC5EC",\u3156:"\uC608",\u3157:"\uC624",\u3158:"\uC640",\u3159:"\uC65C",\u315A:"\uC678",\u315B:"\uC694",\u315C:"\uC6B0",\u315D:"\uC6CC",\u315E:"\uC6E8",\u315F:"\uC704",\u3160:"\uC720",\u3161:"\uC73C",\u3162:"\uC758",\u3163:"\uC774"};function Fo(e){if([...e].length!==1)return[e];const n=h(e);if(!n)return[e];const t=[p[n.cho],_[n.jung]];return n.jong!==0&&t.push(L[n.jong]),t}function Un(e,n=!1){const t=e.filter(Boolean);if(t.length<2)return"";const o=a=>Kn[a]??a,r=t.slice(0,-1).map(a=>`"${a}"${Go(o(a))}`).join(" "),i=t[t.length-1],u=`"${i}"${ze(o(i))}`;return`${r} ${u} \uD569\uCE58\uBA74 \uC5B4\uB5A4 ${n?"\uC18C\uB9AC":"\uB2E8\uC5B4"}\uAC00 \uB418\uB098\uC694?`}function xo(e,n){return Un(n,e==="MERGE_2_PHONEMES"||e==="MERGE_3_PHONEMES")}function Wo(e,n){const t=String(n?.word??n?.original??""),o=String(n?.changedFrom??""),r=String(n?.changedTo??"");return e==="CHANGE_1_PHONEME_IN_1SYLL"?`"${t}"${ze(t)} "${r}"${Hn(r)} \uBC14\uAFB8\uBA74 \uBB34\uC5C7\uC774 \uB418\uB098\uC694?`:`"${t}"\uC5D0\uC11C "${o}"${ze(o)} "${r}"${Hn(r)} \uBC14\uAFB8\uBA74 \uBB34\uC5C7\uC774 \uB418\uB098\uC694?`}function Ho(e,n){const t=String(n?.word??n?.original??n?.base??""),o=String(n?.dropped??"");if(e==="DROP_FINAL_CONSONANT_FROM_1SYLL")return`"${t}"\uC5D0\uC11C \uBC1B\uCE68\uC774 \uC5C6\uC5B4\uC9C0\uBA74 \uC5B4\uB5A4 \uB9D0\uC774 \uB418\uB098\uC694?`;if(e==="REMOVE_CONSONANT_AND_IDENTIFY_PHONEME"){const r=String(n?.missingConsonant??"");return`"${t}"\uC5D0\uC11C "${r}"${Yn(r)} \uC5C6\uC5B4\uC9C0\uBA74 \uC5B4\uB5A4 \uC18C\uB9AC\uAC00 \uB418\uB098\uC694?`}return`"${t}"\uC5D0\uC11C "${o}"${Yn(o)} \uC5C6\uC5B4\uC9C0\uBA74 \uC5B4\uB5A4 \uB9D0\uC774 \uB418\uB098\uC694?`}function Yo(e,n,t){switch(ko(e)){case"synthesis":return xo(e,t);case"substitution":return Wo(e,n);case"deletion":return Ho(e,n);default:return""}}function Ko(e){return e.replace(/"([ㄱ-ㅣ])"(으로|와|과|을|를|이|가|은|는|로)?/g,(n,t,o)=>{const r=Kn[t];if(!r)return n;if(!o)return`"${r}"`;const i=(r.charCodeAt(r.length-1)-44032)%28,u=i!==0;let a=o;return o==="\uC640"||o==="\uACFC"?a=u?"\uACFC":"\uC640":o==="\uC744"||o==="\uB97C"?a=u?"\uC744":"\uB97C":o==="\uC774"||o==="\uAC00"?a=u?"\uC774":"\uAC00":o==="\uC740"||o==="\uB294"?a=u?"\uC740":"\uB294":(o==="\uC73C\uB85C"||o==="\uB85C")&&(a=i===0||i===8?"\uB85C":"\uC73C\uB85C"),`"${r}"${a}`})}const Uo=e=>e==null?[]:Array.isArray(e)?e:[e];function Vn(e){if([...e].length!==1)return"";const n=h(e);if(!n)return"";const t=Pn(L[n.jong]),o=t===""?0:L.indexOf(t);return H(n.cho,n.jung,o<0?0:o)}function Ze(e,n){return n.get(e)||Vn(e)||e}function Oe(e){return e?j(e.cho)?"cho":j(e.jung)?"jung":j(e.jong)?"jong":null:null}function J(e,n){const t=(o,r)=>!j(o)||Uo(o).includes(r);return t(n.cho,p[e.cho])&&t(n.jung,_[e.jung])&&t(n.jong,L[e.jong])}function Q(e,n,t){const o=[...e];if(t!=="pron")return o.map(i=>h(i));const r=[...n.get(e)||e];return r.length!==o.length?o.map(i=>h(i)):r.map(i=>h(i))}function z(e,n,t,o,r){const i=n==="cho"?p:n==="jung"?_:L,u=e[n],a=[],l=new Set([Ze(t,r)]),s=R(i.map((C,c)=>c).filter(C=>C!==u&&(n!=="cho"||i[C]!=="\u3147")&&(n!=="jong"||C!==0)));for(const C of s){if(a.length>=o)break;const c=n==="cho"?H(C,e.jung,e.jong):n==="jung"?H(e.cho,C,e.jong):H(e.cho,e.jung,C),g=Ze(c,r);l.has(g)||(l.add(g),a.push(c))}return a}function Vo(e,n,t,o,r,i=null){const u=[...e];if(u.length!==2)return null;const a=u.map(c=>h(c));if(a.some(c=>!c))return null;const l=Q(e,t,o);if(l.some(c=>!c))return null;const s=Oe(n);let C=s&&n?l.map((c,g)=>J(c,n)?g:-1).filter(c=>c>=0):[0,1];if(i!=null&&(C=C.filter(c=>c!==i)),!C.length)return null;for(const c of R(C)){const g=u[c];if(!r.has(g))continue;const m=z(a[c],s??"cho",g,40,t),S=[];for(const D of m)if(D!==g&&r.has(D)&&!S.includes(D)&&S.push(D),S.length>=2)break;if(!(S.length<2))return{question:e,distractors:[g,...S]}}return null}function Jo(e,n,t,o,r,i=null){const u=[...e];if(u.length!==3)return null;const a=u.map(c=>h(c));if(a.some(c=>!c))return null;const l=Q(e,t,o);if(l.some(c=>!c))return null;const s=Oe(n),C=s&&n?l.map((c,g)=>J(c,n)?g:-1).filter(c=>c>=0):[0,1,2];if(!C.length)return null;for(const c of R(C))for(const g of R([0,1,2].filter(m=>m!==c&&(i==null||m===i)))){const m=[0,1,2].filter(d=>d!==g),S=m.map(d=>u[d]).join("");if(!r.has(S))continue;const D=m.indexOf(c),y=z(a[c],s??"cho",u[c],40,t),f=[];for(const d of y){const E=m.map(w=>u[w]);E[D]=d;const T=E.join("");if(T!==S&&r.has(T)&&!f.includes(T)&&f.push(T),f.length>=2)break}if(!(f.length<2))return{question:e,distractors:[S,...f]}}return null}function qo(e,n,t,o,r,i=null){const u=[...e],a=u.length;if(a<2)return null;const l=[];for(let C=1;C<=a-1;C++)l.push({remain:u.slice(0,C).join(""),dropped:u.slice(C).join(""),droppedEnd:1}),l.push({remain:u.slice(a-C).join(""),dropped:u.slice(0,a-C).join(""),droppedEnd:0});const s=Oe(n);for(const{remain:C,dropped:c,droppedEnd:g}of R(l)){if(i!=null&&g!==i||C===e||!r.has(C)||!r.has(c))continue;const m=[...C],S=m.map(f=>h(f));if(S.some(f=>!f))continue;const D=Q(C,t,o);if(D.some(f=>!f))continue;const y=s&&n?D.map((f,d)=>J(f,n)?d:-1).filter(f=>f>=0):m.map((f,d)=>d);if(y.length)for(const f of R(y)){const d=z(S[f],s??"cho",m[f],40,t),E=[];for(const T of d){const w=[...m];w[f]=T;const B=w.join("");if(B!==C&&r.has(B)&&!E.includes(B)&&E.push(B),E.length>=2)break}if(E.length>=2)return{question:e,distractors:[C,...E]}}}return null}function Qo(e,n,t,o,r,i=null){if([...e].length!==1)return null;const u=h(t.get(e)||e);if(!u||u.jong===0)return null;const a=H(u.cho,u.jung,0),l=z({cho:u.cho,jung:u.jung,jong:0},"cho",a,2,t);return l.length<2?null:{question:e,distractors:[a,...l]}}const Xe=p.indexOf("\u3147");function zo(e,n,t,o,r,i=null){if([...e].length!==1)return null;const u=h(t.get(e)||e);if(!u||u.jong!==0||u.cho===Xe)return null;const a=H(Xe,u.jung,0),l=z({cho:Xe,jung:u.jung,jong:0},"jung",a,2,t);return l.length<2?null:{question:e,distractors:[a,...l]}}function Zo(e){const n=new Map;for(const t of e){const o=[...t],r=o.length;if(!(r<2||r>3))for(let i=0;i<r;i++){let u=r+"|"+i+"|";for(let l=0;l<r;l++)u+=l===i?"*":o[l];const a=n.get(u);a?a.push(t):n.set(u,[t])}}return n}function Xo(e,n,t,o,r,i=null,u=null,a=2){const l=[...e],s=l.length;if(s<2||s>3)return null;const C=l.map(d=>h(d));if(C.some(d=>!d))return null;const c=Q(e,t,o);if(c.some(d=>!d))return null;const g=d=>t.get(d)??d,m=g(e),S=!!n&&(j(n.cho)||j(n.jung)||j(n.jong)),D=!!u&&(j(u.cho)||j(u.jung)||j(u.jong)),y=d=>{let E=s+"|"+d+"|";for(let T=0;T<s;T++)E+=T===d?"*":l[T];return E};let f;if(i!=null){if(i>=s||S&&!J(c[i],n))return null;f=[i]}else S?f=c.map((d,E)=>J(d,n)?E:-1).filter(d=>d>=0):f=Array.from({length:s},(d,E)=>E);for(const d of R(f)){const E=r.get(y(d))??[],T=[],w=[];for(const A of E){if(A===e)continue;const v=[...A].map(Ee=>h(Ee)),K=C[d],De=v[d];if(!K||!De)continue;let ye=0;if(K.cho!==De.cho&&ye++,K.jung!==De.jung&&ye++,K.jong!==De.jong&&ye++,!(ye<a||g(A)===m))if(D){const Ee=Q(A,t,o)[d];Ee&&J(Ee,u)?T.push(A):w.push(A)}else T.push(A)}if(!T.length)continue;const B=R(T)[0],b=[],O=new Set([m,g(B)]),W=D?w:T.filter(A=>A!==B);for(const A of R(W)){const v=g(A);if(!O.has(v)&&(O.add(v),b.push(A),b.length>=2))break}if(!D&&b.length<2)for(const A of R(E)){if(A===e||A===B)continue;const v=g(A);if(!O.has(v)&&(O.add(v),b.push(A),b.length>=2))break}if(!(b.length<2))return{question:e,distractors:[B,...b]}}return null}function eu(e,n="\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"){if(e instanceof Error)return e.message||n;if(typeof e=="string")return e||n;if(e&&typeof e=="object"){const t=e;for(const o of[t.message,t.error_description,t.error])if(typeof o=="string"&&o)return o}return n}const Jn="\uB124\uD2B8\uC6CC\uD06C \uC5F0\uACB0\uC774 \uBD88\uC548\uC815\uD569\uB2C8\uB2E4. \uC5F0\uACB0 \uC0C1\uD0DC\uB97C \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.";function qn(e){return e?/failed to fetch|load failed|networkerror|network request failed|fetcherror/i.test(e):!1}function nu(e){return qn(e)?Jn:e}function tu(e,n){return e==="id"?void 0:`${e}|${n?"asc":"desc"}`}function ou(e){const[n,t]=e.split("|");return{key:n,asc:t==="asc"}}function uu(e){let n=e==null?"":String(e);return/^[=+\-@\t\r]/.test(n)&&(n=" "+n),/[",\n\r]/.test(n)?`"${n.replaceAll('"','""')}"`:n}function ru(e,n){const t=new Blob(["\uFEFF"+n],{type:"text/csv;charset=utf-8"}),o=URL.createObjectURL(t),r=document.createElement("a");r.href=o,r.download=e,r.click(),URL.revokeObjectURL(o)}const Qn="__ihab_core_word_pool__";function iu(){typeof window<"u"&&window.dispatchEvent(new CustomEvent("wordpool:update"))}function au(e,n){const t=new Map;for(const r of e)t.set(r.word,r);const o={entries:e,pairIndex:n??null,byWord:t};globalThis[Qn]=o,iu()}function zn(){return globalThis[Qn]??null}const Z=globalThis;function en(e,n){const t=o=>{};try{const o=n();o&&typeof o.catch=="function"&&o.catch(t)}catch(o){t(o)}}function su(e){Z.__ihabTrainingTimeLogger=e}function lu(e){en("time",()=>Z.__ihabTrainingTimeLogger?.(e))}function cu(e){Z.__ihabTrainingCompletionLogger=e}function Cu(e){en("completion",()=>Z.__ihabTrainingCompletionLogger?.(e))}function gu(e){Z.__ihabCrosswordLogger=e}function du(e){en("crossword",()=>Z.__ihabCrosswordLogger?.(e))}function k(e){return typeof e=="string"?e.trim()||null:typeof e=="number"?String(e):null}function Zn(e){for(const n of["correct","isCorrect","heard","judgement"])if(typeof e[n]=="boolean")return e[n];return e.score===1?!0:e.score===0?!1:null}function fu(e){return Array.isArray(e)?e.map((n,t)=>{const o=n??{};return{index:t,itemId:k(o.contextCode)??k(o.itemId)??k(o.itemCode)??k(o.id),question:k(o.question)??k(o.sentence)??k(o.word)??k(o.targetSyllable),answer:k(o.answer),selected:k(o.selectedText)??k(o.selected),correct:Zn(o)}}):[]}function hu(e){return e.filter(n=>n.correct===!1)}let Xn=null,et=null,nt=null;function mu(e){Xn=e}function Su(e){et=e}function Du(e){nt=e}async function yu(e,n){try{return await Xn?.(e,n)??null}catch{return null}}async function Eu(){try{return await et?.()??null}catch{return null}}async function Tu(e,n){try{return await nt?.(e,n)??null}catch{return null}}const nn=globalThis;function Au(e){nn.__ihabNoiseSettingsStore=e}async function pu(){try{return await nn.__ihabNoiseSettingsStore?.load()??null}catch{return null}}function wu(e){const n=t=>{};try{const t=nn.__ihabNoiseSettingsStore?.save(e);t&&typeof t.catch=="function"&&t.catch(n)}catch(t){n(t)}}function ke(e){const n=new TextEncoder().encode(String(e));let t="";return n.forEach(o=>{t+=o.toString(16).padStart(2,"0")}),t}const bu=ke;function Bu(e,n){return`${e}/${ke(n)}.mp3`}function _u(e={}){const n=e.storagePrefix??"audio-cache",t=e.voice??"ko-f",o=typeof e.speed=="number"?e.speed:1,r=e.filenameSanitizer??ke;return async function(i){const u=String(i||"").trim();if(!u)return"";const a=`${r(u)}_${t}.mp3`,l=`${n}/${a}`;try{if(await ln(l)){const s=await cn(l);if(s)return s}}catch{}if(e.generator)try{const s=await e.generator(u,l,e);if(s)return s}catch{}try{const s=`/api/tts?word=${encodeURIComponent(u)}&voice=${encodeURIComponent(t)}&speed=${encodeURIComponent(String(o))}`;return await fetch(s,{method:"GET"}),`/audio-cache/${a}`}catch{return`/audio-cache/${a}`}}}async function Nu(e){if(typeof document<"u")try{const n=document.createElement("textarea");n.value=e,n.setAttribute("readonly",""),n.style.position="fixed",n.style.top="0",n.style.left="0",n.style.opacity="0",n.style.pointerEvents="none",document.body.appendChild(n),n.focus(),n.select(),n.setSelectionRange(0,e.length);const t=document.execCommand("copy");if(document.body.removeChild(n),t)return!0}catch{}try{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function")return await navigator.clipboard.writeText(e),!0}catch{}return!1}const X="Asia/Seoul";function Lu(e){return new Date(e).toLocaleDateString("ko-KR",{timeZone:X,year:"numeric",month:"short",day:"numeric"})}function Ru(e){return new Date(e).toLocaleString("ko-KR",{timeZone:X,year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"})}function ju(e,n){const t=n.startsWith("ko")?"ko-KR":"en-US";return new Date(e).toLocaleDateString(t,{timeZone:X,year:"numeric",month:"short",day:"numeric"})}function Ou(e,n){const t=n.startsWith("ko")?"ko-KR":"en-US";return new Date(e).toLocaleString(t,{timeZone:X,year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"})}function ku(e){return new Date(e).toLocaleString("ko-KR",{timeZone:X,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function Iu(e){if(e==null||e==="")return"";const n=e instanceof Date?e:new Date(e);return isNaN(n.getTime())?"":new Intl.DateTimeFormat("en-GB",{timeZone:X,hour:"2-digit",minute:"2-digit",hour12:!1}).format(n)}function tt(){return ce(new Date)}function ce(e){if(e==null||e==="")return"";const n=e instanceof Date?e:new Date(e);return isNaN(n.getTime())?"":new Intl.DateTimeFormat("fr-CA",{timeZone:"Asia/Seoul"}).format(n)}function Pu(e,n){if(!e)return"";const t=new Date(e).getTime();if(Number.isNaN(t))return"";const o=Math.max(0,Math.floor((Date.now()-t)/1e3)),r=Math.floor(o/60),i=Math.floor(r/60),u=Math.floor(i/24),a=Math.floor(u/7),l=Math.floor(u/30),s=Math.floor(u/365);return r<1?n("store.time.justNow","\uBC29\uAE08 \uC804"):r<60?n("store.time.minutesAgo",{n:r}):i<24?n("store.time.hoursAgo",{n:i}):u<7?n("store.time.daysAgo",{n:u}):a<5?n("store.time.weeksAgo",{n:a}):u<365?n("store.time.monthsAgo",{n:Math.min(l,11)}):n("store.time.yearsAgo",{n:s})}function Mu(e,n={}){const{sep:t=".",pad:o=!0,trailingDot:r=!1,fallback:i="\u2014"}=n;if(!e)return i;const u=ce(e instanceof Date?e:String(e));if(!u)return i;const[a,l,s]=u.split("-"),C=o?l:String(Number(l)),c=o?s:String(Number(s));return`${a}${t}${C}${t}${c}${r?".":""}`}function $u(e){const n=e.replace(/\D/g,"").slice(0,11);return n.startsWith("02")?n.length<=2?n:n.length<=6?`${n.slice(0,2)}-${n.slice(2)}`:`${n.slice(0,2)}-${n.slice(2,n.length-4)}-${n.slice(n.length-4)}`:n.length<=3?n:n.length<=7?`${n.slice(0,3)}-${n.slice(3)}`:`${n.slice(0,3)}-${n.slice(3,n.length-4)}-${n.slice(n.length-4)}`}function vu(e){if(e){if(/^\d{4}\.\d{2}\.\d{2}$/.test(e))return e;if(/^\d{8}$/.test(e))return`${e.slice(0,4)}.${e.slice(4,6)}.${e.slice(6,8)}`;if(/^\d{4}-\d{2}-\d{2}$/.test(e))return e.replace(/-/g,".");if(/^\d{4}-\d{2}-\d{2}T/.test(e)){const n=new Date(e);return isNaN(n.getTime())?void 0:ce(n).replace(/-/g,".")}}}function Gu(e){if(e)return/^\d{4}\.\d{2}\.\d{2}$/.test(e)?e.replace(/\./g,"-"):e}function Fu(e,n){if(!e)return"-";const t=/^(\d{1,2}):(\d{2})$/.exec(e.trim());if(!t)return e;const o=Number(t[1]),r=Number(t[2]),i=t[1].padStart(2,"0");return r===0?n("date.timeH",{h:o,hh:i,mm:t[2]}):n("date.timeHM",{h:o,hh:i,m:r,mm:t[2]})}function xu(e){return(e??0).toLocaleString("ko-KR")}const Wu=[{key:"FOOD",label:"\uC74C\uC2DD",icon:"salad",color:"#FF8A65",subs:[{key:"TRKRFD",label:"\uD55C\uAD6D \uC804\uD1B5\uC74C\uC2DD"},{key:"MDKRFD",label:"\uD55C\uAD6D \uD604\uB300\uC74C\uC2DD"},{key:"WRLDFD",label:"\uC138\uACC4\uC758 \uC74C\uC2DD"},{key:"MTRFRT",label:"\uC2DD\uC7AC\uB8CC\uC640 \uACFC\uC77C"},{key:"GEFDKL",label:"\uC74C\uC2DD \uC0C1\uC2DD"}]},{key:"HLTH",label:"\uAC74\uAC15",icon:"heart",color:"#66BB6A",subs:[{key:"HTETHB",label:"\uAC74\uAC15\uD55C \uC2DD\uC2B5\uAD00"},{key:"DISILL",label:"\uBCD1\uACFC \uC9C8\uD658"},{key:"EXCISE",label:"\uC6B4\uB3D9"},{key:"GEHTKL",label:"\uAC74\uAC15\uC0C1\uC2DD"}]},{key:"WETH",label:"\uB0A0\uC528",icon:"sun-medium",color:"#42A5F5",subs:[{key:"GESSKL",label:"\uACC4\uC808\uC0C1\uC2DD"},{key:"SNWRAN",label:"\uB208\uACFC \uBE44"},{key:"WTHFCT",label:"\uC77C\uAE30\uC608\uBCF4"},{key:"GEWTKL",label:"\uB0A0\uC528\uC0C1\uC2DD"}]},{key:"PRSN",label:"\uC778\uBB3C",icon:"user-round",color:"#AB47BC",subs:[{key:"JODYPS",label:"\uC870\uC120\uC2DC\uB300"},{key:"MDKRPS",label:"\uD55C\uAD6D \uADFC\uD604\uB300"},{key:"THKDPS",label:"\uC0BC\uAD6D\uC2DC\uB300"},{key:"WRLART",label:"\uC138\uACC4\uC758 \uC608\uC220\uAC00"},{key:"WRLPSN",label:"\uC138\uACC4\uC758 \uC778\uBB3C"}]},{key:"KRCT",label:"\uD55C\uAD6D\uBB38\uD654",icon:"bow-arrow",color:"#EC407A",subs:[{key:"KRLANG",label:"\uC6B0\uB9AC\uB9D0"},{key:"TRPLCT",label:"\uC804\uD1B5\uB180\uC774"},{key:"HERITG",label:"\uBB38\uD654\uC7AC"},{key:"EVTFES",label:"\uD589\uC0AC\uC640 \uCD95\uC81C"},{key:"GECTKL",label:"\uC0C1\uC2DD"}]},{key:"STRY",label:"\uC774\uC57C\uAE30",icon:"message-circle",color:"#8D6E63",subs:[{key:"FRYTAL",label:"\uB3D9\uD654"},{key:"AMZING",label:"\uC2E0\uAE30\uD55C \uC774\uC57C\uAE30"},{key:"DAYSTR",label:"\uC77C\uC0C1 \uC18D \uC774\uC57C\uAE30"}]},{key:"LOCA",label:"\uC9C0\uC5ED",icon:"map-pin",color:"#26A69A",subs:[{key:"KRLDMK",label:"\uD55C\uAD6D\uC758 \uBA85\uC18C"},{key:"SELNMK",label:"\uC11C\uC6B8\uC758 \uBA85\uC18C"},{key:"WRDTRB",label:"\uC138\uACC4\uC5EC\uD589"},{key:"NAVIGT",label:"\uAE38 \uCC3E\uAE30"}]},{key:"SOAR",label:"\uC0AC\uD68C\uC640 \uC608\uC220",icon:"landmark",color:"#5C6BC0",subs:[{key:"KRSOCI",label:"\uD55C\uAD6D"},{key:"ECONEW",label:"\uACBD\uC81C\uC640 \uB274\uC2A4"},{key:"GENART",label:"\uC608\uC220"},{key:"GELFKL",label:"\uC0DD\uD65C \uC0C1\uC2DD"}]},{key:"NTSC",label:"\uC790\uC5F0\uACFC \uACFC\uD559",icon:"leaf",color:"#9CCC65",subs:[{key:"ANIMAL",label:"\uB3D9\uBB3C"},{key:"PLANTS",label:"\uC2DD\uBB3C"},{key:"ETHPLT",label:"\uC9C0\uAD6C"},{key:"TOLELC",label:"\uB3C4\uAD6C\uC640 \uC804\uC790\uC81C\uD488"},{key:"GESCKL",label:"\uACFC\uD559\uC0C1\uC2DD"}]},{key:"SPRT",label:"\uC2A4\uD3EC\uCE20",icon:"trophy",color:"#FFCA28",subs:[{key:"INVDSP",label:"\uAC1C\uC778\uACBD\uAE30"},{key:"MARART",label:"\uACA9\uD22C\uAE30"},{key:"TEAMSP",label:"\uB2E8\uCCB4\uACBD\uAE30"},{key:"FOOTBL",label:"\uCD95\uAD6C"},{key:"GESPKL",label:"\uC2A4\uD3EC\uCE20 \uC0C1\uC2DD"}]}],Hu=[{key:"LISTEN_IN_NOISE",label:"\uC18C\uC74C \uD558 \uBB38\uC7A5 \uB4E3\uAE30",icon:"party-popper",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828"},{key:"SHORT_STORY",label:"\uC9E7\uC740 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square",desc:"\uC9E7\uC740 \uC774\uC57C\uAE30 + 4\uBB38\uC81C"},{key:"LONG_STORY",label:"\uAE34 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square-text",desc:"\uAE34 \uC774\uC57C\uAE30 \uC2EC\uD654 \uD6C8\uB828"},{key:"ORDERING_SENTENCE",label:"\uBB38\uC7A5 \uC21C\uC11C\uD654 \uD558\uAE30",icon:"align-start-vertical",desc:"\uC21C\uC11C \uBC30\uC5F4 \uD6C8\uB828"}];let tn=null;function Yu(e){tn=e}function Ku(){return tn?.topicTypes??Wu}function Uu(){return tn?.trainingTypes??Hu}const ot="ihab_theme",Vu="light";function ut(){try{const e=localStorage.getItem(ot);if(e==="light"||e==="dark"||e==="auto")return e}catch{}return Vu}function rt(e){try{document.documentElement.setAttribute("data-theme",e),localStorage.setItem(ot,e)}catch{}}function Ju(){rt(ut())}const it="ihab_font_scale",qu="medium",Qu=["medium","large1","large2","large3"];function at(){try{const e=localStorage.getItem(it);if(Qu.includes(e))return e}catch{}return qu}function st(e){try{document.documentElement.setAttribute("data-font-scale",e),localStorage.setItem(it,e)}catch{}}function zu(){st(at())}const Ce=[],ge=[],de=[],fe=[],he={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},me={LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]},Zu={LISTEN_IN_NOISE:3,SHORT_STORY:2,LONG_STORY:1,ORDERING_SENTENCE:2};let on=null,lt=null,Y=null;function ct({counts:e,forceRefresh:n}={}){const t=Object.assign({},Zu,e||{}),o=tt(),r=ce(new Date(`${o}T00:00:00+09:00`).getTime()-864e5),i=JSON.stringify(t);if(!n&&lt===o&&on===i&&Y)return Object.assign(he,Y.today),Object.assign(me,Y.yesterday?.selection||{LISTEN_IN_NOISE:[],SHORT_STORY:[],LONG_STORY:[],ORDERING_SENTENCE:[]}),{today:he,yesterday:me};const u={LISTEN_IN_NOISE:x(Ce,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:x(ge,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:x(de,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:x(fe,Math.max(0,Number(t.ORDERING_SENTENCE)||0))};let a=null;return Y&&on===i&&Y.yesterday&&Y.yesterday.date===r&&(a=Y.yesterday.selection),a||(a={LISTEN_IN_NOISE:x(Ce,Math.max(0,Number(t.LISTEN_IN_NOISE)||0)),SHORT_STORY:x(ge,Math.max(0,Number(t.SHORT_STORY)||0)),LONG_STORY:x(de,Math.max(0,Number(t.LONG_STORY)||0)),ORDERING_SENTENCE:x(fe,Math.max(0,Number(t.ORDERING_SENTENCE)||0))}),Object.assign(he,u),Object.assign(me,a),lt=o,on=i,Y={today:u,yesterday:{date:r,countsKey:i,selection:a}},{today:he,yesterday:me}}function Xu(){return{today:he,yesterday:me}}function er(){return{LISTEN_IN_NOISE:Ce,SHORT_STORY:ge,LONG_STORY:de,ORDERING_SENTENCE:fe}}let un=!1,Se=null;async function nr(){try{const e={url:typeof document>"u"?require("url").pathToFileURL(__filename).href:Pe&&Pe.tagName.toUpperCase()==="SCRIPT"&&Pe.src||new URL("utils.cjs.js",document.baseURI).href}&&void 0||"/",n=await fetch(`${e}data/allTrainingData.json`);return n.ok?await n.json():null}catch{return null}}async function Ct(){if(!un)return Se||(Se=(async()=>{const e=await nr();if(!e){Se=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{for(const n of Object.keys(e||{})){const t=e[n]||[];for(const o of t){const r=o,i=String(r.training_type||n),u=String(r.category_main_code||r.category_main||r.category_0||""),a=String(r.category_sub_code||r.category_sub||r.category_1||""),l=Object.assign({},r,{training_type:i,category_0:u,category_1:a});i==="LISTEN_IN_NOISE"?Ce.push(l):i==="SHORT_STORY"?ge.push(l):i==="LONG_STORY"?de.push(l):i==="ORDERING_SENTENCE"&&fe.push(l)}}}catch{Se=null;try{window.dispatchEvent(new Event("speechear.data.error"))}catch{}return}try{window.dispatchEvent(new Event("speechear.data.updated"))}catch{}try{ct()}catch{}un=!0})(),Se)}function tr(){return un}async function or(e=3e3){const n=Ct();return Promise.race([n,new Promise(t=>setTimeout(t,e))])}const ur=[{key:"LISTEN_IN_NOISE",label:"\uC18C\uC74C \uD558 \uBB38\uC7A5 \uB4E3\uAE30",icon:"party-popper",desc:"\uB2E4\uC591\uD55C \uC18C\uC74C \uD658\uACBD\uC5D0\uC11C \uBB38\uC7A5 \uCCAD\uB825\uC744 \uD6C8\uB828\uD569\uB2C8\uB2E4."},{key:"SHORT_STORY",label:"\uC9E7\uC740 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square",desc:"\uC9E7\uC740 \uC774\uC57C\uAE30\uB97C \uB4E3\uACE0 \uAE30\uC5B5\uD558\uC5EC \uBB38\uC81C\uB97C \uD480\uC5B4\uBD05\uB2C8\uB2E4."},{key:"LONG_STORY",label:"\uAE34 \uC774\uC57C\uAE30 \uB4E3\uAE30",icon:"message-square-text",desc:"\uAE34 \uC774\uC57C\uAE30\uB97C \uB4E3\uACE0 \uAE30\uC5B5\uD558\uC5EC \uB2E4\uC218\uC758 \uBB38\uC81C\uB97C \uD480\uC5B4\uBD05\uB2C8\uB2E4."},{key:"ORDERING_SENTENCE",label:"\uBB38\uC7A5 \uC21C\uC11C\uD654 \uD558\uAE30",icon:"align-start-vertical",desc:"\uC5EC\uB7EC\uAC1C\uC758 \uC9E7\uC740 \uBB38\uC7A5\uC744 \uB4E3\uACE0 \uAE30\uC5B5\uD558\uC5EC \uADF8 \uC21C\uC11C\uC5D0 \uB9DE\uAC8C \uBC30\uC5F4\uD569\uB2C8\uB2E4."}],rr=[{key:"FOOD",label:"\uC74C\uC2DD",icon:"salad",color:"#FF8A65",subs:[{key:"TRKRFD",label:" \uD55C\uAD6D \uC804\uD1B5\uC74C\uC2DD"},{key:"MDKRFD",label:"\uD55C\uAD6D \uD604\uB300\uC74C\uC2DD"},{key:"WRLDFD",label:"\uC138\uACC4\uC758 \uC74C\uC2DD"},{key:"MTRFRT",label:"\uC2DD\uC7AC\uB8CC\uC640 \uACFC\uC77C"},{key:"GEFDKL",label:"\uC74C\uC2DD \uC0C1\uC2DD"}]},{key:"HLTH",label:"\uAC74\uAC15",icon:"heart",color:"#66BB6A",subs:[{key:"HTETHB",label:"\uAC74\uAC15\uD55C \uC2DD\uC2B5\uAD00"},{key:"DISILL",label:"\uBCD1\uACFC \uC9C8\uD658"},{key:"EXCISE",label:"\uC6B4\uB3D9"},{key:"GEHTKL",label:"\uAC74\uC0C1\uC0C1\uC2DD"}]},{key:"WETH",label:"\uB0A0\uC528",icon:"sun-medium",color:"#42A5F5",subs:[{key:"GESSKL",label:"\uACC4\uC808\uC0C1\uC2DD"},{key:"SNWRAN",label:"\uB208\uACFC \uBE44"},{key:"WTHFCT",label:"\uC77C\uAE30\uC608\uBCF4"},{key:"GEWTKL",label:"\uB0A0\uC528\uC0C1\uC2DD"}]},{key:"PRSN",label:"\uC778\uBB3C",icon:"user-round",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#AB47BC",subs:[{key:"JODYPS",label:"\uC870\uC120\uC2DC\uB300"},{key:"MDKRPS",label:"\uD55C\uAD6D \uADFC\uD604\uB300"},{key:"THKDPS",label:"\uC0BC\uAD6D\uC2DC\uB300"},{key:"WRLART",label:"\uC138\uACC4\uC758 \uC608\uC220\uAC00"},{key:"WRLPSN",label:"\uC138\uACC4\uC758 \uC778\uBB3C"}]},{key:"KRCT",label:"\uD55C\uAD6D\uBB38\uD654",icon:"bow-arrow",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#EC407A",subs:[{key:"KRLANG",label:"\uC6B0\uB9AC\uB9D0"},{key:"TRPLCT",label:"\uC804\uD1B5\uB180\uC774"},{key:"HERITG",label:"\uBB38\uD654\uC7AC"},{key:"EVTFES",label:"\uD589\uC0AC\uC640 \uCD95\uC81C"},{key:"GECTKL",label:"\uC0C1\uC2DD"}]},{key:"STRY",label:"\uC774\uC57C\uAE30",icon:"message-circle",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#8D6E63",subs:[{key:"FRYTAL",label:"\uB3D9\uD654"},{key:"AMZING",label:"\uC2E0\uAE30\uD55C \uC774\uC57C\uAE30"},{key:"DAYSTR",label:"\uC77C\uC0C1 \uC18D \uC774\uC57C\uAE30"}]},{key:"LOCA",label:"\uC9C0\uC5ED",icon:"map-pin",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#26A69A",subs:[{key:"KRLDMK",label:"\uD55C\uAD6D\uC758 \uBA85\uC18C"},{key:"SELNMK",label:"\uC11C\uC6B8\uC758 \uBA85\uC18C"},{key:"WRDTRB",label:"\uC138\uACC4\uC5EC\uD589"},{key:"NAVIGT",label:"\uAE38 \uCC3E\uAE30"}]},{key:"SOAR",label:"\uC0AC\uD68C\uC640 \uC608\uC220",icon:"landmark",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#5C6BC0",subs:[{key:"KRSOCI",label:"\uD55C\uAD6D"},{key:"ECONEW",label:"\uACBD\uC81C\uC640 \uB274\uC2A4"},{key:"GENART",label:"\uC608\uC220"},{key:"GELFKL",label:"\uC0DD\uD65C \uC0C1\uC2DD"}]},{key:"NTSC",label:"\uC790\uC5F0\uACFC \uACFC\uD559",icon:"leaf",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#9CCC65",subs:[{key:"ANIMAL",label:"\uB3D9\uBB3C"},{key:"PLANTS",label:"\uC2DD\uBB3C"},{key:"ETHPLT",label:"\uC9C0\uAD6C"},{key:"TOLELC",label:"\uB3C4\uAD6C\uC640 \uC804\uC790\uC81C\uD488"},{key:"GESCKL",label:"\uACFC\uD559\uC0C1\uC2DD"}]},{key:"SPRT",label:"\uC2A4\uD3EC\uCE20",icon:"trophy",desc:"\uC18C\uC74C \uD658\uACBD \uC18D \uBB38\uC7A5 \uC774\uD574 \uD6C8\uB828",color:"#FFCA28",subs:[{key:"INVDSP",label:"\uAC1C\uC778\uACBD\uAE30"},{key:"MARART",label:"\uACA9\uD22C\uAE30"},{key:"TEAMSP",label:"\uB2E8\uCCB4\uACBD\uAE30"},{key:"FOOTBL",label:"\uCD95\uAD6C"},{key:"GESPKL",label:"\uC2A4\uD3EC\uCE20 \uC0C1\uC2DD"}]}],ir={LISTEN_IN_NOISE:"listenInNoise",SHORT_STORY:"shortStory",LONG_STORY:"longStory",ORDERING_SENTENCE:"orderingSentence"};let Ie=null,gt=null,dt=null;function ar(){const e=zn();if(e&&e.entries.length>0){const n=wn();if(Ie&&gt===e&&dt===n)return Ie;const t=new Set,o=[];for(const r of e.entries)!r.word||t.has(r.word)||(t.add(r.word),o.push({w:r.word,s:r.syllables,p:n?.[r.word]?[...n[r.word].cho??[],...n[r.word].jung??[],...n[r.word].jong??[]]:[],pron:r.pronunciation||r.word,grade:r.grade}));return Ie=o,gt=e,dt=n,Ie}return[]}new Proxy([],{get(e,n){const t=ar(),o=t[n];return typeof o=="function"?o.bind(t):o}});const sr={free:{maxCustomers:0,visitWord:!1,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!1,wordTablePrint:!1,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!1,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:0,crossword:!1,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!1},personal_standard:{maxCustomers:0,visitWord:!1,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!1,wordDataLevel:2,sentenceDataLevel:2,crossword:!0,crosswordMid:!0,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!0},mgr_free:{maxCustomers:5,visitWord:!0,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!1,wordTablePrint:!1,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!1,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:1,crossword:!1,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!1},none:{maxCustomers:0,visitWord:!1,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!1,wordTableSetting:!1,wordTablePrint:!1,addToMyList:!1,addToGroupList:!1,wordSearch:!1,wordSearchPrint:!1,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:0,sentenceDataLevel:0,crossword:!1,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!1},lite_word:{maxCustomers:10,visitWord:!0,visitSentence:!1,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:0,crossword:!0,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!1},lite_sentence:{maxCustomers:10,visitWord:!1,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!1,wordTableSetting:!1,wordTablePrint:!0,addToMyList:!1,addToGroupList:!1,wordSearch:!1,wordSearchPrint:!0,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:0,sentenceDataLevel:1,crossword:!0,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!1,sentenceTrainingView:!0},lite:{maxCustomers:10,visitWord:!0,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!1,wordTrainingSetting:!1,myWordList:!1,wordListShare:!1,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!1,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!1,wordSearchAddToGroupList:!1,wordDataLevel:1,sentenceDataLevel:1,crossword:!0,crosswordMid:!1,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!0},standard:{maxCustomers:30,visitWord:!0,visitSentence:!0,homework:!1,customerStats:!1,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!1,wordDataLevel:2,sentenceDataLevel:2,crossword:!0,crosswordMid:!0,crosswordHigh:!1,wordTrainingView:!0,sentenceTrainingView:!0},pro:{maxCustomers:50,visitWord:!0,visitSentence:!0,homework:!0,customerStats:!0,managerCustomerSplit:!1,managerManagement:!1,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!1,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!1,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!1,wordDataLevel:3,sentenceDataLevel:3,crossword:!0,crosswordMid:!0,crosswordHigh:!0,wordTrainingView:!0,sentenceTrainingView:!0},enterprise:{maxCustomers:1/0,visitWord:!0,visitSentence:!0,homework:!0,customerStats:!0,managerCustomerSplit:!0,managerManagement:!0,sentenceTrainingSetting:!0,wordTrainingSetting:!0,myWordList:!0,wordListShare:!0,groupTrainingSetting:!0,minimalPairSearch:!0,wordTableSetting:!0,wordTablePrint:!0,addToMyList:!0,addToGroupList:!0,wordSearch:!0,wordSearchPrint:!0,wordSearchAddToMyList:!0,wordSearchAddToGroupList:!0,wordDataLevel:3,sentenceDataLevel:3,crossword:!0,crosswordMid:!0,crosswordHigh:!0,wordTrainingView:!0,sentenceTrainingView:!0}},lr={none:0,free:1,personal_standard:3,mgr_free:4,lite_word:5,lite_sentence:5,lite:6,standard:7,pro:8,enterprise:9},cr={free:{sentenceTrainingDaily:2,wordTrainingDaily:2,gameDaily:1},personal_standard:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null},mgr_free:{sentenceTrainingDaily:2,wordTrainingDaily:2,gameDaily:1,trainingItemMax:5,customerMax:5,homeworkSendDaily:1},lite:{sentenceTrainingDaily:5,wordTrainingDaily:5,gameDaily:5,trainingItemMax:10,customerMax:10,homeworkSendDaily:10},standard:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null,trainingItemMax:30,customerMax:30,homeworkSendDaily:30},pro:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null,trainingItemMax:null,customerMax:50,homeworkSendDaily:50},enterprise:{sentenceTrainingDaily:null,wordTrainingDaily:null,gameDaily:null,trainingItemMax:null,customerMax:null,homeworkSendDaily:null}};function Cr(e){const n=e.toLowerCase();return n.startsWith("manager_enterprise")?"enterprise":n.startsWith("manager_pro")?"pro":n.startsWith("manager_standard")?"standard":n.startsWith("manager_lite_word")?"lite_word":n.startsWith("manager_lite_sentence")?"lite_sentence":n.startsWith("manager_lite")||n.startsWith("mgr_lite")?"lite":n.startsWith("mgr_standard")?"standard":n.startsWith("mgr_pro")?"pro":n.startsWith("content_")||n.startsWith("speechear_")||n.startsWith("light_")||n==="light"?"personal_standard":"none"}const gr=5,dr=5;function fr({rank:e,voteCount:n,quota:t=5}){return e<t&&n>0}const hr={selected:"ALREADY_SELECTED",added:"ALREADY_ADDED",rejected:"ALREADY_REJECTED"};exports.CAPABILITY=xn,exports.CHOSEONG=p,exports.JONGSEONG=L,exports.JUNGSEONG=_,exports.LONG_STORIES=de,exports.NETWORK_ERROR_MESSAGE=Jn,exports.NOISE_DATAS=Ce,exports.ORDER_SETS=fe,exports.PLAN_FEATURES=sr,exports.PLAN_LIMITS=cr,exports.SHORT_STORIES=ge,exports.TIER_RANK=lr,exports.TOPIC_TYPES=rr,exports.TRAINING_TYPES=ur,exports.TRAINING_TYPE_I18N_KEY=ir,exports.WORD_SUGGESTION_ACCOUNT_LIMIT=dr,exports.WORD_SUGGESTION_EXISTING_ERROR=hr,exports.WORD_SUGGESTION_WEEKLY_QUOTA=gr,exports.applyFontScale=st,exports.applyTheme=rt,exports.buildChangeWholeSyllableProblem=Xo,exports.buildDropCompoundProblem=qo,exports.buildDropContrast3Problem=Jo,exports.buildDropContrastProblem=Vo,exports.buildDropFinalConsonantProblem=Qo,exports.buildMultiPartPosContrast=co,exports.buildPairIndex=ao,exports.buildRemoveConsonantProblem=zo,exports.buildSyllableMaskIndex=Zo,exports.bulkSetImageExistence=xt,exports.cardQuestionTitle=Yo,exports.checkImageExists=hn,exports.classifyPairDifficulty=Yt,exports.clearAudioExistsCache=Lt,exports.clearImageExistenceCache=Wt,exports.clearPairIndexCache=so,exports.composeSyllable=H,exports.computeDailySelection=ct,exports.configureImageResolver=Mt,exports.configureNoiseSettingsStore=Au,exports.configurePronunciationResolver=Rt,exports.configureStorage=Tt,exports.configureTTS=bt,exports.configureTrainingCategories=Yu,exports.copyText=Nu,exports.createDecompCache=Ht,exports.createTTSUrlResolver=_u,exports.dateToDb=Gu,exports.downloadCsvText=ru,exports.downloadSound=pt,exports.ensureTrainingDataLoaded=or,exports.escapeCsvField=uu,exports.fileExists=ln,exports.filterContrastCandidates=bn,exports.finalToPhoneme=Pn,exports.firstChoseongOf=mn,exports.formatCount=xu,exports.formatDateKo=Lu,exports.formatDateLocale=ju,exports.formatDateLongKo=Ru,exports.formatDateLongLocale=Ou,exports.formatDatetimeKo=ku,exports.formatPhone=$u,exports.formatRelativeTime=Pu,exports.formatTimeHM=Fu,exports.formatYmd=Mu,exports.getAssetBaseUrl=an,exports.getDailySelection=Xu,exports.getElementAnalyser=It,exports.getErrorMessage=eu,exports.getImageExistenceStats=Ft,exports.getImageExistsCached=vt,exports.getImageResolver=fn,exports.getNoiseBaseUrl=wt,exports.getPairIndex=wn,exports.getPlanTier=Cr,exports.getPronunciationResolver=jt,exports.getSavedFontScale=at,exports.getSavedTheme=ut,exports.getSignedOrPublicUrl=cn,exports.getTTSFallbackUrlResolver=_t,exports.getTTSUrlResolver=Bt,exports.getTodayKst=tt,exports.getTopicTypes=Ku,exports.getTrainingPools=er,exports.getTrainingTypes=Uu,exports.getWordPool=zn,exports.hasQuestionWordConstraint=Mo,exports.hasSel=j,exports.hasStructureContrast=He,exports.initFontScale=zu,exports.initTheme=Ju,exports.isAllChoseong=Dn,exports.isManualOnlyType=vo,exports.isNetworkErrorMessage=qn,exports.isSyllablePattern=En,exports.isThisWeekPick=fr,exports.isTrainingDataLoaded=tr,exports.isValidQuestionWord=$o,exports.itemCorrectness=Zn,exports.jamoToNamesForSpeech=Ko,exports.loadGameLeaderboard=Tu,exports.loadMyGameRanks=Eu,exports.loadNoiseSettings=pu,exports.loadTrainingData=Ct,exports.logCrossword=du,exports.logTrainingCompletion=Cu,exports.logTrainingTime=lu,exports.matchSyllables=Q,exports.matchesChoseongSearch=Kt,exports.matchesSyllablePattern=An,exports.matchesWordQuery=pe,exports.mergeQuestionText=Un,exports.minimalPairDistractors=lo,exports.normalizeDate=vu,exports.officialSoundPath=Bu,exports.parseSortValue=ou,exports.parseSyllable=h,exports.patternToComposition=eo,exports.phonemePartsOf=Fo,exports.pickEuRo=Fn,exports.pickEulReul=$n,exports.pickEunNeun=vn,exports.pickIga=Mn,exports.pickWaGwa=Gn,exports.prewarmImageCache=Gt,exports.primarySelPart=Oe,exports.readLevel=Pt,exports.reorderArray=Oo,exports.resolveAssetUrl=yt,exports.resolveSoundPath=At,exports.resumeAudioMeter=kt,exports.sample=x,exports.saveNoiseSettings=wu,exports.searchAndRankWords=oo,exports.setAssetBaseUrl=Dt,exports.setCrosswordLogger=gu,exports.setGameLeaderboardLoader=Du,exports.setGameRanksLoader=Su,exports.setGameScoreSubmitter=mu,exports.setTrainingCompletionLogger=cu,exports.setTrainingTimeLogger=su,exports.setWordPool=au,exports.shuffle=R,exports.sortToValue=tu,exports.soundOf=Ze,exports.speak=ft,exports.stopSpeaking=ht,exports.submitGameScore=yu,exports.syllMatchesComp=J,exports.syllableContrasts=z,exports.syllableLength=qt,exports.syllablePron=Vn,exports.toBase64UrlSafe=bu,exports.toChoseong=Sn,exports.toItemResults=fu,exports.toKstHm=Iu,exports.toKstYmd=ce,exports.toStandardPronunciation=wo,exports.toStorageName=ke,exports.toUserErrorMessage=nu,exports.validateSyllableSearchInput=to,exports.withEuRo=jo,exports.withEulReul=No,exports.withEunNeun=Lo,exports.withIga=_o,exports.withWaGwa=Ro,exports.wordContainsChoseong=Ut,exports.wordContainsJongseong=Jt,exports.wordContainsJungseong=Vt,exports.wordHasNoCoda=Qt,exports.wordHasSyllableMatching=Zt,exports.wrongItems=hu;