@ihabdevteam/core 0.230.0 → 0.232.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 CHANGED
@@ -7,6 +7,73 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.232.0
11
+
12
+ ### `TextField` 의 자동완성이 **글자 하나보다 두꺼운 줄**을 받는다 (말귀 요청 ㊻)
13
+
14
+ 코어는 콤보박스를 **이미 할 줄 안다** — `role="combobox"` · `aria-autocomplete` · `aria-haspopup` ·
15
+ `aria-expanded` · `aria-controls` · `aria-activedescendant` 를 스스로 셈해 붙이고, 목록을 포털로
16
+ 그리고, ↓↑ 와 한글 조합 가리기까지 쥔다. 그런데 `suggestions` 가 `string[]` 뿐이라 **담기지
17
+ 않는 자리**가 있었다: 줄 하나가 `이름 + 갈래` 이고, 거르는 셈이 초성이며, 고르는 것이 '값
18
+ 채우기' 가 아니라 '어디로 가기' 인 화면 찾기.
19
+
20
+ 그래서 말귀는 `querySelector('input')` 으로 `role`·`aria-*` 를 손수 붙이고 목록·줄·↓↑·조합
21
+ 가리기를 **통째로 다시 적고** 있었다. 코어가 쥔 것을 못 쓰고 베끼는 꼴이다.
22
+
23
+ ```ts
24
+ suggestions?: (string | TextFieldSuggestion)[] // { id, label, hint? }
25
+ filterSuggestions?: false | ((후보, 글) => 후보) // false 면 안 거른다
26
+ onSelectSuggestion?: (item) => void // 주면 칸에 값을 안 넣는다
27
+ autoActiveFirst?: boolean // 열자마자 첫 줄을 짚는다
28
+ ```
29
+
30
+ - **`hint`** 는 줄 오른쪽에 흐리게 서는 갈래 글자(`숙제` · `나의 단어표`). 좁으면 **이름이 먼저
31
+ 줄고 갈래는 안 줄인다** — 같은 이름 둘을 가리는 것이 그 글자가 선 까닭이라 잘리면 뜻이 없다.
32
+ - **`filterSuggestions: false`** 는 빈 값에서도 그대로 낸다. 부르는 쪽이 이미 고른 것을 여기서
33
+ 또 비우면 그 셈을 버리는 꼴이다. 초성 찾기(`matchesChoseongSearch`, 이 꾸러미의 `utils`)처럼
34
+ 셈이 다른 자리에 쓴다.
35
+ - **`autoActiveFirst`** 는 `onSelectSuggestion` 과 **안 묶었다.** 고르는 것이 가기인데도 친
36
+ 글자를 그대로 쓰고 싶은 칸이 있다(검색어를 그대로 보내는 자리) — 서로 다른 결정이다.
37
+
38
+ **기존 쓰임은 그대로다.** `string[]` 을 주면 전과 한 글자도 안 달라진다. `useComboboxSuggestions`
39
+ 는 넘긴 꼴을 그대로 돌려주는 **제네릭**이 되어, `filtered` 로 목록을 그리던 코드도 안 바뀐다.
40
+
41
+ ### 고를 것이 없다는 말을 **들려준다**
42
+
43
+ 전에는 걸리는 후보가 0 이면 목록을 안 그리고 끝이었다. 눈으로는 "아무것도 안 떴다" 가
44
+ 보이지만 **낭독기로는 아무 일도 안 일어난 것과 못 가린다** — 쳤는데 반응이 없는지, 맞는 것이
45
+ 없는지를 모른다. `role="status"` 한 줄이 `맞는 항목이 없습니다` 를 알린다(영어도 있다).
46
+
47
+ **칸은 늘 서 있고 글만 드나든다.** 영역째 세웠다 치우면 낭독기가 첫 글을 놓친다 — 사는 영역은
48
+ 미리 있어야 바뀐 것을 읽는다. `suggestions` 를 안 쓰는 칸에는 아예 안 선다.
49
+
50
+ ### 새 공개 타입 — `TextFieldSuggestion`
51
+
52
+ `import { type TextFieldSuggestion } from '@ihabdevteam/core/components'`.
53
+
54
+ ## 0.231.0
55
+
56
+ ### `TrainingBlockButton` 의 '더보기' 가 **그 칸 이름**을 읽는다 (말귀 요청 ㊺)
57
+
58
+ 목록에 칸이 여러 장이면 이 단추도 여러 개다. `더보기` 혼자서는 낭독기로 지날 때 **열다섯
59
+ 번 같은 말**이 되어 어느 훈련인지 가릴 길이 없었다(말귀 실측: `나의 단어훈련` 열다섯 장).
60
+ 바로 옆 `WordTableButton` 은 진작 표 이름을 읽고 있어, **한 앱 안에서 같은 단추가 두 말을**
61
+ 하고 있었다.
62
+
63
+ ```
64
+ 전 더보기
65
+ 후 받침 대립 낱말 더보기
66
+ ```
67
+
68
+ **프롭을 안 만든다** — 이 조각이 이미 이름을 쥐고 있다. 화면의 칸 제목에 쓰는 바로 그 값
69
+ (`itemTitle` = `title` → `name` → `{유형} {차례}`)을 그대로 쓰므로 **보는 말과 읽히는 말이
70
+ 안 갈린다.** 이름이 빈 자리에서는 전과 같이 `더보기` 로 떨어진다.
71
+
72
+ 마지막 기댈 곳이 `{유형} {차례}` 라, 이름이 아예 없는 칸들끼리도 서로 다른 말이 된다.
73
+
74
+ > `onMore` 를 주는 모든 곳에 간다. 말귀 쪽에서 닿는 자리 넷(`TrainingSetCard` ·
75
+ > `SuggestSetBlocks` · `TrainingTypePage` · `TopicPage`)이 다 칸 여러 장 서는 목록이다.
76
+
10
77
  ## 0.230.0
11
78
 
12
79
  ### 읽기만 하는 채점 표 — 표시가 **자판 정지점과 '버튼' 이라는 말**에서도 빠진다 (말귀 요청 ㊹)