@ihabdevteam/core 0.127.0 → 0.130.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 (119) hide show
  1. package/CHANGELOG.md +141 -0
  2. package/dist/components.cjs.js +178 -178
  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 +276 -66
  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/BulkBar.d.ts +2 -1
  15. package/dist/packages/core/src/components/BulkBar.js +9 -2
  16. package/dist/packages/core/src/components/Calendar.js +1 -1
  17. package/dist/packages/core/src/components/ColorPicker.d.ts +3 -1
  18. package/dist/packages/core/src/components/ColorPicker.js +4 -2
  19. package/dist/packages/core/src/components/DatePicker.d.ts +2 -1
  20. package/dist/packages/core/src/components/DatePicker.js +9 -4
  21. package/dist/packages/core/src/components/Effect/EffectPartyPopper.d.ts +9 -0
  22. package/dist/packages/core/src/components/Effect/EffectPartyPopper.js +30 -25
  23. package/dist/packages/core/src/components/EmptyState.js +3 -1
  24. package/dist/packages/core/src/components/ErrorState.js +3 -1
  25. package/dist/packages/core/src/components/FilterPanel.js +7 -0
  26. package/dist/packages/core/src/components/Header.css +8 -0
  27. package/dist/packages/core/src/components/Header.d.ts +6 -0
  28. package/dist/packages/core/src/components/Header.js +25 -1
  29. package/dist/packages/core/src/components/Icon.css +22 -0
  30. package/dist/packages/core/src/components/Icon.d.ts +7 -3
  31. package/dist/packages/core/src/components/Icon.js +7 -1
  32. package/dist/packages/core/src/components/IconGridMenu.css +4 -2
  33. package/dist/packages/core/src/components/IconGridMenu.d.ts +1 -1
  34. package/dist/packages/core/src/components/IconGridMenu.js +6 -3
  35. package/dist/packages/core/src/components/LandingHeader.js +6 -3
  36. package/dist/packages/core/src/components/Loader.d.ts +1 -1
  37. package/dist/packages/core/src/components/Loader.js +7 -2
  38. package/dist/packages/core/src/components/NoticeBox.d.ts +5 -0
  39. package/dist/packages/core/src/components/NoticeBox.js +3 -1
  40. package/dist/packages/core/src/components/Pagination.d.ts +2 -2
  41. package/dist/packages/core/src/components/Pagination.js +2 -2
  42. package/dist/packages/core/src/components/PanelRow.js +5 -1
  43. package/dist/packages/core/src/components/PassCard/PassCard.d.ts +10 -1
  44. package/dist/packages/core/src/components/PaymentPlan.d.ts +8 -1
  45. package/dist/packages/core/src/components/Popup/ConfirmPopup.d.ts +1 -1
  46. package/dist/packages/core/src/components/Popup/ListPopup.d.ts +8 -1
  47. package/dist/packages/core/src/components/Popup/ListPopup.js +17 -2
  48. package/dist/packages/core/src/components/Popup/Popup.css +1 -1
  49. package/dist/packages/core/src/components/Popup/Popup.d.ts +9 -1
  50. package/dist/packages/core/src/components/Popup/Popup.js +21 -2
  51. package/dist/packages/core/src/components/Popup/TrainingResultPopup.js +3 -2
  52. package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.d.ts +4 -1
  53. package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.js +8 -3
  54. package/dist/packages/core/src/components/Popup/customerDetailUtils.d.ts +7 -2
  55. package/dist/packages/core/src/components/Popup/customerDetailUtils.js +20 -3
  56. package/dist/packages/core/src/components/ProgressIndicator.d.ts +2 -5
  57. package/dist/packages/core/src/components/PromoBanner.js +23 -6
  58. package/dist/packages/core/src/components/RadioGroup.d.ts +3 -1
  59. package/dist/packages/core/src/components/RadioGroup.js +2 -2
  60. package/dist/packages/core/src/components/Report/ReportDocument.d.ts +4 -1
  61. package/dist/packages/core/src/components/Report/ReportDocument.js +4 -1
  62. package/dist/packages/core/src/components/Section.d.ts +7 -1
  63. package/dist/packages/core/src/components/Section.js +6 -2
  64. package/dist/packages/core/src/components/SideNav.css +16 -7
  65. package/dist/packages/core/src/components/SideNav.js +11 -1
  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 +32 -5
  100. package/dist/packages/core/src/i18n/locales/ko.json +32 -5
  101. package/dist/packages/core/src/tokens.css +2 -1
  102. package/dist/packages/core/src/utils/CategoryData.js +2 -2
  103. package/dist/packages/core/src/utils/assets.js +7 -3
  104. package/dist/packages/core/src/utils/clipboard.js +16 -2
  105. package/dist/packages/core/src/utils/errorMessage.d.ts +2 -1
  106. package/dist/packages/core/src/utils/errorMessage.js +19 -2
  107. package/dist/packages/core/src/utils/getTrainingData.d.ts +8 -1
  108. package/dist/packages/core/src/utils/getTrainingData.js +8 -1
  109. package/dist/packages/core/src/utils/koreanSyllable.d.ts +15 -12
  110. package/dist/packages/core/src/utils/koreanSyllable.js +16 -13
  111. package/dist/packages/core/src/utils/lucideIconSet.d.ts +4 -3
  112. package/dist/packages/core/src/utils/lucideIconSet.js +4 -3
  113. package/dist/packages/core/src/utils/ttsResolver.d.ts +5 -0
  114. package/dist/packages/core/src/utils/wordTrainingGenerators.d.ts +3 -3
  115. package/dist/packages/core/src/utils/wordTrainingGenerators.js +28 -7
  116. package/dist/packages/core/src/version.d.ts +1 -1
  117. package/dist/packages/core/src/version.js +1 -1
  118. package/dist/utils.cjs.js +2 -2
  119. package/package.json +4 -2
package/CHANGELOG.md CHANGED
@@ -7,6 +7,147 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.130.0
11
+
12
+ 놀이터 문서를 소스와 한 줄씩 맞추다 드러난 결함을 고친 판이다. 공개 prop·타입은 하나도 걷지 않았다
13
+ (안 쓰이던 것은 `@deprecated`). 항목마다 시험을 붙이고, 고친 줄을 되돌리면 시험이 붉어지는 것을 확인했다.
14
+
15
+ ### 더함 — 훈련 소리 모델·파형 눈금을 배럴에서 내보낸다
16
+
17
+ `@ihabdevteam/core/components`(와 뿌리)에서 `noiseRatioOf` · `effectiveSpeechVolume` · `effectiveNoiseVolume` ·
18
+ `noiseElementVolume` · `mergeNoiseSettings` · `DEFAULT_NOISE_SETTINGS` · `NOISE_RATIO_MAX` · `NOISE_RATIO_STEP` ·
19
+ `LEVEL_MAX` · `levelToPct` · `pctToLevel` · `NoisePlayerContext` · `useNoisePlayer`(+ `NoisePlayerContextValue` 타입),
20
+ `waveBarPx` · `waveBarVal` · `WAVE_H1_PX` · `WAVE_HMAX_PX` · `WAVE_A_MAX`. 앱이 딥 경로
21
+ (`components/Training/NoisePlayerContext`)로 가져가던 것들이다 — 딥 경로도 그대로 된다.
22
+
23
+ ### 바뀜 — 앱에서 보이는 동작
24
+
25
+ - **Toggle**: `role="switch"` — 낭독기가 켬/끔으로 읽는다. **`getByRole('checkbox')` 로 Toggle 을 찾던 시험은 `'switch'` 로.**
26
+ - **useWordTrainingFilter**: `contrastCount` 가 고른 훈련 음소 칸 수(파생값)다 — 올라가기만 하던 결함이라 예전에 저장된 높은 값은 무시한다.
27
+ 설정 팝업에서 취소하면 품사·어종도 되돌아가고, `groupKey` 를 바꿔도 '글자 입력'(direct) 보기가 유지된다.
28
+ - **WordSearchResultBlock**: 검색어를 가진 채 처음 그려질 때도 기본 정렬이 '시작 우선'이다.
29
+ - **음소 탈락·대립 문제**: 오답에 정답과 발음이 같은 모음(ㅔ/ㅐ, ㅖ/ㅒ, ㅚ/ㅞ/ㅙ)이 나오지 않는다.
30
+ - **PanelRow variant="button"**: `onClick` 이 한 번만 불린다(단추와 행 양쪽에 걸려 두 번이었다). 행 전체는 더 이상 단추가 아니다 — 꺼진 단추인데 행을 누르면 불리던 것도 막힌다.
31
+ - **Header 모바일 하단 내비**: 비활성 항목이 눌리지 않고 href 항목은 새 창으로 열린다(항목을 캐스팅만 하던 것). `malgwiItems`·`managerItems` 는 `@deprecated`.
32
+ - **ListPopup**: `countLabel` 함수 꼴이 반영된다. `keepOpenOnSelect` 는 `@deprecated`(원래 효과가 없었다 — 팝업은 골라도 닫히지 않는다).
33
+ - **TextField**: 자동완성 후보를 Enter 로 고르면 `onEnter` 도, 폼 제출도 일어나지 않는다. readOnly 칸이 Tab 으로 닿는다.
34
+ - **IconGridMenu**: 고른 단추가 `disabled` 대신 `aria-pressed` — 키보드로 닿고 포커스 표시가 보인다. `selected={null}` 로 선택을 풀 수 있다.
35
+ - **TrainingStepConfirmWithText**: 고른 답의 강조가 곧바로 풀리던 것을 고쳤다(문장이 바뀔 때만 풀린다).
36
+ - **WordTable**: 편집 모드에서도 구어체 발음이 보인다.
37
+ - **Tooltip**: `onClose` 없는 툴팁이 Esc·바깥 누름 뒤 흐려진 채 남지 않는다. 앵커 없이 제자리에 그린 툴팁은 document 의 Esc·바깥 누름·Tab 되감기를 듣지 않는다.
38
+ - **usePasswordChange**: 변경 콜백이 거절해도 로딩이 풀리고 오류 문구가 보인다.
39
+ - **Avatar**: 이미지가 실패한 뒤 `src` 를 바꾸면 다시 이미지를 그린다. **PromoBanner**: `titleColor`·`descriptionColor` 를 거두면 배경 색으로 돌아간다.
40
+ - **Icon**: SVG 마스크 모드가 실제로 그려진다(규칙이 없어 빈 자리였다 — 글자색, `size` 반영). **EffectPartyPopper**: `duration` 이 조각 수명에 반영되고, 스코프 CSS 안에서도 브랜드색을 읽는다.
41
+ - **useDeviceManagement**: 방향이 '좌'·'우' 가 아닌 폼은 무시한다(던졌다). **useFontScale**: 범위 밖 저장값을 조인다. **useWordMeanings**: 조회 거절이 처리되지 않은 거절로 새지 않는다.
42
+ - **copyText**: 복사 뒤 원래 포커스로 돌아간다. **setAssetBaseUrl**: CJS 묶음이 여럿이어도 공유된다(globalThis).
43
+ - **TOPIC_TYPES**: '한국 전통음식' 앞 공백, '건강상식' 오타.
44
+
45
+ ### 더함 — 선택 prop·반환값
46
+
47
+ - `Section.headingLevel`(1~6 — 제목을 h1~h6 로, 낭독기 제목 목록에 나온다. 권장) · `RadioGroup.ariaLabel` · `ColorPicker.ariaLabel`
48
+ - `WordDataUpdatePopup.onClose` — 오류인데 `onRetry` 가 없으면 "닫기" 단추(닫을 길이 없었다)
49
+ - `useVisitAllPanel` 반환 `vapPageSizeOptions`(번역 — 상수 `VAP_PAGE_SIZE_OPTIONS` 는 그대로) · `formatDuration(…, durationStr?)`
50
+ - `PaymentPlanData.group` 타입 · `AudioMeter` 가 `aria-valuenow`·`min`·`max`·`valuetext` 를 단다(글자 갱신 주기)
51
+ - `Badge`: dot 에 icon 이 없으면 체크를 그린다, bar 가 `aria-label` 을 받는다. `LandingHeader` 서랍 id 가 `useId`(한 화면에 둘이어도 안 겹침)
52
+ - `BulkBar`: 숨은 막대가 `inert`·`aria-hidden` 이라 Tab·낭독기에서 빠진다
53
+ - 개발 경고: `FilterPanel` allOption 절에 값 '전체' 보기가 있으면(구별 안 됨), `WordTableBlock` 표시 모드에서 `onAddItem` 을 `showCellCount` 없이 주면(추가 칸이 안 생김)
54
+
55
+ ### 번역 — 박혀 있던 한국어 기본 문구가 사전을 탄다(ko 값은 지금 문구와 같다)
56
+
57
+ BulkBar '선택 해제' · DatePicker 안내·연월 · Badge 이름 · Loader(`loader.loading` — ko 사전 '불러오는 중…', 전에는 'Loading') ·
58
+ WordTableButton 배지 · TrainingResultPopup '(내용없음)' · DebugResultLauncher 라벨 · usePasswordChange 안내 ·
59
+ getErrorMessage 기본값 · formatDuration. 사전 열쇠 18개 더함, 부르는 곳이 없어진 `training.contrast.diffPhonemeCount` 걷음.
60
+
61
+ ### 폼 안에서 제출되던 단추
62
+
63
+ NoticeBox 닫기 · EmptyState 행동 · ErrorState 다시 시도 · Calendar 달 넘김 · DebugResultLauncher 에 `type="button"`.
64
+
65
+ ### JSDoc 을 동작대로
66
+
67
+ Popup large 1080px · ConfirmPopup 기본 480px · Table loading 머리 유지 · ReportDocument 다시 재는 때 · Loader label ·
68
+ PassCard bg 기본값(`startDate`·`queueIndex` @deprecated) · TrainingBlock(`count` @deprecated, selectedIds·size 치수) ·
69
+ koreanSyllable 포함 매칭 · mergeQuestionText·soundOf 예 · computeDailySelection 의 어제 세트 · lucide "지연 로드" ·
70
+ Pagination·ProgressIndicator·DebugTooltip 첫 문단의 앱 이름·사연 · `ScenarioPage.steps` 타입 `ScenarioStep[] | ReactNode[]` ·
71
+ `CreateTTSResolverOptions.pitch` @deprecated · NoticeBox `notices[].variant` @deprecated.
72
+
73
+ ## 0.129.0
74
+
75
+ ### 바뀜 — 태블릿(768–1023px)의 **h3 를 데스크톱과 같은 20px / 30px** 로
76
+
77
+ 태블릿 블록이 h3 를 18px / 28px 로 줄이고 있었다. 사용자 결정으로 데스크톱과
78
+ 맞춘다 — 태블릿 블록에서 h3 두 줄을 걷어 루트 값을 물려받게 했다.
79
+ 모바일(≤767px)의 17px / 26px 은 그대로다.
80
+
81
+ 실측(놀이터, `.h3` · `.h3b`): 900px 20/30 · 1400px 20/30 · 500px 17/26.
82
+ 태블릿의 제목 사다리는 그대로 선다 — h2 22 > h3 20 > h4 16.
83
+
84
+ 줄이 **없어서** 맞는 꼴이라, 다른 제목들을 맞추다 한 줄을 되살리면 조용히
85
+ 되돌아간다. `test/tabletH3Size.test.ts` 가 그 자리를 막는다.
86
+
87
+ ## 0.128.0
88
+
89
+ ### 더해짐 — `Popup` 의 **어두운 바탕을 누르면 닫힌다** (기본값)
90
+
91
+ ✕ 와 ESC 로만 닫혔다. 이제 바깥 `.popup` 층을 눌러도 닫힌다. 끄려면
92
+ `closeOnBackdrop={false}`.
93
+
94
+ - **누른 곳과 뗀 곳이 둘 다 바탕일 때만** 닫는다. click 의 target 만 보면, 패널
95
+ 안에서 글자를 긁어 고르다 바깥에서 놓았을 때도 바탕에 click 이 떨어져 창이
96
+ 사라진다(브라우저는 공통 조상에 click 을 쏜다).
97
+ - 닫기는 `closeWithAnimation` 을 그대로 거친다 — `closeDisabled`(요청 도는 중)와
98
+ `beforeClose`(입력 중 확인)가 똑같이 막는다.
99
+ - ESC 와 같은 조건에서만 건다 — `inline` 이 아니고 `onClose` 가 있을 때.
100
+ - **팝업 위 팝업은 위 창만 닫힌다.** 위 창이 아래 창의 React 자식이면 합성
101
+ 이벤트가 DOM 이 아니라 React 나무를 따라 아래 창의 바탕까지 올라오는데, 그때
102
+ target 이 위 창의 바탕이라 아래 창은 넘긴다.
103
+
104
+ **새로 노출되는 것**: 입력칸이 있는데 `beforeClose` 가 없는 창은 바깥을 잘못 눌러
105
+ 입력이 날아갈 수 있다. 코어에서는 셋이다 — `CouponInputPopup`(쿠폰 번호 한 칸),
106
+ `SaveTablePopup`(표 이름), `WordTableBlock` 안의 저장 창. 모두 짧은 한 줄 입력이라
107
+ 기본값을 그대로 뒀다.
108
+
109
+ ### 고침 — 사이드바 **오른쪽 여백이 1px 로 좁아졌다** (`SideNav` · `Header`)
110
+
111
+ 오른쪽 여백을 스크롤바 자리(gutter)가 만든다고 보고 `padding-right` 를 0 으로
112
+ 뒀다. 스크롤바가 자리를 차지하는 환경(윈도우 등)에서는 맞았지만, macOS 오버레이
113
+ 스크롤바는 gutter 가 **0** 이라 오른쪽이 테두리 1px 만 남았다(실측: 좌 12 / 우 1).
114
+
115
+ 좌우 padding 을 같게 두고, 투명 테두리를 양쪽에 짝으로 두고, 스크롤바 자리를
116
+ `stable both-edges` 로 **양쪽에 똑같이** 비운다.
117
+
118
+ | 1400px 펼침 | 전 | 후 |
119
+ |---|---|---|
120
+ | 오버레이 | 좌 12 / **우 1** | 좌 13 / 우 13 |
121
+ | 클래식 11px | 좌 12 / 우 12 | 좌 24 / 우 24 (항목 196 → 172) |
122
+
123
+ 스크롤을 억지로 세워도 같은 값이다.
124
+
125
+ **접힌 72px 레일은 따로 다룬다.** 양쪽 gutter 를 그대로 떼면 클래식에서 항목이
126
+ 28px 로 짓눌려 24px 아이콘이 10px 삐져나간다(실측). 아이콘만 있는 좁은 레일에는
127
+ 스크롤바를 그릴 자리가 애초에 없어, 레일에서만 막대를 숨기고 자리를 비우지 않는다.
128
+ 휠·터치·키보드 스크롤은 그대로다. 결과: 오버레이·클래식 모두 좌 11 / 우 11, 항목 50.
129
+
130
+ 클래식 스크롤바는 이 기계(macOS 오버레이)에서 `::-webkit-scrollbar { width: 11px }`
131
+ 로 흉내 내 쟀다. 윈도우 실기에서 한 번 더 보는 편이 좋다.
132
+
133
+ ### 고침 — 사이드바 바닥의 아이콘 넷이 **눌러도 아무 일이 없었다** (`SideNav`)
134
+
135
+ 바닥 아이콘을 그리는 방식이 갈려 있었다. 디버그는 핸들러가 있을 때만 그리는데,
136
+ 알림·설정·도움말·계정 넷은 **핸들러와 무관하게 늘** 그렸다. 그래서 그 넷을 안
137
+ 넘기는 앱에서는 `onClick` 이 `undefined` 인 단추가 넷 서 있었다.
138
+
139
+ 눌러도 아무 일이 없으니 사람은 고장으로 읽는다. 낭독기에는 '알림 단추' 라고
140
+ 읽히는데 실제로는 아무 데도 못 간다. 소비자 앱 어드민에서 열일곱 화면을 하나씩
141
+ 눌러 보다가 찾았다 — 넷만 제목도 안 바뀌고 창도 안 떴다.
142
+
143
+ **없는 단추가 죽은 단추보다 낫다.** 넷을 `onDebug` 와 같은 결로 맞췄다 — 핸들러를
144
+ 준 것만 그린다. 읽지 않은 수(뱃지)는 알림 단추에 딸린 것이라 껍데기째 함께 빠진다.
145
+ 누를 수 없는 자리에 수만 떠 있으면 그것대로 막다른 길이다. 다섯이 다 없으면 바닥
146
+ 자체를 그리지 않는다 — 빈 채로 두면 여백(`margin-top` + `padding`)만 남아 아래가
147
+ 뜬다.
148
+
149
+ **넷을 넘기던 앱은 전과 같다.** 안 넘기던 앱에서만 죽어 있던 단추가 사라진다.
150
+
10
151
  ## 0.127.0
11
152
 
12
153
  ### 고침 — 소음 파형 막대가 `noiseFileGain` 을 나누지 않아 1배에서도 문제 소리의 2배로 그려졌다 (`TrainingStepAudioPlayer` 파형)