@ihabdevteam/core 0.205.0 → 0.207.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,90 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.207.0
11
+
12
+ ### 고침 — 접기 손잡이가 적어 둔 자리에 안 섰다 (말귀 요청 ㉖)
13
+
14
+ `FilterPanel` 머리말에는 처음부터 "헤더 **우측에** 접기/펼치기 토글 버튼을 노출" 이라 적혀
15
+ 있었는데, 실제로는 **제목 왼쪽**에 섰다. 글이 옳고 마디가 틀렸다 — 어긋난 줄 아무도 몰랐다.
16
+ 머리 맨 끝(요약·`headerAction` 다음)으로 옮긴다.
17
+
18
+ `collapseToggleSide` 같은 고르개는 안 만든다. 왼쪽을 원한 사람이 없었고, 왼쪽에 선 까닭도
19
+ 그렇게 지어진 것뿐이라 고를 거리가 아니다 — **고침이지 취향이 아니다.**
20
+
21
+ 말귀는 앱에서 `order` 로 미는 길이 있었지만 0.206.0 판올림 때 그런 우회를 다 걷어낸 참이라
22
+ 다시 두고 싶지 않다고 했다. 그 말이 맞다.
23
+
24
+ ### 더해짐 — 접힌 거르개 판이 제 속을 **스스로** 말한다 (말귀 요청 ㉗)
25
+
26
+ 0.206.0 에서 `headerSummary` 로 자리는 냈지만 글월 짓는 셈은 부르는 쪽에 뒀다. 그런데
27
+ **표 설정 판은 값이 `WordTableBlock` 안에 있어 부르는 쪽이 지을 길이 아예 없었다** — 접으면
28
+ 제목만 남았다. 지을 수 있는 판에서도 이름표를 옮겨 적다 두 화면이 서로 달라진 적이 있다.
29
+
30
+ 이름표도 값도 코어 것이니 **안 주면 코어가 짓는다** — `절 이름 + 고른 값` 을 ` · ` 으로 잇는다:
31
+
32
+ 구성 이미지, 단어, 표준 발음 · 용지 방향 가로 · 페이지당 대립쌍 수 8개 · 외곽선 표시 …
33
+
34
+ **주면 준 것이 이긴다** — 글월을 부르는 쪽이 쥐던 길은 그대로 열려 있다. 셈은
35
+ `utils/filterPanelSummary` 에 따로 두어 절 하나하나를 재고, 안 담는 절도 정해 뒀다:
36
+ `note`(고르는 절이 아니다) · `input`(빈 칸을 '전체' 라 하면 거짓이다) · 고른 것이 없는데
37
+ '전체' 보기도 없는 절(말할 것이 없다).
38
+
39
+ ### 고침 — 긴 요약이 제목을 두 줄로 접었다
40
+
41
+ ㉗ 을 눈으로 보다 걸렸다. 표 설정 요약은 절이 일곱이라 495px 인데, 제목과 요약이 함께
42
+ 줄어들어 **'표 설정' 두 글자가 두 줄로 접히고**(26px → 52px) 60px 머리에 눌렸다. 게다가
43
+ `space-between` 의 빈 곳이 0이 되어 `표 설정구성 이미지…` 로 붙어 읽혔다.
44
+
45
+ 제목이 먼저 자리를 얻고 요약이 양보한다(`flex-shrink: 0`). 다만 제목이 머리를 다 먹으면
46
+ 요약이 통째로 사라지므로 절반까지만 준다. 머리에 `gap` 을 주어 둘이 안 맞닿게 하고, 긴 요약은
47
+ 줄이지 말고 …로 자른다.
48
+
49
+ ### 달라짐 — 검색 결과 머리를 한 급 올린다 (말귀 요청 ㉘)
50
+
51
+ `WordSearchResultBlock` 의 `총 N개의 단어가 검색되었습니다` 가 **h4 → h3**(17px → 20px).
52
+
53
+ 0.206.0 에서 곁의 `FilterPanel` 과 **아주 같은 h4 로 맞춘 것을 되돌린다.** 그때는 두 상자를
54
+ 나란히 보이게 하려 했는데, 그러니 결과 덩이의 머리가 그 위 판 제목들(`검색 옵션` ·
55
+ `단어 검색 설정`)과 같은 급이 되어 무엇이 무엇의 머리인지 안 보였다. 거르개 판은 결과를 고르는
56
+ 도구고 이 덩이는 그 결과다 — **나란한 것이 아니라 아래 딸린 것이다.**
57
+
58
+ ### 손본 것 — 헛돌던 시험 하나
59
+
60
+ 0.206.0 의 '제목은 h4' 시험은 `items={[]}` 만 주어 **제목이 아예 안 그려졌고**, `if (제목)` 이
61
+ 거짓이라 아무것도 안 재고 초록이었다 — h4 를 h3 로 바꿔도 안 빨개졌다. 제목을 세우고 있는지부터
62
+ 재도록 고쳤다. 접기 시험 셋은 손잡이를 `.filter-panel__title-row button` 으로 찾고 있었는데,
63
+ 이름·펼침 상태를 재면서 **자리까지 못 박고 있던** 것이라 무엇인지로 찾도록 바꿨다. 자리는
64
+ `filterHeaderToggleSide.test.tsx` 가 따로, 일부러 잰다.
65
+
66
+ ### 손본 것 — 소비자 표가 안 깔린 판을 깔렸다고 적고 있었다
67
+
68
+ `RELEASE.md` 의 소비자 표에 소리방향성·kscan 이 **0.206.0 으로 적혀 있었으나 실물은
69
+ 0.36.0 · 0.183.2** 였다. 표 바로 아래 문단은 그 둘을 옳게 적고 있어 서로 어긋나 있었다.
70
+ 실측값으로 되돌린다 — 이 표의 오른쪽 칸은 약속이 아니라 `node_modules` 를 읽은 값이다.
71
+
72
+ ## 0.206.0
73
+
74
+ ### 소비자에게 먼저 — 거르개 판 접기 한 벌, 그리고 검색 결과 머리가 상자 안으로
75
+
76
+ 말귀가 `단어표 만들기` 에서 오버라이드로 세운 것을 코어로 올린 묶음이다(2026-09-29). **다섯 중 넷은 새 prop 이라 안 주면 예전 그대로** 이고,
77
+ 마지막 하나(`WordSearchResultBlock`)는 **화면이 달라진다** — 그 블록을 쓰는 화면은 한 번 본다.
78
+
79
+ - **`FilterPanel headerSummary`** — 머리 오른쪽에 **접혀도 남는** 자리. `headerAction` 은 펼쳤을 때만 서고 접으면 사라지므로,
80
+ 접힌 판이 제 속을 말할 데가 `title` 밖에 없었다(소비자가 제목 안에 요약을 싣고 CSS 로 오른쪽 끝까지 미는 억지를 썼다).
81
+ **접히면 요약이, 펼치면 `headerAction` 이 같은 칸을 쓴다.** 요약 글월을 짓는 셈은 부르는 쪽에 둔다 — 코어는 자리만 낸다.
82
+ - **접기 손잡이가 머리 줄 전체다**(`collapsible`). 머리 아무 데나 눌러도 접히고, **`headerAction` 안의 단추·입력칸을 누른 것은 접지 않는다.**
83
+ chevron 단추는 그대로 남는다(`aria-expanded` 를 읽어 주는 진짜 손잡이다) — 다만 **바탕·테두리를 지워 아이콘만 보이고, 포커스 표시는 남긴다.**
84
+ 머리에 `role`·`tabIndex` 를 주지 않은 것은 같은 일을 하는 Tab 자리가 둘이 되면 키보드 쓰는 사람에게 되레 나쁘기 때문이다(그 판단을 `clickNeedsKeyboard` 예외에 적었다).
85
+ - **`WordSearchFilterPanel` 이 접기 넷과 머리 둘을 그대로 넘긴다**(`collapsible`·`defaultCollapsed`·`collapsed`·`onCollapsedChange`·`headerSummary`·`headerAction`).
86
+ 이것이 없어서 소비자가 **껍데기를 건너뛰고 `FilterPanel` 을 직접** 쓰고 있었다 — 그러면 껍데기가 쥔 두 줄(i18n 제목·`align="inline"`)이 소비자 쪽에 복사된다.
87
+ - **`TableFilterPanel` 도 같은 여섯을 받고, `WordTableBlock` 이 그것을 안쪽 판에 넘긴다**(`filterTitle`·`filterCollapsible`·`filterDefaultCollapsed`·`filterHeaderSummary`).
88
+ 제목은 **화면마다 달라야 한다**(단어표는 '단어표 설정', 대립쌍표는 그 화면 말) — 코어 기본값을 바꾸는 것으로는 안 되고, 앱 사전으로 코어 열쇠를 덮는 것은
89
+ 말귀의 `guards/i18nOwnership` 이 막는다(옳은 규칙이다). 그래서 **부르는 쪽이 제 열쇠로 지어 넘긴다.**
90
+ - **`WordSearchResultBlock` 의 제목·부제·조작부가 상자 안에 선다**(사용자 지시). 전에는 `Section` 의 머리가 상자 **밖** 에 서서 제목이 테두리 위에 뜨고
91
+ 좌우 여백도 옆의 `FilterPanel` 과 달라 보였다. 이제 여백(`--spacing-l`)·제목 등급(h4)·부제(body-3 회색)를 그 판과 맞춘다.
92
+ **`Section` 의 머리는 더 이상 안 쓴다** — 두 머리가 함께 서면 제목이 두 번 읽힌다.
93
+
10
94
  ## 0.205.0
11
95
 
12
96
  ### 더해짐 — 액션 줄 왼쪽에 부르는 쪽이 단추를 놓는 자리 (말귀 요청 ㉕)