@ihabdevteam/core 0.133.0 → 0.134.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 (42) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/components.cjs.js +176 -176
  3. package/dist/components.esm.css +1 -1
  4. package/dist/hooks.cjs.js +1 -1
  5. package/dist/i18n.cjs.js +2 -2
  6. package/dist/ihabdevteam-core.cjs.js +181 -181
  7. package/dist/ihabdevteam-core.d.ts +8 -2
  8. package/dist/packages/core/src/components/Breadcrumb.js +5 -1
  9. package/dist/packages/core/src/components/Dialog.js +32 -9
  10. package/dist/packages/core/src/components/Header.css +2 -0
  11. package/dist/packages/core/src/components/Header.js +4 -1
  12. package/dist/packages/core/src/components/LandingHeader.js +18 -1
  13. package/dist/packages/core/src/components/Pagination.js +5 -2
  14. package/dist/packages/core/src/components/Panel.d.ts +1 -1
  15. package/dist/packages/core/src/components/Panel.js +4 -1
  16. package/dist/packages/core/src/components/PassCard/passCardProduct.js +6 -0
  17. package/dist/packages/core/src/components/PaymentPlan.d.ts +6 -0
  18. package/dist/packages/core/src/components/PaymentPlan.js +5 -3
  19. package/dist/packages/core/src/components/PromoBanner.js +1 -1
  20. package/dist/packages/core/src/components/SideNav.js +1 -1
  21. package/dist/packages/core/src/components/SoundCompass.js +10 -1
  22. package/dist/packages/core/src/components/Tooltip/MenuTooltip.js +7 -2
  23. package/dist/packages/core/src/components/Training/TrainingStepTextBox.js +1 -1
  24. package/dist/packages/core/src/components/Training/useNoiseFade.js +22 -1
  25. package/dist/packages/core/src/components/Training/useTTSPlayback.js +9 -0
  26. package/dist/packages/core/src/components/Word/WordSearchResultBlock.js +3 -2
  27. package/dist/packages/core/src/hooks/useWordTrainingFilter.js +9 -4
  28. package/dist/packages/core/src/hooks/wordTrainingFilterModel.d.ts +1 -1
  29. package/dist/packages/core/src/hooks/wordTrainingFilterModel.js +7 -2
  30. package/dist/packages/core/src/i18n/locales/en.json +11 -0
  31. package/dist/packages/core/src/i18n/locales/ko.json +11 -0
  32. package/dist/packages/core/src/utils/format.js +17 -1
  33. package/dist/packages/core/src/utils/koreanPronunciation.js +7 -0
  34. package/dist/packages/core/src/utils/pressable.js +4 -0
  35. package/dist/packages/core/src/utils/savedWordTables.js +2 -1
  36. package/dist/packages/core/src/utils/wordTrainingPool.d.ts +7 -0
  37. package/dist/packages/core/src/utils/wordTrainingPool.js +30 -0
  38. package/dist/packages/core/src/utils/wordTrainingRuntime.js +27 -13
  39. package/dist/packages/core/src/version.d.ts +1 -1
  40. package/dist/packages/core/src/version.js +1 -1
  41. package/dist/utils.cjs.js +2 -2
  42. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,70 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.134.0
11
+
12
+ 0.133.0 뒤 2차 검수 판이다 — 소리방향성(SoundCompass)·단어 기능·레이아웃/결제를 새로 훑었다. 항목마다 시험을 붙이고 고친 줄을
13
+ 되돌리면 붉어지는 것을 확인했다. 걷은 것은 없다. **새 선택 prop 하나**(`PaymentPlanTier.onceOnly` — 안 주면 전과 같음)과 사전 열쇠
14
+ `soundCompass.state.*`·`breadcrumb.ariaLabel` 을 더했다.
15
+
16
+ ### 소비자에게 먼저
17
+
18
+ - **말귀 `admin/src/libs/phone.test.ts` "고치는 대상이 실재한다" 가 붉어진다 — 의도다.** 코어 `formatPhone` 이 050X·0303 을 네 자리
19
+ 앞자리로 끊는다. 시험에 적힌 대로 `formatPhoneKr` 을 걷어도 된다.
20
+ - **영어 결제 화면을 고치려면 말귀 `paymentProducts` 의 오픈 특가 tier 에 `onceOnly: true`** 를 넣는다(아래 PaymentPlan). 안 넣으면
21
+ 한국어 화면은 전과 같고 영어 화면만 그대로 남는다.
22
+ - SoundCompass 스피커 단추 이름이 상태를 붙인다("13, 정답"). 이름으로 찾는 시험은 고친다(지금 소비자 시험엔 없음).
23
+ - 모바일 Header 햄버거 단추 이름이 읽지 않은 알림이 있을 때 "메뉴 열기, N개".
24
+
25
+ ### 바뀜 — 훈련
26
+
27
+ - **실단어 생성기가 필터를 따른다**: MERGE_2/3_PHONEMES·DROP_FINAL_CONSONANT_FROM_1SYLL·REMOVE_CONSONANT_AND_IDENTIFY_PHONEME 가
28
+ 난이도 등급·단어 구성(초성/중성/종성·음절 수)을 무시해 초성 ㄱ·1등급으로 설정해도 '카·라·파…' 가 나왔다. CHANGE_1_SYLL_IN_2/3SYLL 은
29
+ 등급이 빠졌다. `buildUsablePool` 과 같은 정답 거르개를 건다 — 조건에 맞는 단어가 없으면 빈 결과(카드 비활성)가 된다.
30
+ - **SAME_OR_DIFF**: 같음·다름이 늘 교대(같음·다름·같음…)라 듣지 않고도 맞힐 수 있었고 같은 단어가 반복됐다 — 절반씩 섞고 겹치지 않게.
31
+ - **단어 훈련 필터**: 글자↔발음 보기를 오가면 종성 선택이 대표음으로 바뀌어(ㅅ → ㄷ, ㄳ → ㄱ) 훈련 대상이 달라진 채 저장되던 것.
32
+ `resetKey` 초기화가 `defaultImageOnly` 를 무시하던 것.
33
+ - **useTTSPlayback**: Chrome·Safari 는 cancel() 한 발화에도 end 를 내 **정지가 문항 완료로** 세졌고, 떠난 뒤 온 end 가 완료를 알렸다.
34
+ - **useNoiseFade**: 소음 종류를 바꾸는 150ms 안에 다른 페이드가 끼면 표시·파형은 새 종류인데 **소리는 이전 파일**이던 것.
35
+ - **발음 추천**: 받침 ㅎ(ㄶ·ㅀ) 뒤 ㅅ(표준발음법 제12항 2) — 놓소 → 노쏘, 많소 → 만쏘(전에는 녿쏘·만소).
36
+
37
+ ### 바뀜 — 소리방향성
38
+
39
+ - **SoundCompass**: 스피커 상태(소리 나는 중·들음·정답·오답)가 색과 이름 없는 아이콘으로만 보여 낭독기는 번호만 읽었다 —
40
+ 이름에 붙이고(`soundCompass.state.*`), 고른 칸은 `aria-pressed`.
41
+
42
+ ### 바뀜 — 오버레이·레이아웃
43
+
44
+ - **Dialog**: 스크롤 잠금을 제 손으로 되돌려 Popup 과 엇갈리면 스크롤이 일찍 풀리거나 **영영 굳던** 것(공유 카운터로), 인라인 `onClose`
45
+ 로 다시 그려질 때마다 ESC 스택 맨 위로 끼어들던 것, `closeOnEscape={false}` 인데 Esc 가 아래 팝업을 닫던 것(이제 삼킨다), 판 안에서
46
+ 누르고 바탕에서 떼면 닫히던 것. (지금 소비자 넷 모두 Dialog 를 쓰지 않는다.)
47
+ - **Header 모바일 햄버거**: 알림이 메뉴 안에만 있어 열어 봐야 새 알림을 알았다 — SideNav 알림과 같은 원형 배지, 이름에 수.
48
+ - **MenuTooltip**: 항목 배지 수가 단추 이름에서 빠져 "알림" 으로만 읽혔다(BottomNav 더보기·Header 유틸 메뉴).
49
+ - **pressable**(LandingBottomSticky·Calendar 방문 표시·LoadTablePopup): 안에 든 단추에서 누른 Enter 를 바깥 자리가 가로채 그 단추의
50
+ click 을 막던 것.
51
+ - **LandingHeader**: 서랍이 Esc 로 닫히지 않던 것, 넓은 화면을 거쳐 돌아오면 서랍이 다시 펼쳐지던 것.
52
+ - **Pagination**: 범위 밖 쪽(page > totalPages)에서 '이전' 이 범위 안으로 돌아오지 않던 것. **Panel** `empty`: 자식이 `false` 면 안 뜨던 것.
53
+ - **WordSearchResultBlock**: 결과 수가 같은 다른 검색이면 보던 쪽 번호가 남던 것 — 검색어가 바뀌면 1쪽.
54
+ - PromoBanner·TrainingStepTextBox 단추에 `htmlType="button"`. Breadcrumb `aria-label` 이 영어 'breadcrumb' 으로 박혀 있던 것(`breadcrumb.ariaLabel`).
55
+
56
+ ### 바뀜 — 결제·표시
57
+
58
+ - **PaymentPlan `tier.onceOnly`(새 선택 prop)**: 계정당 1회 tier 를 라벨의 '오픈 특가' 로만 판정해, 영어 화면에서 이미 산 특가 카드가 남고
59
+ **정가 30일권을 살 길이 없었다.** 주면 그것으로 판정한다(안 주면 예전처럼 라벨). 무료 판정도 '무료'·'0원' 글자만 봐 '₩0' 을 놓쳤다 —
60
+ 숫자가 모두 0 인 가격은 무료.
61
+ - **derivePassCard**: 영어 상품 이름('Open Special 30-Day Plan')에서 기간을 못 뽑아 영어 랜딩 요금 카드에 이름 전체가 큰 글씨로 찍혔다.
62
+ - **formatPhone**: 050X 안심번호·0303 은 앞자리 네 자리(`0507-1234-5678` 이 마지막 자리를 잃은 채 검증을 통과했다), 대표번호 여덟 자리는
63
+ 4-4(`1588-1234`).
64
+ - **duplicateTable**: 사본이 설명·검색 구성·묶음을 잃던 것.
65
+
66
+ ### 고치지 않은 것 — 결정이 필요하다
67
+
68
+ - **SoundCompass 화면 번호**가 스피커 id 가 아니라 배열 순번(idx+1)이다. 소리방향성은 `label=String(id)` 를 넘겨 낭독기 이름(13)과 화면
69
+ 숫자(7)가 어긋나고, 같은 앱의 격자 배치(id 표시)와도 다르다. 검사 화면에 보이는 숫자를 바꾸는 일이라 두었다.
70
+ - **useWordTrainingFilter `wordCount`** 가 품사·어종 필터를 반영하지 않는다 — 생성 런타임이 품사·어종을 모르는 구조라 따로 설계가 필요하다.
71
+ - **결과 캐시**가 같은 조건이면 세션 내내 같은 문제 세트를 돌려준다 — 성능을 위한 것인지 의도 확인이 필요하다.
72
+ - **useEditableList**: 편집 중에 온 서버 목록을 버린다 — 방금 저장한 편집과 어느 쪽이 이겨야 하는지 정해야 한다.
73
+
10
74
  ## 0.133.0
11
75
 
12
76
  2026-09-14 저녁 검수 판이다 — 오버레이·입력·훅·유틸을 네 갈래로 훑어 **실제로 재현된** 결함만 고쳤다. 항목마다 시험을 붙이고,