@ihabdevteam/core 0.311.0 → 0.313.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 +96 -0
- package/dist/components.cjs.js +18 -13
- package/dist/hooks.cjs.js +3 -3
- package/dist/i18n.cjs.js +1 -1
- package/dist/ihabdevteam-core.cjs.js +61 -56
- package/dist/ihabdevteam-core.d.ts +1 -1
- package/dist/packages/core/src/components/BarChart.js +4 -0
- package/dist/packages/core/src/components/Popup/LoadTablePopup.js +3 -1
- package/dist/packages/core/src/components/SideNav.js +24 -5
- package/dist/packages/core/src/components/Table.js +8 -0
- package/dist/packages/core/src/components/TextField.js +19 -3
- package/dist/packages/core/src/components/Tooltip/Tooltip.js +16 -1
- package/dist/packages/core/src/components/Word/WordSearchResultBlock.js +14 -9
- package/dist/packages/core/src/components/Word/wordTablePrint.js +5 -0
- package/dist/packages/core/src/components/WordTable.js +39 -7
- package/dist/packages/core/src/context/I18nProvider.js +11 -2
- package/dist/packages/core/src/context/WordDataProvider.d.ts +1 -1
- package/dist/packages/core/src/context/WordDataProvider.js +13 -1
- package/dist/packages/core/src/hooks/useAnchoredMenu.js +19 -2
- package/dist/packages/core/src/version.d.ts +1 -1
- package/dist/packages/core/src/version.js +1 -1
- package/dist/utils.cjs.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,102 @@ All notable changes to this project will be documented in this file.
|
|
|
7
7
|
> 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
|
|
8
8
|
> 제 이야기를 못 찾는다.
|
|
9
9
|
|
|
10
|
+
## 0.313.0
|
|
11
|
+
|
|
12
|
+
**(113)~(115) 를 고치고 나서 코어를 제 손으로 뒤졌다**(사장님 지시 2026-10-10). 말귀가 짚은 셋이 *한 자리*가
|
|
13
|
+
아니라 **종류**라고 보고, 같은 종류를 세어 봤다 — **셋 다 둘째·셋째 자리가 있었다.**
|
|
14
|
+
|
|
15
|
+
> **어제 오늘 네 번째다.** 청을 받아 고치면서 *자리를 세지 않아* 한쪽만 고친 것: (99) 잠김 안내 ·
|
|
16
|
+
> `onRoundFinished` 세 겹 · (104) `renderResultPopup` 셋 · 그리고 이 셋. **고치는 쪽은 자리를 센다** 를
|
|
17
|
+
> 적어 두고도 안 했다. 그래서 이번엔 **파일마다 하나씩이 아니라 "그런 자리가 없다" 를 세는 못**으로 바꿨다.
|
|
18
|
+
|
|
19
|
+
### (114) 의 둘째 자리 — `I18nProvider`
|
|
20
|
+
|
|
21
|
+
프로바이더 값을 리터럴로 바로 넘기는 자리가 **둘**이었다. (114) 로 `WordDataProvider` 만 고치고 닫았다.
|
|
22
|
+
`I18nProvider` 도 앱 전체를 감싸고 `useI18n()` 은 공개 훅이다. **값은 늘 같은데 객체만 새로** 나는 꼴이라
|
|
23
|
+
가장 안 보인다 — 값이 틀리지 않으니 아무도 안 묻는다. `useMemo` 로 묶었다.
|
|
24
|
+
|
|
25
|
+
### (115) 의 둘째·셋째 자리 — `useAnchoredMenu` · `TextField`
|
|
26
|
+
|
|
27
|
+
**문서 전체의 굴림을 capture 로 받아 레이아웃을 읽는 자리**가 둘 더 있었다. `useAnchoredMenu` 는
|
|
28
|
+
`DatePicker` 가 `onScroll: 'reposition'` 을 주므로 달력이 열린 동안 굴리면 `getBoundingClientRect()` 가
|
|
29
|
+
틀마다 여러 번 돌았고, `TextField` 는 뜬 목록의 자리를 같은 꼴로 따라갔다. 둘 다 rAF 로 모았다 —
|
|
30
|
+
**`close` 길은 그대로 즉시다**(미루면 앵커에서 떨어진 판이 한 틀 더 허공에 남는다).
|
|
31
|
+
|
|
32
|
+
### `WordTable` 끌기 — 길을 갈랐다
|
|
33
|
+
|
|
34
|
+
*문턱을 넘었나* 는 **안 미룬다**(길게누름을 거두는 판정이라 미루면 손가락을 움직였는데도 끌기가 익는다).
|
|
35
|
+
*밑에 어느 칸인가* 는 `elementFromPoint` + 상태 바꾸기라 **모았다.** 그리고 **떼는 순간에 밀린 셈을
|
|
36
|
+
먼저 치른다** — 안 그러면 같은 틀 안에 떼면 **떨어뜨린 자리를 잃는다.** 그 자리는 **옛 못이 짚었다**
|
|
37
|
+
(`wordTableReorder0916`): 모으는 고침을 할 때는 *그 값을 읽는 쪽*도 봐야 한다.
|
|
38
|
+
|
|
39
|
+
### 안 고친 것도 까닭을 **그 줄 옆에** 적었다
|
|
40
|
+
|
|
41
|
+
세어 보니 잦은 이벤트를 듣는 자리가 열넷이고, 그중 **다섯은 미루면 틀린다**:
|
|
42
|
+
`WordTable` touchmove(`preventDefault()` 는 못 미룬다) · `Table` pointermove(저장값을 곧바로 써야 한다) ·
|
|
43
|
+
`BarChart` scroll(닫기만 한다) · `wordTablePrint` resize 둘(같은 함수를 `beforeprint` 가 부른다 — 미루면
|
|
44
|
+
옛 배율로 인쇄된다). `Table` 의 resize 는 **한 번 모아 봤다가 되돌렸다** — 불리언 상태라 React 가 멈추고,
|
|
45
|
+
옛 못이 그 배선을 글자로 박아 두었다(모을 값이 없다).
|
|
46
|
+
|
|
47
|
+
### 못은 **종류**를 센다 — 그리고 세 번 고쳐 세웠다
|
|
48
|
+
|
|
49
|
+
- 프로바이더: `.Provider value={{ … }}` 가 **없다**
|
|
50
|
+
- 잦은 이벤트: 모으거나, **그 줄 앞 열두 줄 안에** `안-모음:` 표가 있다
|
|
51
|
+
|
|
52
|
+
둘째 못을 세 번 고쳤다. ① *파일 안에 rAF 나 "미루면" 같은 말이 있으면 통과* → **내가 써 둔 설명글이
|
|
53
|
+
escape 를 채워** 옛 꼴로 되돌려도 조용했다(**글이 못을 재웠다**). ② 표를 그 줄 옆에서만 보게 조이니
|
|
54
|
+
**멀쩡한 자리 둘**을 짚었다(핸들러가 위에 멀리 정의된 꼴) → **핸들러 이름을 따라가** 그 몸을 본다.
|
|
55
|
+
③ 그 따라가기를 `\b` 로 썼더니 **한글 이름 뒤에서 영영 안 맞아**(`\b` 는 아스키 기준) 멀쩡한 여섯을
|
|
56
|
+
짚었다 — 저장소에 이미 적어 둔 함정인데 또 밟았다. 그리고 `handleScroll → 자리다시 → rAF` 처럼
|
|
57
|
+
**한 다리 건너**도 따라가게 했다. 지금 못에는 **뽑개 제 시험 넷**이 함께 있다.
|
|
58
|
+
|
|
59
|
+
## 0.312.0
|
|
60
|
+
|
|
61
|
+
사장님 지시로 돌린 최적화 전수 검수(말귀 `docs/OPTIMIZATION_AUDIT_2026-10-10.md`)에서 코어 몫 셋((113)~(115)).
|
|
62
|
+
셋 다 **값이 틀린 것이 아니라 같은 일을 여러 번 하는** 자리다 — 그래서 못이 세는 것도 *빠른가* 가 아니라
|
|
63
|
+
*그 일을 한 번만 하나* 다.
|
|
64
|
+
|
|
65
|
+
### (113) 한국어 글자 견주기는 **콜레이터 하나로** — 30.3ms → 8.1ms
|
|
66
|
+
|
|
67
|
+
`'가'.localeCompare('나', 'ko')` 는 **비교마다 콜레이터를 만든다.** `WordSearchResultBlock` 은 '시작 우선'
|
|
68
|
+
갈래에서만 만들어 둔 콜레이터를 쓰고 **여섯 갈래는 `localeCompare(…, 'ko')`** 였다 — 하필 기본 정렬이
|
|
69
|
+
`ganada` 라 **주된 길이 느린 쪽**이었다(말귀 실측 6,357개: **30.3ms → 8.1ms**).
|
|
70
|
+
|
|
71
|
+
**자리를 세니 일곱이었다** — 말귀가 짚은 여섯에 `LoadTablePopup` 의 이름 정렬 하나가 더 있었다. 그리고
|
|
72
|
+
그 파일에 **콜레이터가 하나 더** 있었다(`utils/textSort` 에 이미 있는데 또 만들고 있었다) — 그것도 걷었다.
|
|
73
|
+
이제 `한글순` 하나다. ISO 날짜·열쇠를 로케일 없이 `localeCompare()` 로 견주는 자리는 **그대로다**(코드포인트
|
|
74
|
+
차례면 맞고 그쪽이 빠르다).
|
|
75
|
+
|
|
76
|
+
### (114) `WordDataProvider` 의 값을 **기억해 둔다**
|
|
77
|
+
|
|
78
|
+
객체 리터럴을 바로 넘겨 **그릴 때마다 새 객체**였다 — 값이 하나도 안 바뀌어도 쓰는 쪽 **열한 자리가 다**
|
|
79
|
+
다시 그렸다. 이 프로바이더는 앱 전체를 감싼다.
|
|
80
|
+
|
|
81
|
+
> **앱에서는 흠이 아닌 것이 코어에서는 흠이다.** 앱은 React 컴파일러가 이런 자리를 메워 주지만
|
|
82
|
+
> **코어 묶음에는 컴파일러가 안 닿는다**(말귀 실측: `dist` 에 `_c(` 0건). 소비자가 어떤 빌드를 쓰는지
|
|
83
|
+
> 코어는 모르니 **코어는 손으로 적는다.**
|
|
84
|
+
|
|
85
|
+
### (115) 굴림마다 하는 일을 **틀에 한 번**으로 — 다만 닫는 일은 안 미룬다
|
|
86
|
+
|
|
87
|
+
`SideNav` 가 `scroll` 마다 바로 `setState`(값이 같아도 새 객체라 늘 다시 그렸다), `Tooltip` 이 **문서 전체의
|
|
88
|
+
굴림을 capture 로** 받아 `computePosition`(레이아웃을 읽는다)을 매번 돌렸다. 둘 다 rAF 로 모으고, `SideNav`
|
|
89
|
+
는 **값이 그대로면 상태를 안 건드린다.**
|
|
90
|
+
|
|
91
|
+
**닫는 길은 안 미뤘다.** 고정 사각형으로 띄운 툴팁은 굴리면 앵커에서 떨어지므로 그 자리에서 닫아야 한다 —
|
|
92
|
+
한 틀 미루면 **허공에 한 틀 더** 남는다. 미루는 것은 *자리* 뿐이고, 못이 그 가름을 **둘 다** 센다.
|
|
93
|
+
|
|
94
|
+
### 못 셋 중 **둘이 처음엔 아무것도 안 지켰다**
|
|
95
|
+
|
|
96
|
+
- (113) 의 인자 뽑개를 `/\.localeCompare\(([^)]*)\)/` 로 썼다. `label(b)` 처럼 인자 안에 괄호가 있으면
|
|
97
|
+
`[^)]*` 가 **첫 `)` 에서 멈춰** 쉼표를 못 본다 — 옛 꼴로 되돌려 돌렸더니 **조용했다.** 괄호를 세게 고쳤고,
|
|
98
|
+
**뽑개 제 시험**을 함께 두었다.
|
|
99
|
+
- (115) 의 `SideNav` 못은 rAF **예약 수**가 `<= 1` 인지만 봤다. 안 모으는 꼴은 예약을 **아예 안 하므로 0** 이고
|
|
100
|
+
그것도 `<= 1` 이라 통과했다. **한 일**(레이아웃 읽은 횟수)을 세게 고쳤다 — 모았으면 굴림 열 번에 0, 안
|
|
101
|
+
모았으면 10.
|
|
102
|
+
|
|
103
|
+
> **못은 깨뜨려 보기 전까지 못이 아니다** — 오늘 이 자리에서 세 번째다. 그리고 두 번 다 *세는 수가
|
|
104
|
+
> 한 일이 아니라 거드는 일*이었다(예약 수 · 첫 괄호까지의 글).
|
|
105
|
+
|
|
10
106
|
## 0.311.0
|
|
11
107
|
|
|
12
108
|
사용자 지시(2026-10-10): *"오버라이드하거나 반복적으로 주입하는 건 코어에 요청해서 공통으로."* 그 결로
|