@ihabdevteam/core 0.128.0 → 0.131.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 (120) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/dist/components.cjs.js +177 -177
  3. package/dist/components.esm.css +2 -2
  4. package/dist/hooks.cjs.js +1 -1
  5. package/dist/i18n.cjs.js +3 -3
  6. package/dist/ihabdevteam-core-tokens.css +1 -1
  7. package/dist/ihabdevteam-core.cjs.js +182 -182
  8. package/dist/ihabdevteam-core.css +1 -1
  9. package/dist/ihabdevteam-core.d.ts +282 -80
  10. package/dist/packages/core/src/components/AudioMeter.js +29 -15
  11. package/dist/packages/core/src/components/Avatar.js +6 -2
  12. package/dist/packages/core/src/components/Badge.d.ts +5 -1
  13. package/dist/packages/core/src/components/Badge.js +19 -5
  14. package/dist/packages/core/src/components/BottomNav.css +15 -0
  15. package/dist/packages/core/src/components/BottomNav.d.ts +6 -0
  16. package/dist/packages/core/src/components/BottomNav.js +12 -1
  17. package/dist/packages/core/src/components/BulkBar.d.ts +2 -1
  18. package/dist/packages/core/src/components/BulkBar.js +9 -2
  19. package/dist/packages/core/src/components/Calendar.js +1 -1
  20. package/dist/packages/core/src/components/ColorPicker.d.ts +3 -1
  21. package/dist/packages/core/src/components/ColorPicker.js +4 -2
  22. package/dist/packages/core/src/components/DatePicker.d.ts +2 -1
  23. package/dist/packages/core/src/components/DatePicker.js +9 -4
  24. package/dist/packages/core/src/components/Effect/EffectPartyPopper.d.ts +9 -0
  25. package/dist/packages/core/src/components/Effect/EffectPartyPopper.js +30 -25
  26. package/dist/packages/core/src/components/EmptyState.js +3 -1
  27. package/dist/packages/core/src/components/ErrorState.js +3 -1
  28. package/dist/packages/core/src/components/FilterPanel.js +7 -0
  29. package/dist/packages/core/src/components/Header.d.ts +6 -0
  30. package/dist/packages/core/src/components/Header.js +27 -1
  31. package/dist/packages/core/src/components/Icon.css +22 -0
  32. package/dist/packages/core/src/components/Icon.d.ts +7 -3
  33. package/dist/packages/core/src/components/Icon.js +7 -1
  34. package/dist/packages/core/src/components/IconGridMenu.css +4 -2
  35. package/dist/packages/core/src/components/IconGridMenu.d.ts +1 -1
  36. package/dist/packages/core/src/components/IconGridMenu.js +6 -3
  37. package/dist/packages/core/src/components/LandingHeader.js +6 -3
  38. package/dist/packages/core/src/components/Loader.d.ts +1 -1
  39. package/dist/packages/core/src/components/Loader.js +7 -2
  40. package/dist/packages/core/src/components/NoticeBox.d.ts +5 -0
  41. package/dist/packages/core/src/components/NoticeBox.js +3 -1
  42. package/dist/packages/core/src/components/Pagination.d.ts +2 -2
  43. package/dist/packages/core/src/components/Pagination.js +2 -2
  44. package/dist/packages/core/src/components/PanelRow.js +5 -1
  45. package/dist/packages/core/src/components/PassCard/PassCard.d.ts +10 -1
  46. package/dist/packages/core/src/components/PassCard/PassCardBg.css +33 -0
  47. package/dist/packages/core/src/components/PaymentPlan.d.ts +8 -1
  48. package/dist/packages/core/src/components/Popup/ConfirmPopup.d.ts +1 -1
  49. package/dist/packages/core/src/components/Popup/ListPopup.d.ts +8 -1
  50. package/dist/packages/core/src/components/Popup/ListPopup.js +17 -2
  51. package/dist/packages/core/src/components/Popup/Popup.css +1 -1
  52. package/dist/packages/core/src/components/Popup/Popup.d.ts +1 -1
  53. package/dist/packages/core/src/components/Popup/TrainingResultPopup.js +3 -2
  54. package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.d.ts +4 -1
  55. package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.js +8 -3
  56. package/dist/packages/core/src/components/Popup/customerDetailUtils.d.ts +7 -2
  57. package/dist/packages/core/src/components/Popup/customerDetailUtils.js +20 -3
  58. package/dist/packages/core/src/components/ProgressIndicator.d.ts +2 -5
  59. package/dist/packages/core/src/components/PromoBanner.js +23 -6
  60. package/dist/packages/core/src/components/RadioGroup.d.ts +3 -1
  61. package/dist/packages/core/src/components/RadioGroup.js +2 -2
  62. package/dist/packages/core/src/components/Report/ReportDocument.d.ts +4 -1
  63. package/dist/packages/core/src/components/Report/ReportDocument.js +4 -1
  64. package/dist/packages/core/src/components/Section.d.ts +7 -1
  65. package/dist/packages/core/src/components/Section.js +6 -2
  66. package/dist/packages/core/src/components/Table.d.ts +1 -1
  67. package/dist/packages/core/src/components/TextField.css +2 -1
  68. package/dist/packages/core/src/components/TextField.js +10 -2
  69. package/dist/packages/core/src/components/Toggle.js +4 -1
  70. package/dist/packages/core/src/components/Tooltip/DebugTooltip.d.ts +1 -6
  71. package/dist/packages/core/src/components/Tooltip/DebugTooltip.js +4 -7
  72. package/dist/packages/core/src/components/Tooltip/Tooltip.js +11 -1
  73. package/dist/packages/core/src/components/Training/AudioPlayerWaveForm.js +3 -3
  74. package/dist/packages/core/src/components/Training/TrainingBlock.d.ts +8 -3
  75. package/dist/packages/core/src/components/Training/TrainingStepConfirmWithText.js +10 -11
  76. package/dist/packages/core/src/components/Training/trainingBlockButtonTypes.d.ts +4 -4
  77. package/dist/packages/core/src/components/Training/trainingScenario.d.ts +6 -2
  78. package/dist/packages/core/src/components/Word/WordSearchResultBlock.js +3 -1
  79. package/dist/packages/core/src/components/Word/WordTableBlock.js +6 -0
  80. package/dist/packages/core/src/components/Word/WordTableButton.d.ts +2 -2
  81. package/dist/packages/core/src/components/Word/WordTableButton.js +1 -1
  82. package/dist/packages/core/src/components/Word/wordTableBlockTypes.d.ts +1 -1
  83. package/dist/packages/core/src/components/Word/wordTableScoring.d.ts +1 -4
  84. package/dist/packages/core/src/components/Word/wordTableScoring.js +1 -4
  85. package/dist/packages/core/src/components/WordTable.d.ts +1 -1
  86. package/dist/packages/core/src/components/WordTable.js +3 -1
  87. package/dist/packages/core/src/components.d.ts +3 -0
  88. package/dist/packages/core/src/components.js +5 -0
  89. package/dist/packages/core/src/hooks/useDeviceManagement.js +11 -2
  90. package/dist/packages/core/src/hooks/useFontScale.js +3 -1
  91. package/dist/packages/core/src/hooks/useLucideIcon.d.ts +3 -4
  92. package/dist/packages/core/src/hooks/useLucideIcon.js +3 -4
  93. package/dist/packages/core/src/hooks/usePasswordChange.js +20 -7
  94. package/dist/packages/core/src/hooks/useVisitAllPanel.d.ts +7 -0
  95. package/dist/packages/core/src/hooks/useVisitAllPanel.js +8 -0
  96. package/dist/packages/core/src/hooks/useWordMeanings.js +3 -0
  97. package/dist/packages/core/src/hooks/useWordTrainingFilter.d.ts +5 -0
  98. package/dist/packages/core/src/hooks/useWordTrainingFilter.js +23 -33
  99. package/dist/packages/core/src/i18n/locales/en.json +34 -6
  100. package/dist/packages/core/src/i18n/locales/ko.json +34 -6
  101. package/dist/packages/core/src/tokens.css +2 -1
  102. package/dist/packages/core/src/utils/CategoryData.d.ts +12 -40
  103. package/dist/packages/core/src/utils/CategoryData.js +15 -10
  104. package/dist/packages/core/src/utils/assets.js +7 -3
  105. package/dist/packages/core/src/utils/clipboard.js +16 -2
  106. package/dist/packages/core/src/utils/errorMessage.d.ts +2 -1
  107. package/dist/packages/core/src/utils/errorMessage.js +19 -2
  108. package/dist/packages/core/src/utils/getTrainingData.d.ts +8 -1
  109. package/dist/packages/core/src/utils/getTrainingData.js +8 -1
  110. package/dist/packages/core/src/utils/koreanSyllable.d.ts +15 -12
  111. package/dist/packages/core/src/utils/koreanSyllable.js +16 -13
  112. package/dist/packages/core/src/utils/lucideIconSet.d.ts +4 -3
  113. package/dist/packages/core/src/utils/lucideIconSet.js +4 -3
  114. package/dist/packages/core/src/utils/ttsResolver.d.ts +5 -0
  115. package/dist/packages/core/src/utils/wordTrainingGenerators.d.ts +3 -3
  116. package/dist/packages/core/src/utils/wordTrainingGenerators.js +28 -7
  117. package/dist/packages/core/src/version.d.ts +1 -1
  118. package/dist/packages/core/src/version.js +1 -1
  119. package/dist/utils.cjs.js +2 -2
  120. package/package.json +4 -2
package/CHANGELOG.md CHANGED
@@ -7,6 +7,106 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.131.0
11
+
12
+ 0.130.0 에서 "정해야 할 것" 으로 남겼던 넷을 정한 판이다. 공개 prop·타입은 걷지 않았다.
13
+
14
+ ### 더함
15
+
16
+ - **BottomNav `NavItem.badgeCount`**: 단추 우상단 원형 숫자 배지(SideNav 배지와 같은 모양, 99 에서 자름). 0/없음이면 숨긴다.
17
+ 배지는 낭독기에서 숨기고 개수를 단추 이름에 붙인다 — `"숙제, 3개"`(사전 열쇠 `nav.badgeLabel`).
18
+ 넘쳐 "…" 메뉴로 간 항목은 메뉴 항목에 배지가 서고, "…" 단추에는 넘친 항목 개수의 합이 선다.
19
+ - **Header 모바일**: `items[].badge` 를 하단 내비의 `badgeCount` 로 넘긴다 — 데스크톱 SideNav 에만 보이던 숙제 배지가 모바일에도 보인다.
20
+ **단추 이름이 `"숙제"` → `"숙제, N개"` 로 바뀌므로 `getByRole('button', { name: '숙제' })` 로 찾던 시험은 이름을 고친다.**
21
+
22
+ ### 바뀜
23
+
24
+ - **PassCardBg `variant`**: default(흰 바탕 + main·sub 원) · blue(짙은 main 바탕 + 흰 반투명 원) · dark(부드러운 검정 바탕 + main·sub 원)가
25
+ 실제로 다르게 그려진다 — 스타일이 없어 셋이 빈 바탕으로 같았다. 기존 토큰만 쓴다. 글자 색은 정하지 않으니 blue·dark 에서는
26
+ PassCard 의 `textColor`·`subColor`·`copyrightColor` 를 넘긴다.
27
+ - **`TOPIC_TYPES`**: 문장 훈련 주제 7개의 `desc` 를 걷었다 — 훈련 유형(`TRAINING_TYPES`)의 설명을 복사해 넣어 모두 같은 문구였다. `desc` 를 읽던 화면은 `undefined` 를 받는다(네 소비자 모두 주제 `desc` 를 읽지 않음).
28
+
29
+ ### 놀이터
30
+
31
+ - 긴 코드 예(20줄 넘음 → 앞 12줄)와 props 표(12행 넘음 → 앞 8행)를 접는다. "전체 보기" 로 펴고, ⌘/Ctrl+F·인쇄 때는 페이지의 접힘을 모두 편다.
32
+
33
+ ## 0.130.0
34
+
35
+ 놀이터 문서를 소스와 한 줄씩 맞추다 드러난 결함을 고친 판이다. 공개 prop·타입은 하나도 걷지 않았다
36
+ (안 쓰이던 것은 `@deprecated`). 항목마다 시험을 붙이고, 고친 줄을 되돌리면 시험이 붉어지는 것을 확인했다.
37
+
38
+ ### 더함 — 훈련 소리 모델·파형 눈금을 배럴에서 내보낸다
39
+
40
+ `@ihabdevteam/core/components`(와 뿌리)에서 `noiseRatioOf` · `effectiveSpeechVolume` · `effectiveNoiseVolume` ·
41
+ `noiseElementVolume` · `mergeNoiseSettings` · `DEFAULT_NOISE_SETTINGS` · `NOISE_RATIO_MAX` · `NOISE_RATIO_STEP` ·
42
+ `LEVEL_MAX` · `levelToPct` · `pctToLevel` · `NoisePlayerContext` · `useNoisePlayer`(+ `NoisePlayerContextValue` 타입),
43
+ `waveBarPx` · `waveBarVal` · `WAVE_H1_PX` · `WAVE_HMAX_PX` · `WAVE_A_MAX`. 앱이 딥 경로
44
+ (`components/Training/NoisePlayerContext`)로 가져가던 것들이다 — 딥 경로도 그대로 된다.
45
+
46
+ ### 바뀜 — 앱에서 보이는 동작
47
+
48
+ - **Toggle**: `role="switch"` — 낭독기가 켬/끔으로 읽는다. **`getByRole('checkbox')` 로 Toggle 을 찾던 시험은 `'switch'` 로.**
49
+ - **useWordTrainingFilter**: `contrastCount` 가 고른 훈련 음소 칸 수(파생값)다 — 올라가기만 하던 결함이라 예전에 저장된 높은 값은 무시한다.
50
+ 설정 팝업에서 취소하면 품사·어종도 되돌아가고, `groupKey` 를 바꿔도 '글자 입력'(direct) 보기가 유지된다.
51
+ - **WordSearchResultBlock**: 검색어를 가진 채 처음 그려질 때도 기본 정렬이 '시작 우선'이다.
52
+ - **음소 탈락·대립 문제**: 오답에 정답과 발음이 같은 모음(ㅔ/ㅐ, ㅖ/ㅒ, ㅚ/ㅞ/ㅙ)이 나오지 않는다.
53
+ - **PanelRow variant="button"**: `onClick` 이 한 번만 불린다(단추와 행 양쪽에 걸려 두 번이었다). 행 전체는 더 이상 단추가 아니다 — 꺼진 단추인데 행을 누르면 불리던 것도 막힌다.
54
+ - **Header 모바일 하단 내비**: 비활성 항목이 눌리지 않고 href 항목은 새 창으로 열린다(항목을 캐스팅만 하던 것). `malgwiItems`·`managerItems` 는 `@deprecated`.
55
+ - **ListPopup**: `countLabel` 함수 꼴이 반영된다. `keepOpenOnSelect` 는 `@deprecated`(원래 효과가 없었다 — 팝업은 골라도 닫히지 않는다).
56
+ - **TextField**: 자동완성 후보를 Enter 로 고르면 `onEnter` 도, 폼 제출도 일어나지 않는다. readOnly 칸이 Tab 으로 닿는다.
57
+ - **IconGridMenu**: 고른 단추가 `disabled` 대신 `aria-pressed` — 키보드로 닿고 포커스 표시가 보인다. `selected={null}` 로 선택을 풀 수 있다.
58
+ - **TrainingStepConfirmWithText**: 고른 답의 강조가 곧바로 풀리던 것을 고쳤다(문장이 바뀔 때만 풀린다).
59
+ - **WordTable**: 편집 모드에서도 구어체 발음이 보인다.
60
+ - **Tooltip**: `onClose` 없는 툴팁이 Esc·바깥 누름 뒤 흐려진 채 남지 않는다. 앵커 없이 제자리에 그린 툴팁은 document 의 Esc·바깥 누름·Tab 되감기를 듣지 않는다.
61
+ - **usePasswordChange**: 변경 콜백이 거절해도 로딩이 풀리고 오류 문구가 보인다.
62
+ - **Avatar**: 이미지가 실패한 뒤 `src` 를 바꾸면 다시 이미지를 그린다. **PromoBanner**: `titleColor`·`descriptionColor` 를 거두면 배경 색으로 돌아간다.
63
+ - **Icon**: SVG 마스크 모드가 실제로 그려진다(규칙이 없어 빈 자리였다 — 글자색, `size` 반영). **EffectPartyPopper**: `duration` 이 조각 수명에 반영되고, 스코프 CSS 안에서도 브랜드색을 읽는다.
64
+ - **useDeviceManagement**: 방향이 '좌'·'우' 가 아닌 폼은 무시한다(던졌다). **useFontScale**: 범위 밖 저장값을 조인다. **useWordMeanings**: 조회 거절이 처리되지 않은 거절로 새지 않는다.
65
+ - **copyText**: 복사 뒤 원래 포커스로 돌아간다. **setAssetBaseUrl**: CJS 묶음이 여럿이어도 공유된다(globalThis).
66
+ - **TOPIC_TYPES**: '한국 전통음식' 앞 공백, '건강상식' 오타.
67
+
68
+ ### 더함 — 선택 prop·반환값
69
+
70
+ - `Section.headingLevel`(1~6 — 제목을 h1~h6 로, 낭독기 제목 목록에 나온다. 권장) · `RadioGroup.ariaLabel` · `ColorPicker.ariaLabel`
71
+ - `WordDataUpdatePopup.onClose` — 오류인데 `onRetry` 가 없으면 "닫기" 단추(닫을 길이 없었다)
72
+ - `useVisitAllPanel` 반환 `vapPageSizeOptions`(번역 — 상수 `VAP_PAGE_SIZE_OPTIONS` 는 그대로) · `formatDuration(…, durationStr?)`
73
+ - `PaymentPlanData.group` 타입 · `AudioMeter` 가 `aria-valuenow`·`min`·`max`·`valuetext` 를 단다(글자 갱신 주기)
74
+ - `Badge`: dot 에 icon 이 없으면 체크를 그린다, bar 가 `aria-label` 을 받는다. `LandingHeader` 서랍 id 가 `useId`(한 화면에 둘이어도 안 겹침)
75
+ - `BulkBar`: 숨은 막대가 `inert`·`aria-hidden` 이라 Tab·낭독기에서 빠진다
76
+ - 개발 경고: `FilterPanel` allOption 절에 값 '전체' 보기가 있으면(구별 안 됨), `WordTableBlock` 표시 모드에서 `onAddItem` 을 `showCellCount` 없이 주면(추가 칸이 안 생김)
77
+
78
+ ### 번역 — 박혀 있던 한국어 기본 문구가 사전을 탄다(ko 값은 지금 문구와 같다)
79
+
80
+ BulkBar '선택 해제' · DatePicker 안내·연월 · Badge 이름 · Loader(`loader.loading` — ko 사전 '불러오는 중…', 전에는 'Loading') ·
81
+ WordTableButton 배지 · TrainingResultPopup '(내용없음)' · DebugResultLauncher 라벨 · usePasswordChange 안내 ·
82
+ getErrorMessage 기본값 · formatDuration. 사전 열쇠 18개 더함, 부르는 곳이 없어진 `training.contrast.diffPhonemeCount` 걷음.
83
+
84
+ ### 폼 안에서 제출되던 단추
85
+
86
+ NoticeBox 닫기 · EmptyState 행동 · ErrorState 다시 시도 · Calendar 달 넘김 · DebugResultLauncher 에 `type="button"`.
87
+
88
+ ### JSDoc 을 동작대로
89
+
90
+ Popup large 1080px · ConfirmPopup 기본 480px · Table loading 머리 유지 · ReportDocument 다시 재는 때 · Loader label ·
91
+ PassCard bg 기본값(`startDate`·`queueIndex` @deprecated) · TrainingBlock(`count` @deprecated, selectedIds·size 치수) ·
92
+ koreanSyllable 포함 매칭 · mergeQuestionText·soundOf 예 · computeDailySelection 의 어제 세트 · lucide "지연 로드" ·
93
+ Pagination·ProgressIndicator·DebugTooltip 첫 문단의 앱 이름·사연 · `ScenarioPage.steps` 타입 `ScenarioStep[] | ReactNode[]` ·
94
+ `CreateTTSResolverOptions.pitch` @deprecated · NoticeBox `notices[].variant` @deprecated.
95
+
96
+ ## 0.129.0
97
+
98
+ ### 바뀜 — 태블릿(768–1023px)의 **h3 를 데스크톱과 같은 20px / 30px** 로
99
+
100
+ 태블릿 블록이 h3 를 18px / 28px 로 줄이고 있었다. 사용자 결정으로 데스크톱과
101
+ 맞춘다 — 태블릿 블록에서 h3 두 줄을 걷어 루트 값을 물려받게 했다.
102
+ 모바일(≤767px)의 17px / 26px 은 그대로다.
103
+
104
+ 실측(놀이터, `.h3` · `.h3b`): 900px 20/30 · 1400px 20/30 · 500px 17/26.
105
+ 태블릿의 제목 사다리는 그대로 선다 — h2 22 > h3 20 > h4 16.
106
+
107
+ 줄이 **없어서** 맞는 꼴이라, 다른 제목들을 맞추다 한 줄을 되살리면 조용히
108
+ 되돌아간다. `test/tabletH3Size.test.ts` 가 그 자리를 막는다.
109
+
10
110
  ## 0.128.0
11
111
 
12
112
  ### 더해짐 — `Popup` 의 **어두운 바탕을 누르면 닫힌다** (기본값)