@ihabdevteam/core 0.135.0 → 0.136.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 (57) hide show
  1. package/CHANGELOG.md +75 -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.cjs.js +181 -181
  7. package/dist/ihabdevteam-core.d.ts +19 -3
  8. package/dist/packages/core/src/components/Alert.js +1 -1
  9. package/dist/packages/core/src/components/Button.css +5 -0
  10. package/dist/packages/core/src/components/Button.js +3 -3
  11. package/dist/packages/core/src/components/Checkbox.js +10 -2
  12. package/dist/packages/core/src/components/CodeBox.js +2 -1
  13. package/dist/packages/core/src/components/Effect/EffectPartyPopper.js +2 -0
  14. package/dist/packages/core/src/components/IconGridMenu.js +25 -22
  15. package/dist/packages/core/src/components/Popup/ListPopup.js +3 -1
  16. package/dist/packages/core/src/components/Popup/LoadTablePopup.js +6 -5
  17. package/dist/packages/core/src/components/Popup/Popup.css +9 -0
  18. package/dist/packages/core/src/components/Popup/Popup.d.ts +9 -1
  19. package/dist/packages/core/src/components/Popup/Popup.js +2 -2
  20. package/dist/packages/core/src/components/Popup/customerDetailUtils.js +5 -3
  21. package/dist/packages/core/src/components/ProgressBar.js +5 -2
  22. package/dist/packages/core/src/components/ProgressIndicator.js +6 -1
  23. package/dist/packages/core/src/components/Rating.js +3 -1
  24. package/dist/packages/core/src/components/SideNav.js +6 -3
  25. package/dist/packages/core/src/components/SplashLogo.js +1 -2
  26. package/dist/packages/core/src/components/StatChart.js +1 -1
  27. package/dist/packages/core/src/components/Tooltip/TrainingTooltip.js +6 -5
  28. package/dist/packages/core/src/components/Training/TrainingBlockButton.css +57 -0
  29. package/dist/packages/core/src/components/Training/TrainingBlockButton.js +5 -3
  30. package/dist/packages/core/src/components/Training/TrainingPagePopupTitle.js +2 -1
  31. package/dist/packages/core/src/components/Training/TrainingStepCard.js +4 -3
  32. package/dist/packages/core/src/components/Training/TrainingStepCardOrder.js +36 -26
  33. package/dist/packages/core/src/components/Training/TrainingStepTextBox.js +7 -4
  34. package/dist/packages/core/src/components/Training/TrainingStepTitle.js +4 -1
  35. package/dist/packages/core/src/components/Training/WordTablePopup.js +9 -3
  36. package/dist/packages/core/src/components/Training/trainingBlockButtonTypes.d.ts +3 -1
  37. package/dist/packages/core/src/components/Training/trainingMissStats.js +9 -2
  38. package/dist/packages/core/src/components/Word/WordTableBlock.js +5 -2
  39. package/dist/packages/core/src/components/Word/WordTableButton.js +3 -0
  40. package/dist/packages/core/src/components/Word/useWordTableDisplaySettings.js +5 -1
  41. package/dist/packages/core/src/components/Word/wordScoreStats.js +7 -2
  42. package/dist/packages/core/src/components/Word/wordTablePrint.js +15 -2
  43. package/dist/packages/core/src/components/buttonTypes.d.ts +6 -0
  44. package/dist/packages/core/src/components/useCalendarMonth.js +15 -17
  45. package/dist/packages/core/src/components/useToastLifecycle.js +7 -2
  46. package/dist/packages/core/src/context/I18nProvider.js +12 -3
  47. package/dist/packages/core/src/hooks/useSoundCompassExam.js +13 -2
  48. package/dist/packages/core/src/i18n/locales/en.json +1 -0
  49. package/dist/packages/core/src/i18n/locales/ko.json +1 -0
  50. package/dist/packages/core/src/utils/date.js +26 -5
  51. package/dist/packages/core/src/utils/speak.js +23 -3
  52. package/dist/packages/core/src/utils/textSort.js +12 -1
  53. package/dist/packages/core/src/utils/ttsConfig.js +10 -8
  54. package/dist/packages/core/src/version.d.ts +1 -1
  55. package/dist/packages/core/src/version.js +1 -1
  56. package/dist/utils.cjs.js +2 -2
  57. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,81 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.136.0
11
+
12
+ 5차 검수 판이다 — 이번에는 아직 깊이 안 본 곳(context·i18n·유틸, 입력·표시 컴포넌트, 팝업·툴팁·단어표 도구, 훈련 단계)을
13
+ 훑어 **재현된** 결함만 고쳤다. 항목마다 시험을 붙이고 고친 줄을 되돌리면 붉어지는 것을 확인했다. 말귀가 앱에서 덮어쓰던
14
+ 규칙을 코어 prop 으로 가져왔다. 걷은 prop·타입·열쇠는 없다. 사전 열쇠 `training.selectInOrder` 를 더했다.
15
+
16
+ ### 소비자에게 먼저
17
+
18
+ - **칸순**(ListPopup 정렬): 글자 안의 숫자도 수로 견준다 — `'회차 9'` 가 `'회차 10'` 앞에 선다(전에는 뒤). 숫자 칸과
19
+ 숫자로 시작하는 글자 칸이 섞이면 차례가 돌아(`'9'<'10'`·`'10'<'10분'`·`'10분'<'9'`) 들어온 차례에 따라 결과가 달랐다.
20
+ - **ProgressBar** `max=0`: 라벨 `"0 / 0"`·`aria-valuemax=0`(전에는 `"0 / 1"`).
21
+ - **ProgressIndicator** `announce`: 알림 자리 안에 눈에 안 보이는 글자로 단계를 적고 aria-label 은 달지 않는다.
22
+ - **StatChart** 누르는 카드 이름에 증감이 붙는다(`"오늘 방문 7 +3"`).
23
+ - **formatDuration**: 초로 반올림한다(`90.5` → `"1분 31초"`, 0.5초 미만은 `'-'`).
24
+ - **tableTrends**: 매긴 칸이 하나도 없는 기록은 흐름에서 뺀다(모두 비면 그 표는 결과에 없다).
25
+ - **날짜 형식 함수**(`formatDateKo`·`formatDateLongKo`·`formatDatetimeKo`·`formatDateLocale`·`formatDateLongLocale`): 못 읽는 값이면
26
+ `"Invalid Date"` 대신 빈 글자.
27
+ - **IconGridMenu** 제어 모드: prop 을 그대로 그린다 — 누르면 onSelect 만 부르고, 부모가 값을 안 바꾸면 화면도 그대로다.
28
+
29
+ ### 더함 (말귀 요청)
30
+
31
+ - **Popup `layer`**: `'modal'`(기본) | `'belowPagePopup'` — 훈련 페이지 팝업 바로 아래 층(`--z-page-popup` - 1).
32
+ - **Popup `size`**: `'xlarge'`(1320px, 폭 화면 - 80px) · `'fit'`(내용 폭, 최소 min(480px, 화면-40px)·최대 min(1140px, 화면-40px)).
33
+ - **TrainingBlockButton `size="row"`**: 전체 너비 가로 행 [아이콘][유형·제목][문항수], 미리 듣기 없음 — 좁은 화면 목록용.
34
+ - **Button `tooltipOnly`**: 툴팁만 보여 주는 칩 — 커서만 기본 화살표(모양·포커스·툴팁 그대로, `disabled` 와 다름).
35
+
36
+ ### 바뀜 — 입력·표시
37
+
38
+ - **Checkbox**: `indeterminate` 가 누르는 순간 풀려(브라우저가 DOM 속성을 끔) prop 이 그대로 true 여도 빈 칸으로 남았다.
39
+ - **IconGridMenu**: 비제어에서 카테고리가 늦게 오면 첫 항목이 안 골라졌고, StrictMode 에서 첫 알림이 두 번.
40
+ - **SplashLogo**: `onDone` 이 나중에 들어오면 타이머가 끝내 안 걸려 스플래시가 남았다.
41
+ - **Rating**: 소수 값이 모두 반 별로 그려져 4.1 과 4.9 가 같았다 — 값만큼 채운다.
42
+ - **CodeBox**: `language` 가 'sh' 를 품기만 해도(csharp) 셸로 읽었다.
43
+ - **Alert**: `message=""` 면 children 이 가려 빈 칸.
44
+ - **useCalendarMonth**: 한 핸들러에서 `prevMonth` 를 두 번 부르면 (2026, -1).
45
+ - **Toast**: 마우스·포커스로 멈춘 채 문구가 바뀌면 읽는 알림이 손 밑에서 사라졌다.
46
+ - **SideNav**: `appMode` 를 안 주면 여기만 매니저로 봐 Header·BottomNav 와 반대 방향 전환 단추를 띄웠다.
47
+ - **ListPopup**: 고른 행 표시가 열 className(맞춤·폭)을 덮었다.
48
+ - **Button**: `onDisabledClick` 을 준 막힌 단추에 `aria-disabled` 가 안 붙었다.
49
+
50
+ ### 바뀜 — 훈련
51
+
52
+ - **useSoundCompassExam**: 수가 같은 다른 배치로 바꾸면 다시 시작하지 않아 무엇을 골라도 오답이었다. 한 대기에서 고르기가
53
+ 두 번 불리면 점수 +2.
54
+ - **TrainingStepCard**: 따로 쓴 단계에서 '모두 듣기' 가 소리 없이 끝났다.
55
+ - **TrainingStepCardOrder**: StrictMode 에서 onChange·onDone 두 번, 풀 때 onChange 없음, 낱말에 '|' 가 있으면 못 끝냄, 기본
56
+ 제목 한국어 고정.
57
+ - **TrainingStepTitle**: 키보드로 누른 '모두 듣기' 가 재생 중 막히며 초점이 body 로 빠졌다.
58
+ - **TrainingStepTextBox**: 펼쳐 둔 상자에서 다음 문제로 넘어가면 한 틱 동안 새 문장(정답)이 드러났다.
59
+ - **TrainingPagePopupTitle**: title 이 비고 depth 가 없으면 subtitle 이 두 줄.
60
+ - **TrainingTooltip**: 영어에서도 훈련 유형 머리글이 한국어.
61
+ - **summarizeMisses**: A→B→A 로 풀면 복습이 가장 최근 세트 대신 옛 세트로 짜였다.
62
+ - **WordTablePopup `autoPrint`**: StrictMode·100ms 안 인쇄 설정 변경에서 한 번도 안 떴다.
63
+ - **EffectPartyPopper**: 첫 틀이 조각 지연보다 이르면 한 조각도 안 나고 곧바로 끝났다.
64
+
65
+ ### 바뀜 — 단어표·팝업·유틸
66
+
67
+ - **LoadTablePopup**: 저장소의 표 하나가 `savedAt`·`words` 가 없으면 팝업 전체가 렌더 중에 터졌다. 영어에서도 "N개".
68
+ - **WordTableButton**: 카드 안 '더보기'·게시자 단추에서 Enter/Space 가 카드를 열었다.
69
+ - **WordTableBlock·useWordTableDisplaySettings**: 페이지당 개수 '전체' 를 고른 뒤 항목이 늘면 선택지에 없는 값이 남았다.
70
+ - **printWordTableElements**: iframe 인쇄 뒤 탭 제목이 표 이름으로 남을 수 있었고, 다음 인쇄가 그것을 원래 제목으로 잡았다.
71
+ - **checkAudioExists**: 서버 오류(5xx)를 '음성 없음' 으로 영구 캐시했다. 비운 뒤 늦게 실패한 옛 요청이 새 확인을 지웠다.
72
+ - **speak·stopSpeaking**: 목소리 목록이 비었을 때 부른 말이 줄을 서고 멈추지 않았고, 목록이 끝내 안 오면 onEnd 가 안 불렸다.
73
+ - **I18nProvider**: `locale="en-US"` 이면 한국어로 떨어지고 context 는 `'en-US'` 로 남았다.
74
+
75
+ ### 고치지 않은 것 — 결정·확인이 필요하다
76
+
77
+ - `saveTable`·`updateSavedTable`·`duplicateTable` 은 저장소 쓰기가 실패해도 성공처럼 돌려준다 — 반환 타입을 바꿔야 한다.
78
+ - 오프셋 없는 시각 문자열(`normalizeDate`·`formatYmd`)이 기기 시간대를 따른다.
79
+ - `reviewTableName`: '수업 3차' 의 첫 복습과 '수업' 의 3차 복습이 같은 이름이다(이름만으로는 가를 수 없다).
80
+ - `weakItems`: 동형어가 저장 labels 에 번호가 없어 합쳐진다.
81
+ - Board 의 빈 목록 기본 문구가 한국어 고정(서버 렌더 호환이라 hook 을 안 쓴다).
82
+ - Rating 조작 모드에 소수 `value` 를 주면 화살표가 3.5 를 낸다.
83
+ - ConfirmPopup: onConfirm 거절이 처리되지 않은 거절로 올라간다(삼키면 오류 추적에서 사라진다).
84
+
10
85
  ## 0.135.0
11
86
 
12
87
  3차·4차 검수 판이다 — 훈련 단계 UI·차트·리포트·팝업·방문 훅을 훑어 **재현된** 결함만 고쳤다. 항목마다 시험을 붙이고 고친 줄을