@ihabdevteam/core 0.344.0 → 0.346.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.
- package/CHANGELOG.md +103 -0
- package/dist/components.cjs.js +182 -182
- package/dist/components.esm.css +2 -2
- package/dist/hooks.cjs.js +5 -5
- package/dist/i18n.cjs.js +3 -3
- package/dist/ihabdevteam-core.cjs.js +187 -187
- package/dist/ihabdevteam-core.d.ts +1 -30
- package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.css +14 -3
- package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.js +17 -5
- package/dist/packages/core/src/components/Word/WordSearchResultBlock.css +8 -0
- package/dist/packages/core/src/components/Word/WordSearchResultBlock.js +22 -10
- package/dist/packages/core/src/hooks/useWordTrainingFilter.js +2 -0
- package/dist/packages/core/src/i18n/locales/en.json +2 -1
- package/dist/packages/core/src/i18n/locales/ko.json +2 -1
- package/dist/packages/core/src/types/wordSearch.d.ts +0 -8
- package/dist/packages/core/src/utils/dailySelectionUtils.js +4 -2
- package/dist/packages/core/src/utils/date.d.ts +2 -0
- package/dist/packages/core/src/utils/date.js +18 -1
- package/dist/packages/core/src/utils/imageConfig.d.ts +1 -0
- package/dist/packages/core/src/utils/imageConfig.js +27 -1
- package/dist/packages/core/src/utils/phonemePairSearch.js +1 -4
- package/dist/packages/core/src/utils/trainingItemResults.d.ts +0 -17
- package/dist/packages/core/src/utils/trainingItemResults.js +2 -1
- package/dist/packages/core/src/utils/wordPairIndex.js +5 -7
- package/dist/packages/core/src/utils/wordTrainingPool.js +11 -2
- package/dist/packages/core/src/utils/wordTrainingRuntime.js +20 -11
- package/dist/packages/core/src/version.d.ts +1 -1
- package/dist/packages/core/src/version.js +1 -1
- package/dist/utils.cjs.js +4 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,109 @@ All notable changes to this project will be documented in this file.
|
|
|
7
7
|
> 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
|
|
8
8
|
> 제 이야기를 못 찾는다.
|
|
9
9
|
|
|
10
|
+
## 0.346.0 — 기다리는 동안 글을 안 띄운다 · 묶음 이름이 뜬다 · 옛 짝을 걷었다
|
|
11
|
+
|
|
12
|
+
### (305) 개발자의 말이 화면에 안 뜬다 — 그런데 전제가 달랐다
|
|
13
|
+
|
|
14
|
+
말귀가 *"사람 말이 2ms 뒤에 개발자 말로 덮인다"* 고 청했다. 재어 보니 **그 글은 저장소를
|
|
15
|
+
처음 만들 때부터 `display: none` 이었다** — 코어에서 화면에 뜬 적이 없다. 대신 더 나쁜 것이
|
|
16
|
+
있었다: `display: none` 은 **접근성 나무에서도 빼서**, 위의 `role="status"`·`aria-live` 가
|
|
17
|
+
**헛돌고 기다리는 동안 아무 말도 안 읽혔다.**
|
|
18
|
+
|
|
19
|
+
사장님이 **(다)** 로 정하셨다(2026-10-19) — *"글은 아예 안 띄운다"*. 미뤄 둔 길 (가)(사람 말
|
|
20
|
+
한 마디로 묶기)가 아니다: 깜박이는 글은 한 마디로 묶어도 읽을 틈이 없다.
|
|
21
|
+
|
|
22
|
+
- 눈에는 **동그라미만**. 감추는 길을 `display: none` → 이 저장소의 규약
|
|
23
|
+
(`clip-path: inset(50%)`)으로 바꿨다 — 보이지 않지만 **읽힌다.**
|
|
24
|
+
- 낭독기에는 걸음에 안 매인 **한 마디**: `소리를 준비하고 있습니다…` / `Preparing sound…`
|
|
25
|
+
(새 열쇠 `training.audioStatus.preparing`).
|
|
26
|
+
- 걸음 이름과 그 글(`STATUS_MESSAGES`)은 **안 지웠다** — 개발 판의 자취와 색이 쓴다.
|
|
27
|
+
|
|
28
|
+
`test/audioStatusAnnounce.test.tsx` 가 **뒤집혔다**: 2026-10-05 의 (나) 를 못 박던 시험이
|
|
29
|
+
이제 *"걸음마다 다른 글을 그리지 않는다"* 와 *"감추는 길이 `display: none`·`visibility: hidden`
|
|
30
|
+
이 아니다"* 를 센다. 세 가지로 깨 보고 셋 다 붉어졌다.
|
|
31
|
+
|
|
32
|
+
### (308) 묶음 이름이 안 그려졌다
|
|
33
|
+
|
|
34
|
+
`groups` 를 주면 묶음 `div` 는 섰지만 **받은 `label` 이 `key` 로만 쓰이고 사라졌다** —
|
|
35
|
+
그리는 줄이 `group.items` 만 펴고 `group.label` 을 안 썼다. 그릴 뜻이었던 것은 분명하다
|
|
36
|
+
(윗줄 주석이 *"그룹 헤더 유지"*).
|
|
37
|
+
|
|
38
|
+
말귀 실측(0.343.0 · 음소 대립 1,159쌍): 묶음 넷을 넘겼는데 `__group` 이 **1 개**,
|
|
39
|
+
이름 글자 **0 건**. 보는 사람은 어느 자리가 갈린 쌍인지 모른 채 한 덩어리로 봤다.
|
|
40
|
+
|
|
41
|
+
이름을 머리로 그린다. `role="group"` + `aria-labelledby`(`IconGridMenu` 의 규약) — `role="group"`
|
|
42
|
+
은 **이름이 없으면 낭독기가 묶음을 아예 안 알린다**. 쪽 경계에서 나뉘면 나뉜 쪽에도 다시 선다
|
|
43
|
+
(`pagedGroups` 가 이미 쪽마다 다시 묶는다).
|
|
44
|
+
|
|
45
|
+
> 세우다 **없는 CSS 토큰**(`--font-label-m`)을 적었다. 없는 변수는 조용히 아무 꼴도 안 내서
|
|
46
|
+
> 깨진 줄 몰랐다 — 찾다가 발견한 "선례" 가 제가 방금 적은 줄이었다. 이 저장소의 규약은
|
|
47
|
+
> `styles.css` 의 공용 클래스(`caption-1b`)다. 못이 그 자리도 센다.
|
|
48
|
+
|
|
49
|
+
### `diffSection` 을 걷었다 (공개 타입에서 빠짐)
|
|
50
|
+
|
|
51
|
+
갈린 자리를 **옛 한글 이름**(`'초성'`·`'모음'`…)으로도 가리키던 짝이다 — 한 결정이 두 자리에.
|
|
52
|
+
`@deprecated` 글에 *"소비자가 옮긴 뒤 걷는다"* 고 적어 두었고, 말귀가 옮겼다고 알려 와
|
|
53
|
+
**직접 셌다**: 말귀 앱·어드민 **0**(한 건은 그쪽 시험 재료) · 소리방향성 **0** · kscan **0**.
|
|
54
|
+
|
|
55
|
+
`diffSectionCode`(`'onset'`·`'vowel'`·`'coda'`·`'glide'`)가 정본이다. 이 값을 읽는 곳이
|
|
56
|
+
있으면 그것으로 옮겨라.
|
|
57
|
+
|
|
58
|
+
## 0.345.0 — 캐시 열쇠가 섞이고, 샘플 밖 초성이 사라지던 자리
|
|
59
|
+
|
|
60
|
+
0.344.0 과 같은 자리에서 온 것(다른 세션이 10분마다 훑어 고친 것)을 받아 검토하고 냈다.
|
|
61
|
+
알맹이 9파일 · 시험 11파일. **아직 그 루프가 돌고 있어 "지금 든 것" 만 묶었다**(사장님
|
|
62
|
+
지시) — 뒤에 쌓이는 것은 다음 판이다.
|
|
63
|
+
|
|
64
|
+
### 캐시 열쇠가 서로 다른 조건을 같은 칸에 담던 것
|
|
65
|
+
|
|
66
|
+
- **`choseong: []` 과 미지정이 같은 열쇠였다**(`_poolCacheKey`). 빈 배열은 *후보를 전부
|
|
67
|
+
제외* 인데 *무제약* 과 같은 칸에 담겨, **먼저 계산한 쪽의 결과가 다른 조건에 그대로
|
|
68
|
+
재사용**됐다. 빈 배열을 `'[]'` 로 따로 센다.
|
|
69
|
+
- **이미지 집합이 바뀌어도 풀 캐시가 안 비워졌다**(`buildUsablePool`·
|
|
70
|
+
`generateRuntimeItems`). `prewarm`·일괄 주입이 결과를 바꾸는데 풀 참조는 그대로라
|
|
71
|
+
옛 문항이 남았다. `getImageOkWordSet()` 의 참조를 무효화 기준에 넣는다.
|
|
72
|
+
- **늦게 끝난 셈이 비워진 캐시를 되채웠다**(`_resultCacheEpoch`). 계산 중에 풀이 바뀌면
|
|
73
|
+
그 결과를 새 캐시에 안 넣는다.
|
|
74
|
+
- **중복 행이 있으면 입력 순서가 바뀌어도 같은 지문이었다**(`computeSig`). 색인은
|
|
75
|
+
*첫 유효 행* 을 쓰므로 순서가 결과를 바꾼다 — 지문에 순서를 넣어 낡은 색인을 안 쓴다.
|
|
76
|
+
|
|
77
|
+
### 샘플 캡이 고를 수 있는 것을 숨기던 것
|
|
78
|
+
|
|
79
|
+
**`getViableChoseongs` 가 생성용 샘플(기본 1500)로 셌다.** 그래서 샘플 밖의 드문 초성이
|
|
80
|
+
실제로 가능해도 **고를 수 있는 것에서 빠졌다.** `fullCount: true` 로 전체 후보를 본다
|
|
81
|
+
(열쇠에 `F` 로 들어 있어 생성용 풀과 섞이지 않는다).
|
|
82
|
+
|
|
83
|
+
> **지금 그 손잡이를 부르는 자리는 없다**(꾸러미를 받아 세었다 — 묶음 셋에 그 이름 0,
|
|
84
|
+
> 공개 `d.ts` 에 0, 코어 안에서 부르는 곳은 시험 둘뿐). 거르개(`useWordTrainingFilter`)는
|
|
85
|
+
> `getViableComposition`·`countUsableWords` 를 쓴다. **그러니 이 고침은 화면에서 지금
|
|
86
|
+
> 달라지는 것이 없고**, 서브패스 `utils/wordTrainingRuntime` 로 그 손잡이를 쓰는 쪽이
|
|
87
|
+
> 생길 때 값을 한다. 처음 이 자리에 *"단추에서 사라졌다"* 고 적어 지금 나는 일처럼
|
|
88
|
+
> 읽히게 했다 — 0.345.0 꾸러미에는 그 글이 실려 나갔다.
|
|
89
|
+
|
|
90
|
+
### 없는 날짜를 실제 날짜처럼 보여 주던 것
|
|
91
|
+
|
|
92
|
+
`Date.parse` 는 `2026-02-30` 을 **3월 2일**로 굴린다. `toInstant` 가 날짜 부분을 먼저
|
|
93
|
+
확인해 안 맞으면 `null` 을 준다(`todayYmdOr`·`trainingItemResults.timeOf` 도 같은 자를 쓴다).
|
|
94
|
+
새 export: `isValidDateValue`(`utils/date`). 같은 종류를 `formatWornDate` 에서 이미 막았다.
|
|
95
|
+
|
|
96
|
+
### 그 밖
|
|
97
|
+
|
|
98
|
+
- **동음어가 먼저 뽑히면 문제를 포기했다**(`genStartsWithSame`). 같은 첫소리 묶음에서
|
|
99
|
+
**소리가 다른** 짝을 찾아 쓴다 — 변별 과제가 성립하는 짝이 있는데 버리던 것.
|
|
100
|
+
- **이미지 캐시가 바뀌면 거르개가 다시 센다**(`IMAGE_EXISTENCE_CACHE_UPDATED`).
|
|
101
|
+
200ms 로 모아 알린다 — 대량 사전 확인 중에 수천 번 재계산되지 않게. 이 이름은
|
|
102
|
+
`utils` 통로에 **안 넣었다**(서브패스 `utils/imageConfig` 로만 닿는다, 안에서 쓰는 신호다).
|
|
103
|
+
- `resolveSelection` 이 시계를 **한 번만** 읽는다 — 두 번 읽는 사이 자정이 오면
|
|
104
|
+
오늘과 어제가 같아졌다.
|
|
105
|
+
|
|
106
|
+
### 내가 고친 것 둘
|
|
107
|
+
|
|
108
|
+
- `{ 가문: '가면' }` 의 열쇠에 따옴표를 둘렀다 — 자료 열쇠인데 없으면
|
|
109
|
+
`identifiersAreEnglish1013` 이 **영어 아닌 이름**으로 센다.
|
|
110
|
+
- `afterEach(() => vi.restoreAllMocks())` 를 중괄호 꼴로 바꿨다(두 자리). 간결한 꼴은
|
|
111
|
+
`VitestUtils` 를 돌려주어 `Awaitable<void>` 와 안 맞아 `tsconfig.test` 가 TS2322 로 막았다.
|
|
112
|
+
|
|
10
113
|
## 0.344.0 — 조용히 틀리던 자리 스무 곳
|
|
11
114
|
|
|
12
115
|
**다른 세션이 10분마다 훑어 찾아 고친 것을 받아 검토하고 냈다.** 알맹이 23파일 · 시험
|