@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,297 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cx } from '../../utils/cx';
4
+ import { useCallback, useState, useRef, useEffect, useMemo } from 'react';
5
+ import { useTranslation } from 'react-i18next';
6
+ import './WordTableBlock.css';
7
+ import Button from '../Button';
8
+ import Section from '../Section';
9
+ import TextField from '../TextField';
10
+ import Panel, { PanelRow } from '../Panel';
11
+ import Popup from '../Popup/Popup';
12
+ import WordTable, { WORD_TABLE_PAPER } from '../WordTable';
13
+ import { chunkItems } from '../wordTableLayout';
14
+ import TableFilterPanel from './TableFilterPanel';
15
+ import { buildItemsPerPageSection, buildPageNumberSection, PAGE_NUM_POSITION_VALUE, parsePageNumberPosition } from './wordTableSettings';
16
+ import Toast from '../Toast';
17
+ import { useToastState } from '../../hooks/useToastState';
18
+ import { getImageResolver, checkImageExists } from '../../utils/imageConfig';
19
+ import { formatYmd, getTodayKst } from '../../utils/date';
20
+ import { getSavedTables } from '../../utils/savedWordTables';
21
+ import { useWordTablePrint } from './useWordTablePrint';
22
+ import { CELL_COUNTS } from './wordTableBlockTypes';
23
+ // ── 컴포넌트 ───────────────────────────────────────────────
24
+ /** @public */
25
+ export default function WordTableBlock({ title, titleIcon, disc, items, onSaveComplete, onLoad, onRemoveItem, onReset, resetLabel, saveButtonLabel, secondarySaveButtonLabel, onReorder, showCellCount, onAddItem, className, renderSavePopup, renderWordSearch, hideControls, saveOnly, tableName, nameValue, onNameChange, descriptionValue, onDescriptionChange, namePlaceholder, descriptionPlaceholder, existingNames, editingName, onCancel }) {
26
+ const { t } = useTranslation();
27
+ const resolvedResetLabel = resetLabel ?? t('wordPrint.clearAllSelection', '모두 선택 해제');
28
+ const isEditable = items === undefined;
29
+ // 인라인 이름·설명 모드 — onNameChange가 있으면 표 구성 화면에 입력란을 띄우고 저장 팝업 없이 즉시 저장한다.
30
+ const inlineNameFields = !!onNameChange;
31
+ // 이 블록에서 방금 저장한 이름들(소문자). 생성 모드에선 저장 직후 그 이름이 existingNames에
32
+ // 추가되는데, editingName 자기제외가 없어 자기 이름을 중복으로 오탐한다 — 이를 막기 위해 함께 제외한다.
33
+ const [savedNames, setSavedNames] = useState([]);
34
+ // 사용자가 실제로 입력한 값. 중복 검사·에러 표시는 이 값만 판단한다(자동 제안 placeholder는 제외).
35
+ const typedName = (nameValue ?? '').trim();
36
+ // 입력이 비어 있으면 자동 제안(placeholder)을 실효값으로 사용 — 저장 시에만 fallback.
37
+ const trimmedName = (typedName || (namePlaceholder ?? '').trim());
38
+ const trimmedDescription = ((descriptionValue ?? '').trim() || (descriptionPlaceholder ?? '').trim());
39
+ // 중복 검사: 소문자 비교. '저장하기'는 자기 이름(수정 대상 + 방금 저장한 이름) 제외(덮어쓰기 허용),
40
+ // '다른 이름으로 저장'은 전체와 비교. 자기 이름은 목록에서 각각 1건씩만 뺀다(같은 이름의 남의 표는 남긴다).
41
+ const namesLower = (existingNames ?? []).map(n => n.trim().toLowerCase());
42
+ const ownLower = [editingName?.trim().toLowerCase(), ...savedNames].filter((v) => !!v);
43
+ const othersLower = [...namesLower];
44
+ for (const own of ownLower) {
45
+ const idx = othersLower.indexOf(own);
46
+ if (idx !== -1)
47
+ othersLower.splice(idx, 1);
48
+ }
49
+ // 자동 제안이 우연히 기존 이름과 겹치더라도, 사용자가 그 이름을 직접 입력하지 않았다면 중복으로 보지 않는다.
50
+ const collidesOthers = typedName !== '' && othersLower.includes(typedName.toLowerCase());
51
+ // 편집 모드 전용 상태
52
+ const [cells, setCells] = useState(Array(4).fill(null));
53
+ const [cellCount, setCellCount] = useState(4);
54
+ const [activeCell, setActiveCell] = useState(null);
55
+ // 공통 단어 표 설정 상태
56
+ const [orientation, setOrientation] = useState('landscape');
57
+ const [contentTypes, setContentTypes] = useState(['이미지', '단어', '표준 발음']);
58
+ const [cutLine, setCutLine] = useState('표시');
59
+ const [showOutline, setShowOutline] = useState(true);
60
+ const [showDivLine, setShowDivLine] = useState(true);
61
+ // 인쇄 캡처용 그리드 콘텐츠 ref (단일 페이지)
62
+ const contentRef = useRef(null);
63
+ // 인쇄 캡처용 그리드 콘텐츠 ref 배열 (다중 페이지 — 페이지 분할 시)
64
+ const pageRefs = useRef([]);
65
+ // 페이지 분할(표시 모드 전용) — 페이지당 단어/대립쌍 개수. 기본값 8(=1페이지에 전부)
66
+ const [itemsPerPageSetting, setItemsPerPageSetting] = useState(8);
67
+ // 종이 안에 페이지 번호(1 / N)를 찍을 위치 — 미표시 포함
68
+ const [pageNumberPosition, setPageNumberPosition] = useState('right');
69
+ // 내부 저장 팝업
70
+ const [showSavePopup, setShowSavePopup] = useState(false);
71
+ // '다른 이름으로 저장'(새 표 생성)으로 저장 팝업을 열었는지 — 저장 시 onSaveComplete에 saveAsNew로 전달.
72
+ const [saveAsNew, setSaveAsNew] = useState(false);
73
+ // 토스트
74
+ const { toastMessage, toastType, showWarning, clearToast } = useToastState('warning');
75
+ const handleCloseWordSearch = useCallback(() => setActiveCell(null), [setActiveCell]);
76
+ // display 모드에서 칸 수 조절용 상태 (showCellCount일 때만 사용)
77
+ const [displayCellCount, setDisplayCellCount] = useState(() => Math.max(items?.length ?? 1, 1));
78
+ /* eslint-disable react-hooks/set-state-in-effect */
79
+ useEffect(() => {
80
+ if (!isEditable)
81
+ setDisplayCellCount(prev => Math.max(prev, items?.length ?? 1));
82
+ }, [items?.length, isEditable]);
83
+ /* eslint-enable react-hooks/set-state-in-effect */
84
+ // 레이아웃 칸 수
85
+ const count = isEditable
86
+ ? cellCount
87
+ : showCellCount
88
+ ? Math.max(displayCellCount, items?.length ?? 1)
89
+ : Math.max(items?.length ?? 0, 1);
90
+ const { width, height } = WORD_TABLE_PAPER[orientation];
91
+ // 페이지 분할 — 편집/칸수조절(showCellCount) 모드에서는 적용하지 않고, 완성된 표시 모드에서만 적용
92
+ const pagesEnabled = !isEditable && !showCellCount;
93
+ // '페이지당 개수' 첫 옵션은 항상 전체 개수(=한 페이지에 전부), 나머지는 그보다 작은 표준 분할값만.
94
+ const itemCount = items?.length ?? 0;
95
+ // 기본/저장된 설정(8)이 실제 개수보다 크면 전체로 클램프 — 5개뿐이면 "5개(전부)"가 기본 선택되게.
96
+ const effectiveItemsPerPage = Math.min(itemsPerPageSetting, Math.max(itemCount, 1));
97
+ const itemsPerPage = pagesEnabled ? effectiveItemsPerPage : count;
98
+ const pages = pagesEnabled ? chunkItems(items ?? [], itemsPerPage) : null;
99
+ const isPaginated = !!pages && pages.length > 1;
100
+ const hasPairs = isEditable
101
+ ? cells.some(c => c !== null && c.length > 1)
102
+ : (items ?? []).some(item => item.words.length > 1);
103
+ // PDF로 저장할 때 OS가 제안하는 기본 파일명. 저장된 표 이름이 있으면 그대로, 없으면 "오늘 날짜 + 단어표/대립쌍표"
104
+ const printFileName = tableName?.trim()
105
+ || `${formatYmd(getTodayKst())} ${hasPairs ? t('wordTable.printFileNamePair', '대립쌍표') : t('wordTable.printFileNameSingle', '단어표')}`;
106
+ // 인쇄/새창/다운로드는 공용 훅으로 위임 — 페이지 분할 시 페이지별 ref, 아니면 단일 콘텐츠 ref를 넘긴다.
107
+ const getElements = useCallback(() => isPaginated
108
+ ? pageRefs.current.filter((el) => el !== null)
109
+ : (contentRef.current ? [contentRef.current] : []), [isPaginated]);
110
+ const { print: handlePrint, openNewWindow: handleOpenNewWindow, downloadHtml } = useWordTablePrint({
111
+ getElements, paperW: width, paperH: height, fileName: printFileName,
112
+ onPopupBlocked: () => { showWarning(t('wordTable.popupBlocked', '팝업이 차단되었습니다. 브라우저 설정에서 팝업을 허용해 주세요.')); },
113
+ });
114
+ // 편집 모드 핸들러
115
+ const handleCellCountChange = (next) => {
116
+ setCellCount(next);
117
+ setCells(prev => {
118
+ const arr = Array(next).fill(null);
119
+ prev.slice(0, next).forEach((v, i) => { arr[i] = v; });
120
+ return arr;
121
+ });
122
+ setActiveCell(null);
123
+ };
124
+ const handleRemove = (idx) => {
125
+ setCells(prev => { const next = [...prev]; next[idx] = null; return next; });
126
+ if (activeCell === idx)
127
+ setActiveCell(null);
128
+ };
129
+ const handleWordConfirm = (entries) => {
130
+ if (activeCell === null)
131
+ return;
132
+ const idx = activeCell;
133
+ setCells(prev => { const next = [...prev]; next[idx] = entries; return next; });
134
+ const nextEmpty = cells.findIndex((c, i) => i > idx && c === null);
135
+ setActiveCell(nextEmpty !== -1 ? nextEmpty : null);
136
+ };
137
+ const hasColloquial = isEditable
138
+ ? cells.some(c => c?.some(e => !!e.colloquialPronunciation))
139
+ : (items ?? []).some(item => item.words.some(w => !!w.colloquialLabel));
140
+ // 표에 실제로 이미지가 있는지 — resolver(word)는 존재 여부와 무관하게 항상 URL을 만들어 반환하므로
141
+ // 그 truthiness만으로는 판정할 수 없다(항상 true가 되어 이미지 없는 표에서도 '이미지' 토글이
142
+ // 활성화되는 문제가 있었다). checkImageExists로 실제 HEAD 요청(+캐시) 확인을 거친다.
143
+ /* 물어볼 낱말이 있는지는 **렌더 중에 안다** — 굳이 상태로 들고 있을 것이 아니다.
144
+ 이걸 상태로 두면 "없음"으로 되돌리는 일을 효과가 해야 하고, 그러면 낡은 값으로
145
+ 한 번 그린 뒤에 고쳐진다. */
146
+ const imagePairs = useMemo(() => {
147
+ if (!getImageResolver())
148
+ return [];
149
+ return isEditable
150
+ ? cells.flatMap(c => (c ?? []).map(e => [e.word, e.homonum]))
151
+ : (items ?? []).flatMap(item => item.words.map(w => [w.label, w.homonum]));
152
+ }, [isEditable, cells, items]);
153
+ /* 실제로 파일이 있는지는 물어봐야 안다(HEAD 요청 + 캐시). 그 답만 상태로 든다.
154
+ `imagePairs` 가 비면 물어볼 것도 없으므로 아래 유도에서 곧바로 false 가 된다. */
155
+ const [imageFound, setImageFound] = useState(false);
156
+ useEffect(() => {
157
+ if (imagePairs.length === 0)
158
+ return;
159
+ let cancelled = false;
160
+ Promise.all(imagePairs.map(([w, h]) => checkImageExists(w, h))).then(results => {
161
+ if (!cancelled)
162
+ setImageFound(results.some(Boolean));
163
+ });
164
+ return () => { cancelled = true; };
165
+ }, [imagePairs]);
166
+ const hasImage = imagePairs.length > 0 && imageFound;
167
+ // TableFilterPanel에 끼워 넣을 편집/표시 전용 섹션(칸 수·페이지당 개수·페이지 번호) — 기본
168
+ // 5개(구성·용지방향·외곽선·절취선·구분선)는 그 컴포넌트가 wordTableSettings 공용 빌더로 직접 만든다.
169
+ const middleSections = useMemo(() => [
170
+ ...((isEditable || showCellCount) ? [{ label: t('wordTable.filter.columns', '칸 수'), items: CELL_COUNTS.map(n => ({ value: `${n}칸`, displayLabel: t('wordTable.filter.column', { count: n }) })), display: 'segmented' }] : []),
171
+ // 내용이 있는(1개 이상) 표면 '페이지당 대립쌍/단어 수'를 항상 노출한다(표시 모드 한정).
172
+ ...(pagesEnabled && (items?.length ?? 0) > 0 ? [buildItemsPerPageSection(t, { hasPairs, itemCount })] : []),
173
+ ...(isPaginated ? [buildPageNumberSection(t)] : []),
174
+ ], [t, isEditable, showCellCount, pagesEnabled, items?.length, hasPairs, itemCount, isPaginated]);
175
+ const middleSelected = {
176
+ ...((isEditable || showCellCount) ? { [t('wordTable.filter.columns', '칸 수')]: `${isEditable ? cellCount : displayCellCount}칸` } : {}),
177
+ ...(pagesEnabled && (items?.length ?? 0) > 0 ? { [t(hasPairs ? 'wordTable.filter.itemsPerPagePair' : 'wordTable.filter.itemsPerPageWord')]: `${effectiveItemsPerPage}개` } : {}),
178
+ ...(isPaginated ? { [t('wordTable.filter.pageNumber', '페이지 번호')]: PAGE_NUM_POSITION_VALUE[pageNumberPosition] } : {}),
179
+ };
180
+ const handleMiddleSelect = (value, sectionLabel) => {
181
+ if (sectionLabel === t('wordTable.filter.columns', '칸 수')) {
182
+ if (isEditable)
183
+ handleCellCountChange(parseInt(value));
184
+ else
185
+ setDisplayCellCount(parseInt(value));
186
+ }
187
+ else if (sectionLabel === t(hasPairs ? 'wordTable.filter.itemsPerPagePair' : 'wordTable.filter.itemsPerPageWord')) {
188
+ setItemsPerPageSetting(parseInt(value));
189
+ }
190
+ else if (sectionLabel === t('wordTable.filter.pageNumber', '페이지 번호')) {
191
+ setPageNumberPosition(parsePageNumberPosition(value));
192
+ }
193
+ };
194
+ // 저장 팝업용 현재 items / preview
195
+ const saveItems = isEditable
196
+ ? cells.filter((c) => c !== null).map(c => ({
197
+ id: c[0].word,
198
+ words: c.map(e => ({ label: e.word, subLabel: e.pronunciation, homonum: e.homonum })),
199
+ }))
200
+ : items ?? [];
201
+ const handleSave = (asNew = false) => {
202
+ setSaveAsNew(asNew);
203
+ // 인라인 이름·설명 모드: 팝업 없이 화면의 이름·설명으로 즉시 저장(덮어쓰기). 빈 값은 제안(placeholder)으로 대체.
204
+ if (inlineNameFields && onSaveComplete) {
205
+ // 저장한 이름을 기억해 둔다 — 저장 직후 existingNames에 이 이름이 추가돼도 자기 자신을
206
+ // 중복으로 오탐하지 않도록('저장하기'는 덮어쓰기 허용). '다른 이름으로 저장'은 여기 경로가 아니다.
207
+ const savedLower = trimmedName.trim().toLowerCase();
208
+ if (savedLower)
209
+ setSavedNames(prev => prev.includes(savedLower) ? prev : [...prev, savedLower]);
210
+ onSaveComplete(trimmedName, saveItems, trimmedDescription || undefined, asNew);
211
+ return;
212
+ }
213
+ // saveOnly: 이름 입력 팝업 없이 바로 저장(이름은 상위에서 처리)
214
+ if (saveOnly && onSaveComplete) {
215
+ onSaveComplete('', saveItems, undefined, asNew);
216
+ return;
217
+ }
218
+ if (onSaveComplete) {
219
+ setShowSavePopup(true);
220
+ return;
221
+ }
222
+ downloadHtml();
223
+ };
224
+ // '다른 이름으로 저장' — 이름만 새로 입력받아 새 표로 저장(saveAsNew=true). 설명은 현재 값 유지(복사본).
225
+ const [showSaveAsPopup, setShowSaveAsPopup] = useState(false);
226
+ const [saveAsName, setSaveAsName] = useState('');
227
+ const saveAsTrimmed = saveAsName.trim();
228
+ const saveAsCollides = saveAsTrimmed !== '' && namesLower.includes(saveAsTrimmed.toLowerCase());
229
+ const openSaveAsPopup = () => {
230
+ setSaveAsName(trimmedName ? `${trimmedName} (복사)` : '');
231
+ setShowSaveAsPopup(true);
232
+ };
233
+ const handleSaveAsConfirm = () => {
234
+ if (!saveAsTrimmed || saveAsCollides || !onSaveComplete)
235
+ return;
236
+ onSaveComplete(saveAsTrimmed, saveItems, trimmedDescription || undefined, true);
237
+ setShowSaveAsPopup(false);
238
+ };
239
+ // 저장 버튼 활성 조건 — 인라인 모드에선 이름 필수·중복(others) 불가. 항목이 비어도 불가.
240
+ const noItems = saveItems.length === 0;
241
+ const mainSaveDisabled = noItems || (inlineNameFields && (trimmedName === '' || collidesOthers));
242
+ const handleMainDisabledClick = () => {
243
+ if (noItems) {
244
+ showWarning(t('wordTable.emptyItems', '단어를 1개 이상 추가해주세요.'));
245
+ return;
246
+ }
247
+ if (inlineNameFields && trimmedName === '') {
248
+ showWarning(t('wordTable.save.nameRequired', '표 이름을 입력해 주세요.'));
249
+ return;
250
+ }
251
+ if (inlineNameFields && collidesOthers) {
252
+ showWarning(t('wordTable.save.duplicateName', '이미 사용 중인 이름입니다.'));
253
+ }
254
+ };
255
+ const savePreview = (_jsx(WordTable, { items: saveItems, orientation: orientation, contentTypes: contentTypes, cutLine: cutLine, showOutline: showOutline, showDivLine: showDivLine, count: count }));
256
+ return (_jsxs(_Fragment, { children: [_jsxs(Section, { type: "page", icon: titleIcon, title: title, disc: disc, className: cx('word-table-block', className), children: [showSaveAsPopup && (_jsx(Popup, { size: "small", title: secondarySaveButtonLabel ?? t('wordTable.saveAsNewButton', '다른 이름으로 저장'), onClose: () => setShowSaveAsPopup(false), footer: ({ closeWithAnimation }) => (_jsxs(_Fragment, { children: [_jsx(Button, { size: 48, type: "bar", label: t('common.cancel', '취소'), onClick: closeWithAnimation }), _jsx(Button, { size: 48, type: "bar", variant: "main", label: t('common.save', '저장'), disabled: !saveAsTrimmed || saveAsCollides, onClick: handleSaveAsConfirm })] })), children: _jsx(TextField, { label: t('wordTable.save.nameLabel', '이름'), value: saveAsName, onChange: setSaveAsName, placeholder: t('wordTable.save.placeholder', '이 단어표에 대한 제목을 입력하세요.'), maxLength: 40, size: 48, fullWidth: true, autoFocus: true, onEnter: handleSaveAsConfirm, error: saveAsCollides ? t('wordTable.save.duplicateName', '이미 사용 중인 이름입니다.') : undefined }) })), showSavePopup && onSaveComplete && renderSavePopup?.({
257
+ defaultName: typeof title === 'string' ? title : t('wordTable.defaultName', '단어 표'),
258
+ preview: savePreview,
259
+ previewW: width,
260
+ previewH: height,
261
+ items: saveItems,
262
+ existingNames: getSavedTables().map(tb => tb.name),
263
+ saveAsNew,
264
+ onSave: (name, description) => { onSaveComplete(name, saveItems, description, saveAsNew); setShowSavePopup(false); },
265
+ onCancel: () => setShowSavePopup(false),
266
+ }), (isEditable || onAddItem) && activeCell !== null && renderWordSearch?.({
267
+ cellIndex: activeCell,
268
+ onConfirm: isEditable ? handleWordConfirm : (entries) => {
269
+ if (onAddItem) {
270
+ const entry = entries[0];
271
+ if (entry) {
272
+ onAddItem({
273
+ id: entry.word,
274
+ words: [{ label: entry.word, subLabel: entry.pronunciation, homonum: entry.homonum }],
275
+ });
276
+ }
277
+ }
278
+ setActiveCell(null);
279
+ },
280
+ onClose: handleCloseWordSearch,
281
+ }), !hideControls && (_jsx(TableFilterPanel, { hasImage: hasImage, hasColloquial: hasColloquial, contentTypes: contentTypes, orientation: orientation, showOutline: showOutline, cutLine: cutLine, showDivLine: showDivLine, setters: { setContentTypes, setOrientation, setShowOutline, setCutLine, setShowDivLine }, showCutLine: (pagesEnabled ? itemsPerPage : count) > 1, showDivLine2: hasPairs, middleSections: middleSections, extraSelected: middleSelected, onExtraSelect: handleMiddleSelect })), isPaginated && pages ? (_jsx("div", { className: "word-table-block__pages", children: pages.map((page, i) => (_jsx(WordTable, { orientation: orientation, contentTypes: contentTypes, cutLine: cutLine, showOutline: showOutline, showDivLine: showDivLine, count: itemsPerPage, items: page, onRemoveItem: onRemoveItem, contentRef: el => { pageRefs.current[i] = el; }, pageNumber: { current: i + 1, total: pages.length }, pageNumberPosition: pageNumberPosition }, i))) })) : (_jsx(WordTable, { orientation: orientation, contentTypes: contentTypes, cutLine: cutLine, showOutline: showOutline, showDivLine: showDivLine, count: count, items: isEditable ? undefined : (items ?? []), editCells: isEditable ? cells : undefined, activeCell: activeCell, onActivateCell: (isEditable || onAddItem) ? setActiveCell : undefined, onRemoveCell: isEditable ? handleRemove : undefined, onRemoveItem: !isEditable ? onRemoveItem : undefined, onReorder: !isEditable ? onReorder : undefined, showFillerAdd: !!onAddItem, contentRef: contentRef })), inlineNameFields && !hideControls && (_jsxs(Panel, { size: "medium", labelWidth: 64, useBorder: false, useRowBorder: false, className: "word-table-block__meta", children: [_jsx(PanelRow, { variant: "custom", label: t('wordTable.save.nameLabel', '이름'), required: true, align: "vertical", useFullWidth: true, children: _jsx(TextField, { required: true, value: nameValue ?? '', onChange: onNameChange, placeholder: namePlaceholder ? namePlaceholder + t('wordTable.save.autoFillHint', ' (Tab 또는 space 입력시 자동 입력)') : t('wordTable.save.placeholder', '이 단어표에 대한 제목을 입력하세요.'),
282
+ /* PanelRow의 라벨은 시각적으로만 붙어 있고 입력과 연결돼 있지 않아, 낭독기에는
283
+ 이름 없는 입력으로 읽혔다. placeholder는 자동완성 안내문("Tab 또는 space…")이
284
+ 섞여 있어 이름으로 부적절하므로 같은 라벨 문구를 넘긴다. */
285
+ ariaLabel: t('wordTable.save.nameLabel', '이름'), maxLength: 40, size: 48, fullWidth: true, error: collidesOthers ? t('wordTable.save.duplicateName', '이미 사용 중인 이름입니다.') : undefined, onKeyDown: (e) => {
286
+ // Tab/Space: 입력이 비어 있고 제안(placeholder)이 있으면 그 값을 채운다(ghost-text 수락).
287
+ if (((e.key === 'Tab' && !e.shiftKey) || e.key === ' ') && !(nameValue ?? '').trim() && (namePlaceholder ?? '').trim()) {
288
+ e.preventDefault();
289
+ onNameChange?.(namePlaceholder ?? '');
290
+ }
291
+ } }) }), _jsx(PanelRow, { variant: "custom", label: t('wordTable.save.descriptionLabel', '설명'), align: "vertical", useFullWidth: true, children: _jsx(TextField, { value: descriptionValue ?? '', onChange: onDescriptionChange, placeholder: descriptionPlaceholder ? descriptionPlaceholder + t('wordTable.save.autoFillHint', ' (Tab 또는 space 입력시 자동 입력)') : t('wordTable.save.descriptionPlaceholder', '이 단어표에 대한 설명을 입력하세요.'), ariaLabel: t('wordTable.save.descriptionLabel', '설명'), maxLength: 200, multiline: true, rows: 2, fullWidth: true, onKeyDown: (e) => {
292
+ if (((e.key === 'Tab' && !e.shiftKey) || e.key === ' ') && !(descriptionValue ?? '').trim() && (descriptionPlaceholder ?? '').trim()) {
293
+ e.preventDefault();
294
+ onDescriptionChange?.(descriptionPlaceholder ?? '');
295
+ }
296
+ } }) })] }))] }), !hideControls && (_jsxs("div", { className: "word-table-block__actions", children: [_jsxs("div", { className: "word-table-block__actions-left", children: [!saveOnly && onReset && (_jsx(Button, { size: 40, type: "bar", label: resolvedResetLabel, onClick: onReset })), !saveOnly && onLoad && (_jsx(Button, { size: 40, type: "bar", label: t('wordTable.load', '불러오기'), onClick: onLoad })), !saveOnly && _jsx(Button, { size: 40, type: "bar", label: t('wordTable.openNewWindow', '새 창으로 보기'), onClick: handleOpenNewWindow })] }), _jsxs("div", { className: "word-table-block__actions-right", children: [onCancel && _jsx(Button, { size: "56", type: "bar", label: t('common.cancel', '취소'), onClick: onCancel }), !saveOnly && _jsx(Button, { size: "56", type: "bar", label: t('wordTable.print', '인쇄하기'), onClick: handlePrint }), secondarySaveButtonLabel && (_jsx(Button, { size: "56", type: "bar", label: secondarySaveButtonLabel, onClick: () => inlineNameFields ? openSaveAsPopup() : handleSave(true), disabled: noItems, onDisabledClick: () => { showWarning(t('wordTable.emptyItems', '단어를 1개 이상 추가해주세요.')); } })), _jsx(Button, { size: "56", type: "bar", variant: "main", label: saveButtonLabel ?? t('wordTable.saveButton', '저장하기'), onClick: () => handleSave(false), disabled: mainSaveDisabled, onDisabledClick: handleMainDisabledClick })] })] })), _jsx(Toast, { message: toastMessage, type: toastType, onClose: clearToast })] }));
297
+ }
@@ -0,0 +1,185 @@
1
+ /* 단어표 '문서형' 미리보기 카드 (내용 썸네일 + 이름 + 날짜·개수) */
2
+ .word-table-button {
3
+ position: relative;
4
+ box-sizing: border-box;
5
+ width: 240px;
6
+ display: flex;
7
+ flex-direction: column;
8
+ border: 1px solid var(--color-whiteLine);
9
+ border-radius: var(--radius-s, 8px);
10
+ background: var(--color-white);
11
+ overflow: hidden;
12
+ cursor: pointer;
13
+ transition: border-color 0.15s, box-shadow 0.15s;
14
+ }
15
+ .word-table-button:hover {
16
+ border-color: var(--color-main);
17
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
18
+ }
19
+ .word-table-button:focus-visible {
20
+ outline: 2px solid var(--color-main);
21
+ outline-offset: 1px;
22
+ }
23
+ .word-table-button--selected {
24
+ border-color: var(--color-main);
25
+ box-shadow: 0 0 0 1px var(--color-main) inset;
26
+ }
27
+
28
+ /* 단어(썸네일) 영역 고정 높이, 정보/푸터는 아래에 자동 높이.
29
+ *
30
+ * 240px 이었는데 **대립쌍표에서 칸이 잘렸다.** 한 표는 최대 12칸이고(MAX_SELECT),
31
+ * 대립쌍은 한 칸에 낱말이 둘이라 6행 × 47px + 간격 5px = 287px 가 필요하다.
32
+ * 240px 에서는 여섯 칸만 보이고 나머지는 잘렸다(2026-08-28 실측).
33
+ * 단어표(칸당 하나)는 예전에도 지금도 다 들어간다. */
34
+ .word-table-button__thumb {
35
+ flex: 0 0 auto;
36
+ height: 290px;
37
+ }
38
+
39
+ .word-table-button__info {
40
+ display: flex;
41
+ flex-direction: row;
42
+ align-items: flex-start;
43
+ gap: 8px;
44
+ padding: 12px 14px 0;
45
+ min-width: 0;
46
+ /* '더보기'(⋯)를 띄우기 위한 기준점 — 아래 참고 */
47
+ position: relative;
48
+ }
49
+
50
+ /* '더보기'는 **흐름에서 뺀다.**
51
+ *
52
+ * 예전에는 제목·설명과 같은 줄에 놓인 형제라, 글 묶음이 그 단추 폭(약 40px)만큼
53
+ * 좁아졌다. 제목은 어차피 두 줄에서 잘리니 티가 안 났지만 **설명은 오른쪽이 늘 비었다**
54
+ * (사용자가 화면에서 그 빈 자리를 짚었다). 띄워 놓으면 설명이 카드 폭을 다 쓴다.
55
+ * 대신 **제목만** 오른쪽을 비켜 가게 한다 — 제목 첫 줄이 단추와 같은 높이다. */
56
+ .word-table-button__more {
57
+ position: absolute;
58
+ top: 8px;
59
+ right: 10px;
60
+ }
61
+ .word-table-button__title {
62
+ padding-right: 34px;
63
+ }
64
+ /* 스토어 하단 영역(footer)이 없을 때 — footer의 padding-bottom(14px)이 없는 만큼
65
+ info 쪽에서 카드 하단 여백을 직접 채운다.
66
+
67
+ 그리고 **카드의 남은 높이를 이 영역이 받는다.** 카드는 같은 줄에서 가장 큰 것에
68
+ 맞춰 늘어나는데(`my-word-table-doc-wrap` 의 `align-self: stretch`), 늘어난 만큼이
69
+ `23시간 전` 아래에 빈칸으로 남았다. 여기서 받아 두면 아래 `__meta` 의
70
+ `margin-top: auto` 가 그 값을 바닥으로 민다.
71
+ 푸터가 있는 스토어 카드는 푸터가 이미 `margin-top: auto` 로 바닥을 잡으므로
72
+ 건드리지 않는다. */
73
+ .word-table-button--no-footer .word-table-button__info {
74
+ flex: 1 1 auto;
75
+ min-height: 0;
76
+ }
77
+ /* 글 묶음이 세로로 꽉 차야 그 안에서 아래로 밀 수 있다. 옆의 '더보기' 단추까지
78
+ 늘리지 않도록 부모의 align-items 를 바꾸지 않고 자기 자신만 늘린다. */
79
+ .word-table-button--no-footer .word-table-button__info-text {
80
+ align-self: stretch;
81
+ }
82
+ .word-table-button__info-text {
83
+ display: flex;
84
+ flex-direction: column;
85
+ align-items: flex-start;
86
+ gap: 4px;
87
+ min-width: 0;
88
+ flex: 1 1 auto;
89
+ text-align: left;
90
+ }
91
+ .word-table-button__title {
92
+ color: var(--color-black);
93
+ display: -webkit-box;
94
+ -webkit-line-clamp: 2;
95
+ -webkit-box-orient: vertical;
96
+ overflow: hidden;
97
+ overflow-wrap: anywhere;
98
+ }
99
+ /* 설명 — 제목 아래, 2줄까지 표시 후 말줄임 (폰트는 body-3 토큰 그대로) */
100
+ .word-table-button__desc {
101
+ color: var(--color-gray);
102
+ display: -webkit-box;
103
+ -webkit-line-clamp: 2;
104
+ -webkit-box-orient: vertical;
105
+ overflow: hidden;
106
+ }
107
+ .word-table-button__meta { color: var(--color-gray); }
108
+
109
+ /* 등록일 + 상태 배지 한 줄 — 왼쪽 끝에 등록일, 오른쪽 끝에 배지. */
110
+ .word-table-button__meta-row {
111
+ display: flex;
112
+ align-items: center;
113
+ justify-content: space-between;
114
+ gap: 8px;
115
+ min-width: 0;
116
+ /* 좌우는 `__info` 와 같게 — 등록일이 제목과 같은 세로선에서 시작한다.
117
+ 위쪽 12px 은 **최소 간격**이다. 남는 높이는 `margin-top: auto` 가 전부 이 위로
118
+ 몰아주는데(제목이 한 줄이면 26px, 두 줄이면 0px), 0px 일 때 설명이 등록일에
119
+ 바짝 붙었다. 카드마다 달라도 최소한 이만큼은 띄운다. */
120
+ padding: 12px 14px 14px;
121
+ }
122
+ .word-table-button__badges {
123
+ display: flex;
124
+ align-items: center;
125
+ gap: 4px;
126
+ flex: 0 0 auto;
127
+ }
128
+
129
+ /* 등록일은 **카드 왼쪽 아래**에 붙인다 — 설명이 한 줄이든 두 줄이든, 카드가 얼마나
130
+ 늘어나든 자리가 같아야 여러 카드를 훑을 때 눈이 한 줄을 따라간다.
131
+
132
+ 푸터가 없는 카드에만 건다. 스토어 카드는 푸터가 이미 `margin-top: auto` 로 바닥을
133
+ 잡고 있어서, 여기까지 밀면 설명과 등록일 사이가 벌어진다. 화면에서 확인할 수 없는
134
+ 변경은 만들지 않는다 — 자료실 화면에 닿지 못해서, 아예 안 닿게 범위를 좁혔다. */
135
+ .word-table-button--no-footer .word-table-button__meta-row { margin-top: auto; }
136
+
137
+ /* 하단 부가 영역 — 세로 스택(스토어: 1행 게시자·시간 / 2행 우측 좋아요·다운로드)
138
+ margin-top:auto 로 카드가 늘어나도 항상 하단에 고정(그리드 stretch와 함께 동작) */
139
+ .word-table-button__footer {
140
+ display: flex;
141
+ flex-direction: column;
142
+ gap: 8px;
143
+ padding: 12px 14px 14px;
144
+ margin-top: auto;
145
+ min-width: 0;
146
+ }
147
+ .word-table-button__store-by {
148
+ display: inline-flex;
149
+ align-items: center;
150
+ gap: 6px;
151
+ min-width: 0;
152
+ overflow: hidden;
153
+ }
154
+ .word-table-button__store-by .training-card__date { white-space: nowrap; }
155
+ .word-table-button__store-stats {
156
+ display: inline-flex;
157
+ align-items: center;
158
+ gap: 4px;
159
+ align-self: flex-end;
160
+ }
161
+
162
+ /* 더보기 버튼 — info 우측 인라인 */
163
+ .word-table-button__more {
164
+ flex: 0 0 auto;
165
+ }
166
+ /* 스토어 발행 배지 — 썸네일 좌상단 오버레이 */
167
+ /* 상태 배지 — 한때 썸네일 위에 `position: absolute` 로 얹혀 있었고, **낱말을 가렸다**
168
+ (실측: '공유 중'이 '가구'를 덮었다). 이제 등록일과 같은 줄, 카드 오른쪽 아래에 둔다.
169
+ 겹칠 일이 없으니 띄우지 않는다. */
170
+ .word-table-button__badge {
171
+ pointer-events: none;
172
+ }
173
+ /* 최근 생성·미열람 표 표시 — 우상단 원형 배지(circle badge) */
174
+ .word-table-button__new-dot {
175
+ position: absolute;
176
+ top: 8px;
177
+ right: 8px;
178
+ z-index: 3;
179
+ width: 10px;
180
+ height: 10px;
181
+ border-radius: 50%;
182
+ background: var(--color-main);
183
+ box-shadow: 0 0 0 2px var(--color-white);
184
+ pointer-events: none;
185
+ }
@@ -0,0 +1,48 @@
1
+ import type { ReactNode, MouseEvent } from 'react';
2
+ import type { WordSearchResultItem } from '../../types/wordSearch';
3
+ import './WordTableButton.css';
4
+ /** @public */
5
+ export interface WordTableButtonProps {
6
+ /** 단어표 내용(썸네일 미리보기 + 개수) */
7
+ items: WordSearchResultItem[];
8
+ /** 단어표 이름 */
9
+ name: string;
10
+ /** 설명 — 제목 아래 body-3로 표시(있을 때만) */
11
+ description?: string;
12
+ /** 생성일(ISO) — 메타(날짜)에 표시. 없으면 개수만. */
13
+ createdAt?: string;
14
+ /** 스토어 발행 배지 표시 */
15
+ published?: boolean;
16
+ /** 발행 배지 라벨(i18n 주입) */
17
+ publishedLabel?: string;
18
+ /** 활성 공유 링크 존재 배지 표시(썸네일 우상단) */
19
+ shared?: boolean;
20
+ /** 공유 배지 라벨(i18n 주입) */
21
+ sharedLabel?: string;
22
+ /** 최근 생성·미열람 표 표시 — 우상단 원형 배지(circle badge) */
23
+ isNew?: boolean;
24
+ /** 게시자명 — 지정 시 하단에 게시자·발행일·좋아요/다운로드 수(스토어 푸터)를 표시 */
25
+ publisherName?: string;
26
+ /** 발행일(ISO) — 게시자명 옆에 상대 시간으로 표시 */
27
+ publishedAt?: string;
28
+ /** 좋아요 수 — 지정 시(0 포함) 하트 배지로 표시 */
29
+ likeCount?: number;
30
+ /** 다운로드 수 — 지정 시(0 포함) 다운로드 배지로 표시 */
31
+ downloadCount?: number;
32
+ /** 게시자명 클릭(게시자 프로필/필터 이동 등) */
33
+ onPublisherClick?: () => void;
34
+ /** 선택 상태(불러오기 팝업 등 선택용) */
35
+ selected?: boolean;
36
+ /** 카드 클릭(미리보기/열기) */
37
+ onClick?: () => void;
38
+ /** 더보기 메뉴 */
39
+ onMore?: (e: MouseEvent<Element>) => void;
40
+ /** 제목 영역 오버라이드(인라인 이름 바꾸기 등). 지정 시 클릭·더보기 비활성. */
41
+ titleNode?: ReactNode;
42
+ className?: string;
43
+ }
44
+ /**
45
+ * @public 단어표를 '문서형' 미리보기 카드로 표현하는 컴포넌트.
46
+ * 내용 썸네일(WordTableThumbnail) + 이름 + 날짜·개수 + (발행 배지 / 더보기 / 스토어 푸터).
47
+ */
48
+ export default function WordTableButton({ items, name, description, createdAt, published, publishedLabel, shared, sharedLabel, isNew, publisherName, publishedAt, likeCount, downloadCount, onPublisherClick, selected, onClick, onMore, titleNode, className, }: WordTableButtonProps): import("react").JSX.Element;
@@ -0,0 +1,28 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cx } from '../../utils/cx';
4
+ import { useTranslation } from 'react-i18next';
5
+ import WordTableThumbnail from './WordTableThumbnail';
6
+ import Badge from '../Badge';
7
+ import Button from '../Button';
8
+ import { formatRelativeTime } from '../../utils/date';
9
+ import './WordTableButton.css';
10
+ /**
11
+ * @public 단어표를 '문서형' 미리보기 카드로 표현하는 컴포넌트.
12
+ * 내용 썸네일(WordTableThumbnail) + 이름 + 날짜·개수 + (발행 배지 / 더보기 / 스토어 푸터).
13
+ */
14
+ export default function WordTableButton({ items, name, description, createdAt, published, publishedLabel, shared, sharedLabel, isNew, publisherName, publishedAt, likeCount, downloadCount, onPublisherClick, selected, onClick, onMore, titleNode, className, }) {
15
+ const { t } = useTranslation();
16
+ const renaming = titleNode != null;
17
+ const hasStoreFooter = publisherName != null || publishedAt != null || likeCount != null || downloadCount != null;
18
+ const handleKey = (e) => {
19
+ if (!renaming && (e.key === 'Enter' || e.key === ' ')) {
20
+ e.preventDefault();
21
+ onClick?.();
22
+ }
23
+ };
24
+ return (_jsxs("div", { className: cx('word-table-button', selected ? 'word-table-button--selected' : '', !hasStoreFooter ? 'word-table-button--no-footer' : '', className), role: "button", tabIndex: 0, "aria-label": name, onClick: renaming ? undefined : onClick, onKeyDown: handleKey, children: [isNew && _jsx("span", { className: "word-table-button__new-dot", "aria-label": t('myWordTable.newBadge', '새로 만든 표') }), _jsx(WordTableThumbnail, { items: items, className: "word-table-button__thumb" }), _jsxs("div", { className: "word-table-button__info", children: [_jsxs("div", { className: "word-table-button__info-text", children: [titleNode ?? _jsx("div", { className: "word-table-button__title h4", children: name }), description && _jsx("div", { className: "word-table-button__desc body-3", children: description })] }), onMore && !renaming && (_jsx(Button, { className: "word-table-button__more", size: 32, type: "dot", variant: "transparent-gray", useBorder: false, icon: "ellipsis",
25
+ /* 하드코딩 '더보기'였다(영어 화면에서도 한국어로 남았다). 목록에 표가
26
+ 여러 개면 이름이 같은 버튼이 여러 개이기도 해서 이름을 함께 넣는다. */
27
+ ariaLabel: t('common.moreFor', { name }), onClick: (e) => { e.stopPropagation(); onMore(e); } }))] }), (createdAt || published || shared) && (_jsxs("div", { className: "word-table-button__meta-row", children: [_jsx("span", { className: "word-table-button__meta caption-1", children: createdAt ? formatRelativeTime(createdAt, t) : '' }), _jsxs("span", { className: "word-table-button__badges", children: [published && (_jsx(Badge, { className: "word-table-button__badge", size: "small", variant: "main", fill: "soft", iconLeft: "book-marked", label: publishedLabel ?? '발행됨' })), shared && (_jsx(Badge, { className: "word-table-button__badge", size: "small", fill: "soft", iconLeft: "link", label: sharedLabel ?? '공유 중' }))] })] })), hasStoreFooter && (_jsxs("div", { className: "word-table-button__footer", children: [_jsxs("span", { className: "word-table-button__store-by", children: [publisherName && (_jsx("button", { className: "training-card__publisher body-4", type: "button", onClick: (e) => { e.stopPropagation(); onPublisherClick?.(); }, children: publisherName })), publishedAt && _jsx("span", { className: "training-card__date body-4", children: formatRelativeTime(publishedAt, t) })] }), _jsxs("span", { className: "word-table-button__store-stats", children: [likeCount != null && _jsx(Badge, { size: "small", fill: "soft", variant: "like", iconLeft: "heart", label: String(likeCount) }), downloadCount != null && _jsx(Badge, { size: "small", fill: "soft", variant: "main", iconLeft: "download", label: String(downloadCount) })] })] }))] }));
28
+ }
@@ -0,0 +1,56 @@
1
+ .word-table-thumb {
2
+ display: grid;
3
+ gap: 1px;
4
+ background: var(--color-darkWhite);
5
+ border-bottom: 1px solid var(--color-darkWhite);
6
+ height: 140px;
7
+ /* **행은 내용보다 작아지지 않는다.**
8
+ *
9
+ * 예전에는 `1fr` 이었다. 썸네일은 항목 수만큼 행을 만드는데(12개 → 6행), 높이는
10
+ * 고정이라 항목이 늘수록 행이 짜부라진다. 대립쌍표는 한 칸에 낱말이 **둘**이라
11
+ * 먼저 무너졌다 — 12개짜리 표에서 행이 39px 인데 내용은 54px 이라, 글자가 칸을
12
+ * 넘어 아랫줄과 겹쳐 보였다(2026-08-28 실측, 겹친 쌍 8개).
13
+ *
14
+ * `minmax(min-content, 1fr)` 는 두 가지를 함께 지킨다 —
15
+ * 항목이 적으면 예전처럼 늘어나 상자를 채우고, 많으면 글자 크기를 지킨 채 멈춘다.
16
+ * 넘치는 행은 아래 `overflow: hidden` 이 자른다. **미리보기는 잘려도 읽혀야 한다.** */
17
+ grid-auto-rows: minmax(min-content, 1fr);
18
+ overflow: hidden;
19
+ }
20
+
21
+ .word-table-thumb__cell {
22
+ display: flex;
23
+ flex-direction: column;
24
+ align-items: center;
25
+ justify-content: center;
26
+ padding: 4px;
27
+ background: var(--color-white);
28
+ gap: 1px;
29
+ overflow: hidden;
30
+ min-height: 0;
31
+ }
32
+
33
+ .word-table-thumb__word {
34
+ color: var(--color-black);
35
+ }
36
+
37
+ /* 줄간격을 좁힌다. **선택자를 한 단계 겹쳐 쓴 이유가 있다** — 쓰는 쪽이 `body-3` 을
38
+ 함께 붙이는데 그쪽도 클래스 하나라, 단순 `.word-table-thumb__word` 로는 나중에 오는
39
+ `body-3`(22px)에 진다. 한때 여기 `line-height: 1` 이 적혀 있었지만 **한 번도 적용된
40
+ 적이 없었다**(실측: 계산값 22px).
41
+
42
+ 미리보기는 읽히기만 하면 되고, 22px → 17px 로 줄이면 한 칸에 두 낱말이 들어가는
43
+ 대립쌍표에서 행 하나가 63px → 47px 이 된다. 그래야 최대 12칸이 다 보인다. */
44
+ .word-table-thumb .word-table-thumb__word {
45
+ line-height: 1.2;
46
+ }
47
+
48
+ .word-table-thumb__divider {
49
+ display: block;
50
+ width: 30%;
51
+ height: 1px;
52
+ background: var(--color-darkWhite);
53
+ /* 위아래 4px 씩이면 대립쌍 한 칸이 8px 더 두꺼워지고, 그것이 여섯 행이면 48px 다.
54
+ 미리보기에서는 1px 로도 두 낱말이 충분히 갈린다. */
55
+ margin: 1px 0;
56
+ }
@@ -0,0 +1,10 @@
1
+ import type { WordSearchResultItem } from '../../types/wordSearch';
2
+ import './WordTableThumbnail.css';
3
+ /**
4
+ * @public 단어표 내용 미니 미리보기(그리드 썸네일).
5
+ * 단어표 불러오기 팝업·나의 단어표 카드 등에서 공유하는 '문서형' 미리보기.
6
+ */
7
+ export default function WordTableThumbnail({ items, className }: {
8
+ items: WordSearchResultItem[];
9
+ className?: string;
10
+ }): import("react").JSX.Element;