@ihabdevteam/core 0.131.0 → 0.133.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 +108 -0
- package/dist/components.cjs.js +178 -178
- package/dist/components.esm.css +2 -2
- package/dist/hooks.cjs.js +1 -1
- package/dist/i18n.cjs.js +1 -1
- package/dist/ihabdevteam-core.cjs.js +181 -181
- package/dist/ihabdevteam-core.d.ts +55 -17
- package/dist/packages/core/src/components/Accordion.js +4 -1
- package/dist/packages/core/src/components/Badge.d.ts +5 -0
- package/dist/packages/core/src/components/Badge.js +3 -3
- package/dist/packages/core/src/components/BarChart.d.ts +1 -1
- package/dist/packages/core/src/components/BarChart.js +25 -14
- package/dist/packages/core/src/components/BottomNav.js +3 -3
- package/dist/packages/core/src/components/BulkBar.js +1 -1
- package/dist/packages/core/src/components/Calendar.js +4 -0
- package/dist/packages/core/src/components/ChartSection.css +16 -0
- package/dist/packages/core/src/components/ChartSection.d.ts +8 -1
- package/dist/packages/core/src/components/ChartSection.js +2 -2
- package/dist/packages/core/src/components/ChoiceChips.js +1 -1
- package/dist/packages/core/src/components/CodeBox.js +1 -1
- package/dist/packages/core/src/components/DatePicker.js +16 -3
- package/dist/packages/core/src/components/Dropdown.js +13 -3
- package/dist/packages/core/src/components/FileUpload.js +8 -7
- package/dist/packages/core/src/components/FilterPanel.js +8 -5
- package/dist/packages/core/src/components/FilterSectionInfo.js +1 -1
- package/dist/packages/core/src/components/Header.js +1 -1
- package/dist/packages/core/src/components/HearingDeviceInfo.js +1 -1
- package/dist/packages/core/src/components/PageTitle.css +6 -0
- package/dist/packages/core/src/components/PageTitle.d.ts +9 -1
- package/dist/packages/core/src/components/PageTitle.js +3 -3
- package/dist/packages/core/src/components/Pagination.js +1 -1
- package/dist/packages/core/src/components/PanelRow.js +3 -3
- package/dist/packages/core/src/components/PaymentPlan.js +1 -1
- package/dist/packages/core/src/components/Popup/DeviceSideTable.js +2 -2
- package/dist/packages/core/src/components/Popup/LoadTablePopup.js +2 -2
- package/dist/packages/core/src/components/Popup/Popup.d.ts +8 -0
- package/dist/packages/core/src/components/Popup/Popup.js +17 -3
- package/dist/packages/core/src/components/Popup/SaveTablePopup.js +1 -1
- package/dist/packages/core/src/components/Popup/TrainingResultPopup.js +1 -1
- package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.js +3 -3
- package/dist/packages/core/src/components/RingChart.d.ts +3 -1
- package/dist/packages/core/src/components/RingChart.js +2 -2
- package/dist/packages/core/src/components/SegmentedControl.js +1 -1
- package/dist/packages/core/src/components/SideNav.js +27 -10
- package/dist/packages/core/src/components/Table.d.ts +17 -1
- package/dist/packages/core/src/components/Table.js +15 -9
- package/dist/packages/core/src/components/Tabs.js +7 -2
- package/dist/packages/core/src/components/TextField.js +34 -5
- package/dist/packages/core/src/components/Tooltip/MenuTooltip.js +1 -1
- package/dist/packages/core/src/components/Tooltip/TextBoxTooltip.js +1 -1
- package/dist/packages/core/src/components/Tooltip/Tooltip.js +13 -5
- package/dist/packages/core/src/components/Training/NoiseSettingsTooltip.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingBlock.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingBlockButton.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingCardGroup.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingPagePopup.js +51 -23
- package/dist/packages/core/src/components/Training/TrainingPagePopupBottom.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingPagePopupTitle.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingStepAudioPlayer.js +26 -5
- package/dist/packages/core/src/components/Training/TrainingStepConfirm.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingStepConfirmWithText.js +2 -2
- package/dist/packages/core/src/components/Training/TrainingStepOrderList.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingStepTextBox.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingStepTitle.js +1 -1
- package/dist/packages/core/src/components/Training/TrainingWordCard.js +11 -6
- package/dist/packages/core/src/components/Training/useAudioPreview.js +7 -3
- package/dist/packages/core/src/components/UpdateAlert.js +1 -1
- package/dist/packages/core/src/components/Word/PhonemeSelectBlock.js +2 -2
- package/dist/packages/core/src/components/Word/WordSearchResultBlock.js +3 -3
- package/dist/packages/core/src/components/Word/WordTableBlock.js +2 -2
- package/dist/packages/core/src/components/Word/WordTableButton.js +1 -1
- package/dist/packages/core/src/components/WordTable.js +6 -6
- package/dist/packages/core/src/components/barChartTypes.d.ts +2 -0
- package/dist/packages/core/src/components/useComboboxSuggestions.d.ts +1 -0
- package/dist/packages/core/src/components/useComboboxSuggestions.js +12 -6
- package/dist/packages/core/src/components/useToastLifecycle.js +8 -1
- package/dist/packages/core/src/hooks/useAnchoredMenu.js +10 -9
- package/dist/packages/core/src/hooks/useDocumentTitle.d.ts +0 -11
- package/dist/packages/core/src/hooks/useDocumentTitle.js +16 -3
- package/dist/packages/core/src/hooks/useFocusTrap.js +6 -2
- package/dist/packages/core/src/utils/audioPeaks.js +13 -5
- package/dist/packages/core/src/utils/csv.js +3 -1
- package/dist/packages/core/src/utils/koreanSyllable.js +2 -1
- package/dist/packages/core/src/utils/textSort.d.ts +0 -10
- package/dist/packages/core/src/utils/textSort.js +7 -2
- package/dist/packages/core/src/utils/wordTrainingRuntime.js +28 -4
- 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,114 @@ All notable changes to this project will be documented in this file.
|
|
|
7
7
|
> 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
|
|
8
8
|
> 제 이야기를 못 찾는다.
|
|
9
9
|
|
|
10
|
+
## 0.133.0
|
|
11
|
+
|
|
12
|
+
2026-09-14 저녁 검수 판이다 — 오버레이·입력·훅·유틸을 네 갈래로 훑어 **실제로 재현된** 결함만 고쳤다. 항목마다 시험을 붙이고,
|
|
13
|
+
고친 줄을 되돌리면 그 시험이 붉어지는 것을 확인했다. 걷은 prop·타입·열쇠는 없다(새 prop 도 없다).
|
|
14
|
+
|
|
15
|
+
### 바뀜 — Esc 는 맨 위 하나만 닫는다
|
|
16
|
+
|
|
17
|
+
- **앵커 메뉴**(`useAnchoredMenu` — DatePicker·BottomNav 더보기·Header 메뉴)와 **Tooltip**(onClose 있는 떠 있는 툴팁)의 Esc 가
|
|
18
|
+
Popup 과 **같은 공유 ESC 스택**에 오른다. 전에는 document 에서 따로 들어, 팝업 안 달력·툴팁에서 Esc 한 번에 **팝업까지** 닫혔다
|
|
19
|
+
(말귀 어드민 쿠폰 생성 팝업 — 입력이 날아갔다). 달력 안 연월 Dropdown 의 Esc 도 달력까지 닫던 것이 멎는다.
|
|
20
|
+
- **TrainingPagePopup**: Esc 를 판 keydown 에서만 들어 문제 글·그림을 눌러 포커스가 body 로 가면 Esc 가 먹지 않았다 — 공유 스택으로.
|
|
21
|
+
훈련 창이 다른 팝업 위에 있을 때 가려진 팝업이 닫히던 것도 멎는다.
|
|
22
|
+
|
|
23
|
+
### 바뀜 — 포커스
|
|
24
|
+
|
|
25
|
+
- **Popup**: 닫으면서 다음 창을 열면(미리보기 → 삭제 확인) 닫힘 애니메이션 뒤 **뒤 화면의 여는 단추로 포커스를 빼앗던** 것.
|
|
26
|
+
포커스가 그 창 안이거나 body 일 때만 되돌린다.
|
|
27
|
+
- **Popup Tab 가둠**: 판 자체(본문 글자를 누르면 판이 받는다)에 포커스가 있을 때 Shift+Tab 이 뒤 화면으로 나가던 것, 닫히지 않는
|
|
28
|
+
바탕(`closeOnBackdrop={false}` 등)을 누르면 포커스가 body 로 떨어져 가둠이 풀리던 것.
|
|
29
|
+
- **TrainingPagePopup**: 첫 칸 포커스가 `onBack` 이 바뀔 때마다 다시 돌아 **훈련 중 포커스를 첫 칸으로 끌어오던** 것 — 마운트 때 한 번만.
|
|
30
|
+
닫히면 연 곳으로 포커스를 되돌린다.
|
|
31
|
+
- **Dropdown**: Tab 으로 트리거를 떠나면 메뉴를 닫는다(열린 채 남아 화살표·Enter 가 안 가던 죽은 메뉴). 열린 동안 부모가 `options` 를
|
|
32
|
+
새 배열로 넘겨도 화살표로 옮긴 가리킴이 선택값 자리로 튀지 않는다.
|
|
33
|
+
- **DatePicker**: 오늘·활성일이 min/max 밖이라 꺼져 있으면 격자에 Tab 자리가 없어 키보드로 들어갈 수 없던 것 — 켜진 날이 받는다.
|
|
34
|
+
- **Tabs**: 첫 탭이 꺼져 있거나 `value` 가 items 에 없으면 켜진 첫 탭을 고르고 Tab 자리를 준다.
|
|
35
|
+
|
|
36
|
+
### 바뀜 — 폼 안에서 제출되던 단추(113곳)
|
|
37
|
+
|
|
38
|
+
코어가 제 안에서 그리는 `Button` 113곳에 `htmlType="button"`. Button 은 htmlType 이 없으면 type 을 붙이지 않아(앱 로그인 폼이 그
|
|
39
|
+
기본값으로 제출하므로 **기본값은 그대로**) 앱이 Pagination·SegmentedControl·FilterPanel·ChoiceChips 등을 `<form>` 안에 두면 누를 때마다
|
|
40
|
+
폼이 제출됐다. `test/noSubmitButtonsInCore` 가 소스를 훑어 지킨다.
|
|
41
|
+
|
|
42
|
+
### 바뀜 — 입력
|
|
43
|
+
|
|
44
|
+
- **FilterPanel** `display:'segmented'`(allOption 없음): 고른 것이 없는데 첫 보기가 골라진 것처럼 보이던 것.
|
|
45
|
+
- **FileUpload** 비제어 모드: `onRemove` 를 주면 뺀 파일이 목록에 남던 것 — 알림은 onRemove 한 번(전과 같음), 보이는 목록은 줄인다.
|
|
46
|
+
|
|
47
|
+
### 바뀜 — 훈련·소리
|
|
48
|
+
|
|
49
|
+
- **소음 설정**: 저장된 설정을 **불러오기 전에** 바꾸면 `enabled:false` 초기값 위에 합쳐 곧바로 저장돼 **다음 판부터 소음이 꺼졌고**,
|
|
50
|
+
늦게 온 불러오기가 그 변경을 덮었다. 불러오기 전 변경은 모아 두었다가 불러온 값 위에 얹어 한 번 저장한다.
|
|
51
|
+
- **TrainingStepAudioPlayer**: 불러오는 중 다음 문항으로 넘기거나 팝업을 닫아도 흐름이 돌아 **떼어진 `<audio>` 에서 이전 문장이 끝까지
|
|
52
|
+
울리던** 것. 쓸 소스를 하나도 못 얻으면 'load' 에 갇혀 듣기 단추가 사라지던 것 — 알리고 누를 수 있는 상태로.
|
|
53
|
+
- **TrainingWordCard**: 카드가 번호 key 로 재사용될 때 새 낱말의 URL 을 받기 전·못 받았을 때 **이전 낱말 소리**가 나던 것.
|
|
54
|
+
- **한 음소 바꾸기**(`CHANGE_1_PHONEME_IN_1SYLL`·`2SYLL`): 오답끼리·정답과 소리가 같은 보기(낮·낯)를 거르고, 철자가 두 자리 이상 다른
|
|
55
|
+
발음 대립쌍(같이↔가지)은 바꾼 단어로 쓰지 않는다('같이에서 같을 가로' 가 되어 문제 글과 정답이 어긋났다).
|
|
56
|
+
- **useAudioPreview**: 코드 없는 훈련으로 바뀌어도 이전 훈련 주소로 미리듣기가 나던 것.
|
|
57
|
+
- **computePeaksFromUrl**: 디코딩 실패·채널 없음에서 AudioContext 를 닫지 않던 것(파형 실패마다 하나씩 남음), `ok:false` 응답도 디코딩하던 것.
|
|
58
|
+
|
|
59
|
+
### 바뀜 — 훅·유틸
|
|
60
|
+
|
|
61
|
+
- **useDocumentTitle**: 화면이 겹쳐 떠 있다가 먼저 붙은 쪽이 나중에 떠나면 뒤 화면의 제목을 지우던 것 — 건 제목을 쌓아 남은 맨 위로
|
|
62
|
+
돌린다(말귀 CustomersPage 의 우회는 그대로 두어도 된다).
|
|
63
|
+
- **Toast**(useToastLifecycle): 보이는 중 문구를 바꾼 뒤 떠나면 타이머가 살아 **떠난 뒤 `onClose`** 가 불리던 것.
|
|
64
|
+
- **escapeCsvField**: 숫자 값(음수·환불 금액)에 탭을 붙여 엑셀이 글자 칸으로 읽던 것. 글자 `'-2+3'` 은 그대로 막는다.
|
|
65
|
+
- **칸순**(ListPopup 정렬): 글자로 온 숫자('10'·'9')를 글자로 견주던 것, NaN 이 비교를 흐트러뜨리던 것.
|
|
66
|
+
- **matchesWordQuery**: 영문을 대소문자 구분해 'apple' 로 'Apple' 을 못 찾던 것.
|
|
67
|
+
|
|
68
|
+
### 소비자에게
|
|
69
|
+
|
|
70
|
+
- **Dropdown 을 시험에서 열고 다른 요소로 포커스를 옮기면 메뉴가 닫힌다.** 항목은 click 으로 고르면 그대로 된다.
|
|
71
|
+
- 훈련 러너에서 Esc 는 **포커스가 어디 있든** 훈련 창을 닫는다(맨 위 팝업일 때). 판에 keyDown 을 쏘던 시험은 그대로 통과한다.
|
|
72
|
+
- 고치지 않은 것: 조사 `pickIga` 등이 숫자 끝('Step 1')에서 기본값 '가' 를 쓰는 것 — `사과(1)` 같은 동음이의 번호를 위해 숫자를 건너뛰도록
|
|
73
|
+
시험(josaFormat)이 정해 두었다.
|
|
74
|
+
|
|
75
|
+
## 0.132.0
|
|
76
|
+
|
|
77
|
+
말귀가 "스타일 오버라이드 없도록 모두 정리" 하다 코어에 길이 없어 못 걷은 덮음 여섯을 prop 으로 연 판이다.
|
|
78
|
+
**기본값은 모두 지금 동작 그대로** — 켜야 달라진다. 걷은 prop·열쇠는 없다.
|
|
79
|
+
|
|
80
|
+
### 더함 — 앱 CSS 덮음을 대신하는 prop 여섯
|
|
81
|
+
|
|
82
|
+
- **`ChartSection` · `BarChart` · `RingChart` 의 `inGrid`**: CSS 격자 칸 안의 카드. `manager-section--grid` 를 붙여
|
|
83
|
+
아래 여백(14px)·최소 폭(320px, 작은 카드 160px)을 풀고 세로 flex 로 만든다. 같은 줄 카드끼리 늘어난 높이는 차트 몸통
|
|
84
|
+
(`.manager-bar-chart-wrap` · `.manager-bar-chart-loading` · `.ring-chart-section-body`) 위로 몰려 막대·링이 **카드 바닥**에
|
|
85
|
+
맞는다(범례 줄 수가 달라도). 차트가 아닌 카드(앱이 `manager-section` 을 직접 쓰는 자리)는 `manager-section--grid` 클래스를 그대로 붙인다.
|
|
86
|
+
- **`Popup` 의 `height?: number | string`**: 패널 높이를 못 박는다(숫자 = px). 화면보다 크면 패널의 `max-height` 가 눌러 화면에 맞춘다
|
|
87
|
+
— 탭을 옮길 때 창이 뛰지 않게.
|
|
88
|
+
- **`PageTitle` 의 `wrap?: boolean`**: 오른쪽(`rightAction`)이 넓으면 줄을 접는다. 제목 칸 바닥은 `min(320px, 100%)` — 좁은 그릇을 넘지 않는다.
|
|
89
|
+
- **`Table` 의 `mobileGridTemplateColumns?: string`**: 767px 이하에서 쓸 열 틀. 그 폭에서는 끌어 둔 폭(저장값)보다 이기고, 폭 조절
|
|
90
|
+
손잡이·'칸 너비 초기화' 단추를 숨긴다(좁은 화면에서 끈 값이 넓은 화면 저장값을 덮지 않게). `MediaQueryOverrideContext` 를 따른다.
|
|
91
|
+
- **`Table` 의 `isRowClickable?: (item) => boolean`**: 줄마다 누를 수 있는지. false 인 줄은 `onRowClick` 이 안 불리고 `role="button"`·Tab 정지점·
|
|
92
|
+
손가락 커서·hover 강조가 없다 — CSS 로 커서만 되돌리면 낭독기에는 여전히 단추였다.
|
|
93
|
+
|
|
94
|
+
### 고침
|
|
95
|
+
|
|
96
|
+
- **BarChart**: 두 계열 달 보기에서 한 주의 `b` 가 비면(undefined) y축 최대가 NaN → `NaN || 10` 으로 자료와 상관없이 10 에 박혀 막대가
|
|
97
|
+
판 위로 넘쳤다. 수가 아닌 값은 0 으로 센다(툴팁 글도). 진행률(최대 100)을 넘는 값·쌓은 막대의 합도 판 높이에서 누른다.
|
|
98
|
+
(주 보기는 빈 값을 이미 0 으로 바꿔 두어 안 닿았다.)
|
|
99
|
+
- **SideNav**: 항목 `badge` 와 알림 `unreadCount` 를 단추 이름에 붙인다 — `"숙제, 3개"` · `"알림, 5개"`(사전 열쇠 `nav.badgeLabel`). 배지 자체는
|
|
100
|
+
`aria-hidden`. 전에는 항목 배지가 이름에서 빠지고, 알림 배지는 "N번째 선택" 으로 읽혔다. 항목 단추에 `type="button"`.
|
|
101
|
+
**단추 이름이 바뀌므로 `getByRole('button', { name: '숙제' })` 로 찾던 시험은 이름을 고친다.**
|
|
102
|
+
- **SideNav**: 키보드(Enter/Space)로 항목을 고르면 포커스가 그 단추에 남는다(전에는 `blur()` 로 body 로 떨어졌다). 태블릿 레일 강제 접힘도 마우스·터치일 때만.
|
|
103
|
+
- **Badge**: 선택 prop `aria-hidden`.
|
|
104
|
+
- **Accordion**: 항목에 `role="listitem"` — 무리가 `role="list"` 라 낭독기가 항목 0개로 읽었다.
|
|
105
|
+
- **TextField · 자동완성**:
|
|
106
|
+
(1) 가리킨 채 후보가 줄면 Enter 가 `onChange(undefined)` 를 냈다 — 이제 없어진 칸을 고르지 않는다.
|
|
107
|
+
(2) 고르거나 Esc 로 닫은 뒤 다시 쳐도 목록이 안 열렸다 — 다시 연다.
|
|
108
|
+
(3) controlled `type="password"` 칸이 부모가 거절·정규화한 값(공백 걷기 등)을 화면에 안 따랐다 — 이제 value 를 따른다.
|
|
109
|
+
(4) 비제어 칸(`defaultValue`)은 `value` 로만 세어 카운터가 0, 지우기 단추 안 뜸, 자동 높이 안 됨이었다 — 모두 고쳤고 지우기는 화면의 값도 비운다.
|
|
110
|
+
- **Calendar**: 방문 표시에서 Enter·Space 를 누르면 keydown 이 날짜 칸으로 올라가 `onDayClick`('그날 새 방문')까지 불렸다(마우스는 괜찮았다).
|
|
111
|
+
칸은 제 자신에서 난 키만 받는다. 말귀 `CustomerVisitTable` 이 두 처리기를 함께 넘겨 실제로 일어나던 일이다.
|
|
112
|
+
|
|
113
|
+
### 놀이터
|
|
114
|
+
|
|
115
|
+
- 소리 주소를 서명 없이 공개 주소로 받는다(늘 400 으로 실패하던 서명 요청을 걷음).
|
|
116
|
+
- 새 prop 여섯의 설명을 props 표에 적었다.
|
|
117
|
+
|
|
10
118
|
## 0.131.0
|
|
11
119
|
|
|
12
120
|
0.130.0 에서 "정해야 할 것" 으로 남겼던 넷을 정한 판이다. 공개 prop·타입은 걷지 않았다.
|