@ihabdevteam/core 0.193.0 → 0.195.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,55 @@ All notable changes to this project will be documented in this file.
7
7
  > 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
8
8
  > 제 이야기를 못 찾는다.
9
9
 
10
+ ## 0.195.0
11
+
12
+ ### 더해짐 — **게임 껍데기 한 벌** (`gameShell.css`)
13
+
14
+ 타자 게임과 순발력 게임이 **같은 규칙 서른셋**을 각자 적고 있었다(말귀 실측 2026-09-25: 짝지어지는
15
+ 선택자 62개 가운데 선언까지 글자대로 같은 것이 그만큼). 이름만 `tg-`/`rg-` 로 달랐고, 한쪽 여백을
16
+ 고치면 다른 쪽이 조용히 뒤처지는 자리였다. 시작 화면은 0.192.0 의 `GameIntro` 가 가져갔고, 껍데기가
17
+ 남은 마지막 두 벌이었다.
18
+
19
+ `game-overlay` · `game-sheet--play`(놀이 중 꼴) · `game-play-header` · `game-timer*` · `game-rounds*`
20
+ · `game-feedback*` · `game-result*` — **자리와 크기만** 든다. 전역 스타일(`styles.css`)이 들이므로
21
+ `@ihabdevteam/core/styles.css` 를 쓰는 소비자에게 그대로 간다.
22
+
23
+ - **색은 안 든다.** 시트의 바탕과 글자색은 게임마다 다르고 그것이 각 게임의 얼굴이다. 두 게임이
24
+ **이미 같은 값으로 쓰던** 색만 기본값으로 두되 `--game-overlay-bg` · `--game-dot-bg` ·
25
+ `--game-dot-correct` · `--game-dot-wrong` · `--game-muted` 로 열어 게임이 얹을 수 있게 했다.
26
+ 게임 판 바탕은 코어의 `--color-overlay` 를 **안 쓴다** — 그 토큰은 조금 더 어둡고 푸른 값이라
27
+ 바꾸면 게임 판 색이 조용히 달라진다.
28
+ - **게임 판의 층을 `--z-modal` 로 내렸다**(예전 `z-index: 3000`). 3000 은 `--z-tooltip` 과 같은
29
+ 값이라, 게임 안에서 띄운 툴팁이 차례에 따라 판에 가렸다. 창 층에 두면 그 위의 메뉴·툴팁이
30
+ 게임 안에서도 제대로 뜬다.
31
+ - **놀이 중 꼴은 `.game-sheet.game-sheet--play` 로 적는다.** 앱의 `.tg-sheet`(색이 있어 앱에 남는
32
+ 것)와 특이도가 같으면 파일 읽히는 차례로 승부가 갈린다 — 겹쳐 써서 차례에 기대지 않는다.
33
+ 앱에서 합치지 못하고 코어가 새로 세운 까닭이 이것이다.
34
+
35
+ ## 0.194.0
36
+
37
+ ### 더해짐 — `prefetchChunk` · `usePageResetOnChange`
38
+
39
+ 두 앱(회원앱 · 어드민)에 **한 벌씩** 있던 것들이다. 번들이 갈려 **앱끼리는 합칠 수 없는 자리**라,
40
+ 지킴이(`crossAppCopies`)가 갈라짐만 막고 있었다 — 지킴이는 갈라짐은 막아도 **왜 두 벌인지는 못
41
+ 없앤다.** 둘 다 도메인을 모르는 코드라 코어가 들 자리가 맞다(말귀 판단, 2026-09-25).
42
+
43
+ **`prefetchChunk(...loads)`** — 늦게 받는 화면 청크를 한가할 때 미리 받아 둔다. `lazyPage` 로 받는
44
+ 화면은 열려는 순간 청크를 받는데, 그 사이 제목도 구획도 없이 동그라미만 돈다(말귀 실측: 고객 상세
45
+ **364ms** 빈 화면). 미리 받아 두면 누르는 순간 뼈대가 먼저 선다.
46
+
47
+ - **첫 그리기를 안 건드린다** — `requestIdleCallback`, 그것이 **없는 사파리**에서는 300ms 미룸.
48
+ - **실패를 삼킨다** — 미리 받기가 안 되면 누를 때 받으면 된다(예전과 같을 뿐이다).
49
+ - 그만두는 함수를 돌려주므로 효과에서 그대로 돌려주면 된다.
50
+
51
+ **`usePageResetOnChange(열쇠, setPage)`** — 거르는 조건이 바뀌면 첫 쪽으로. `usePagedList` 의
52
+ 짝이다: 쪽을 **세는 것**은 코어에 있는데 **되돌리는 것**만 앱에 두 벌이었다. 안 돌리면 3쪽을 보던
53
+ 채로 검색어를 바꿨을 때 빈 표가 뜬다 — 찾는 것이 없어서가 아니라 **없는 쪽을 보고 있어서**다.
54
+
55
+ **효과가 아니라 렌더 중에 고친다.** 효과로 미루면 옛 쪽 번호로 한 프레임이 먼저 실리고, 그 프레임이
56
+ 곧 깜빡이는 빈 표다. 시험도 렌더 함수가 몇 번 돌았는지가 아니라 **실제로 실린 프레임**을 센다
57
+ (렌더 함수는 두 번 돌지만 커밋되는 것은 하나다).
58
+
10
59
  ## 0.193.0
11
60
 
12
61
  ### 바뀜 — `ConfirmPopup` 의 `topContent` 가 **여럿을 세로로 쌓는다**