velox-grid 0.11.0 → 0.12.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +528 -483
  2. package/README.md +804 -755
  3. package/dist/react/index.esm.js +1413 -743
  4. package/dist/react/index.esm.js.map +1 -1
  5. package/dist/react/index.js +6 -6
  6. package/dist/react/index.js.map +1 -1
  7. package/dist/react/react/VeloxGridReact.d.ts.map +1 -1
  8. package/dist/react/types/index.d.ts +117 -2
  9. package/dist/react/types/index.d.ts.map +1 -1
  10. package/dist/types/core/GridColumnLayout.d.ts +122 -0
  11. package/dist/types/core/GridColumnLayout.d.ts.map +1 -0
  12. package/dist/types/core/GridDragManager.d.ts +23 -2
  13. package/dist/types/core/GridDragManager.d.ts.map +1 -1
  14. package/dist/types/core/GridRenderer.d.ts +21 -1
  15. package/dist/types/core/GridRenderer.d.ts.map +1 -1
  16. package/dist/types/core/VeloxGrid.d.ts +55 -1
  17. package/dist/types/core/VeloxGrid.d.ts.map +1 -1
  18. package/dist/types/core/index.d.ts +1 -0
  19. package/dist/types/core/index.d.ts.map +1 -1
  20. package/dist/types/index.d.ts +1 -1
  21. package/dist/types/index.d.ts.map +1 -1
  22. package/dist/types/react/VeloxGridReact.d.ts.map +1 -1
  23. package/dist/types/types/index.d.ts +117 -2
  24. package/dist/types/types/index.d.ts.map +1 -1
  25. package/dist/velox-grid.css +1 -1
  26. package/dist/velox-grid.esm.js +2025 -1368
  27. package/dist/velox-grid.esm.js.map +1 -1
  28. package/dist/velox-grid.iife.js +7 -7
  29. package/dist/velox-grid.iife.js.map +1 -1
  30. package/dist/velox-grid.js +7 -7
  31. package/dist/velox-grid.js.map +1 -1
  32. package/dist/vue/index.esm.js +1270 -600
  33. package/dist/vue/index.esm.js.map +1 -1
  34. package/dist/vue/index.js +5 -5
  35. package/dist/vue/index.js.map +1 -1
  36. package/dist/vue/types/index.d.ts +117 -2
  37. package/dist/vue/types/index.d.ts.map +1 -1
  38. package/package.json +120 -120
package/CHANGELOG.md CHANGED
@@ -1,483 +1,528 @@
1
- # 변경 이력
2
-
3
- VeloxGrid의 모든 주요 변경사항은 이 파일에 문서화됩니다.
4
-
5
- 이 형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.0.0/)를 기반으로 하며,
6
- 이 프로젝트는 [Semantic Versioning](https://semver.org/lang/ko/)을 따릅니다.
7
-
8
- ## [0.11.0] - 2025-02-12
9
-
10
- ### Added - Phase 17: Framework Wrappers (React + Vue)
11
-
12
- #### React 래퍼
13
- - **VeloxGridReact 컴포넌트**: `forwardRef` + `useImperativeHandle`로 전체 API를 ref로 노출
14
- - **useVeloxGrid Hook**: `containerRef` + `grid` 인스턴스 + `isReady` 상태 반환
15
- - **Props 매핑**: `GridOptions`의 모든 옵션을 Props로 전달, `GridEvents`를 콜백 Props로 바인딩
16
- - **이벤트 프록시**: 리렌더 시에도 항상 최신 콜백 참조 (eventsRef 패턴)
17
- - **TypeScript 타입**: `VeloxGridReactProps`, `VeloxGridReactRef` 타입 제공
18
-
19
- #### Vue 3 래퍼
20
- - **VeloxGridVue SFC**: `script setup` + `defineExpose`로 전체 API를 template ref로 노출
21
- - **useVeloxGrid Composable**: `containerRef` + `grid` ref + `isReady` ref 반환
22
- - **이벤트 emit**: `GridEvents`를 kebab-case로 변환하여 emit (예: `onCellClick` `@cell-click`)
23
- - **TypeScript 타입**: `VeloxGridVueProps`, `VeloxGridVueEmits` 타입 제공
24
-
25
- #### 빌드 구조
26
- - **별도 빌드 설정**: `vite.config.react.ts`, `vite.config.vue.ts`
27
- - **package.json exports**: `velox-grid/react`, `velox-grid/vue`, `velox-grid/css`
28
- - **peerDependencies**: `react >=16.8`, `vue >=3.0` (모두 optional)
29
- - **빌드 스크립트**: `build:react`, `build:vue`, `build:all`
30
-
31
- #### 설계 원칙
32
- - **Pass-through 패턴**: GridOptions 확장 시 래퍼 수정 불필요
33
- - **코어 무수정**: `src/core/` 소스 변경 없음
34
- - **data/columns/loading** prop 변경 시 자동 반영
35
-
36
- ### Fixed
37
- - `VeloxGridInstance`에 Pagination 메서드 누락 수정 (`goToPage`, `setPageSize`, `getPaginationState`, `fetchData`)
38
-
39
- ### Bundle Size (Core - 변경 없음)
40
- - UMD: 100.20 KB (gzip: 24.69 KB)
41
- - ESM: 139.67 KB (gzip: 31.51 KB)
42
-
43
- ### React Wrapper
44
- - ESM: 151.13 KB (gzip: 32.94 KB)
45
- - CJS: 106.71 KB (gzip: 25.59 KB)
46
-
47
- ### Vue Wrapper
48
- - ESM: 150.41 KB (gzip: 33.59 KB)
49
- - CJS: 107.16 KB (gzip: 26.32 KB)
50
-
51
- ## [0.10.0] - 2025-02-09
52
-
53
- ### Added - Phase 18: Server-Side Data & Pagination
54
- - **DataSource 옵션**: `local` / `remote` 데이터 소스 타입 지원
55
- - **Remote 데이터**: 서버에서 페이지 단위로 데이터를 가져오는 `fetch` 함수 지원
56
- - **Pagination UI**: 페이지 네비게이션 바 (처음/이전/다음/마지막, 페이지 번호)
57
- - **페이지 정보 표시**: "1-20 / 500" 형식의 현재 위치 정보
58
- - **페이지 크기 변경**: `showSizeChanger` 옵션으로 드롭다운 선택기 제공
59
- - **Local Pagination**: 클라이언트 데이터를 페이지 단위로 분할 표시
60
- - **Remote Pagination**: 서버 정렬/필터/페이징 자동 연동
61
- - **API 메서드**: `goToPage()`, `setPageSize()`, `fetchData()`, `getPaginationState()`
62
- - **이벤트**: `onPageChange`, `onPageSizeChange`
63
- - **Infinite Scroll**: `mode: 'infinite'` - 스크롤 끝에 도달 시 다음 페이지 자동 로드
64
- - **Infinite Scroll 옵션**: `infiniteScrollThreshold` (바닥 여유 px 설정)
65
- - **CSS 모듈**: `_pagination.css` 추가
66
-
67
- ### Bundle Size
68
- - UMD: 92.19 KB → 100.20 KB (+8.01 KB)
69
- - ESM: 132.98 KB → 139.67 KB (+6.69 KB)
70
- - CSS: 19.52 KB → 21.61 KB (+2.09 KB)
71
- - gzip: 22.86 KB 24.69 KB (+1.83 KB)
72
-
73
- ## [0.9.1] - 2025-02-09
74
-
75
- ### Added - Phase 15.1: Enhanced Keyboard Navigation
76
- - **Quick Edit**: 선택 바로 타이핑으로 편집 시작 (Excel 스타일)
77
- - **Enter/Shift+Enter**: 저장 + 아래/위로 이동
78
- - **Tab/Shift+Tab**: 저장 + 오른쪽/왼쪽으로 이동 (Edit 모드 & Read 모드)
79
- - **onMove 콜백**: Custom Editor에서 이동 방향을 Grid에 전달
80
-
81
- ### Changed
82
- - 모든 Custom Editor에서 키보드 동작 통일
83
- - Editor 내부 이벤트에 `stopPropagation` 추가
84
- - Read 모드 Tab 키 네비게이션 지원 ( 래핑 포함)
85
-
86
- ### Fixed - Phase 15.1 Follow-up
87
- - **Enter 키 편집 종료**: Cell 모드에서 Enter 키가 편집을 종료하지 않던 문제 해결
88
- - 원인: `endEdit()` `endEditAndMove()` 호출 시 state가 이미 초기화됨
89
- - 해결: `endEditAndMove()`만 호출 (내부적으로 endEdit 호출)
90
- - **Tab 키 Read 모드**: 편집하지 않을 때 Tab 키가 동작하지 않던 문제 해결
91
- - handleKeyDown에 Tab/Shift+Tab 케이스 추가
92
- - 끝에서 다음/이전 행으로 래핑 지원
93
- - **Focus 복원**: 편집 종료 focus가 사라져 방향키가 동작하지 않던 문제 해결
94
- - `endEditAndMove()` 후 `this.rootElement.focus()` 추가
95
- - **Shift+Enter**: Edit 모드에서 Shift+Enter가 위로 이동하지 않던 문제 해결
96
- - handleKeyDown에 Shift 키 체크 추가
97
-
98
- ### Demo
99
- - `examples/phase15-1-keyboard-demo.html`: 키보드 네비게이션 데모
100
- - `examples/test-enter-key.html`: Enter 동작 검증
101
- - `examples/test-cell-mode.html`: Cell 모드 테스트
102
- - `examples/test-debug.html`: IIFE 빌드 디버깅
103
-
104
- ### Keyboard Navigation Summary
105
- **Edit 모드** (편집 ):
106
- - Enter: 저장 + 아래로 이동
107
- - Shift+Enter: 저장 + 위로 이동
108
- - Tab: 저장 + 오른쪽 이동
109
- - Shift+Tab: 저장 + 왼쪽 이동
110
- - Escape: 편집 취소
111
-
112
- **Read 모드** (읽기 전용):
113
- - ArrowUp/Down/Left/Right: 이동
114
- - Tab: 오른쪽 이동 ( 래핑)
115
- - Shift+Tab: 왼쪽 이동 ( 래핑)
116
- - Enter/F2: 편집 시작
117
- - Space: 체크박스 토글
118
-
119
- ## [0.8.0] - 2025-02-05
120
-
121
- ### 추가 - Phase 14: Fixed Columns
122
-
123
- #### RealGrid 스타일 Fixed Columns API
124
- - **FixedOptions 인터페이스 추가**: `colCount`, `rightCount` 지원
125
- - **fixedOptions API**: 왼쪽/오른쪽 컬럼 고정 설정
126
- - **API 메서드**: `setFixedOptions()`, `getFixedOptions()`
127
-
128
- #### 컬럼 파티션 로직
129
- - **특수 컬럼 자동 처리**: CheckBar, RowNumbers, DragHandle은 항상 왼쪽 고정
130
- - **getFixedLeftColumns()**: 특수 컬럼 + 왼쪽 고정 데이터 컬럼 반환
131
- - **getFixedRightColumns()**: 오른쪽 고정 컬럼 반환
132
- - **getScrollableColumns()**: 중앙 스크롤 가능 컬럼 반환
133
- - **getDataColumns()**: 데이터 컬럼만 반환 (특수 컬럼 제외)
134
- - **isSpecialColumn()**: 특수 컬럼 판별 헬퍼 메서드
135
-
136
- #### Fixed Right 컨테이너
137
- - **DOM 요소 추가**: `fixedRightContainer`, `fixedRightHeader`, `fixedRightBody`, `fixedRightBodyInner`, `fixedRightFooter`
138
- - **GridRenderer 확장**: Fixed Right 영역 렌더링 지원
139
- - **hasFixedRight()**: Fixed Right 유무 확인 메서드
140
-
141
- #### 스크롤 동기화
142
- - **세로 스크롤 동기화**: Fixed Left/Right의 scrollTop을 메인 body와 동기화
143
- - **throttle(16ms)**: 부드러운 스크롤 성능 최적화
144
-
145
- #### CSS 스타일링
146
- - **_base.css 확장**: `.velox-fixed-right` 스타일 추가
147
- - 좌측 border, box-shadow 스타일
148
- - 스크롤 숨김 처리
149
-
150
- #### 데모 페이지
151
- - **examples/phase14-fixed-demo.html**: 4가지 시나리오 데모
152
- 1. Left Fixed (colCount만 사용)
153
- 2. Right Fixed (rightCount만 사용)
154
- 3. Both Fixed (colCount + rightCount)
155
- 4. With Special Columns (CheckBar + RowNumbers + Fixed)
156
-
157
- ### 번들 크기
158
- - UMD: 84.30 KB (gzip: 21.31 KB) - 80.71 KB에서 +3.59 KB
159
- - ESM: 116.75 KB (gzip: 26.58 KB) - 111.12 KB에서 +5.63 KB
160
- - CSS: 18.32 KB (gzip: 3.48 KB) - 17.76 KB에서 +0.56 KB
161
-
162
- ### Breaking Changes
163
- - **ColumnDefinition.fixed 제거**: 개별 컬럼의 `fixed` 속성 제거
164
- - **GridOptions.fixedOptions 사용**: RealGrid 스타일의 통합 API로 전환
165
-
166
- ### 마이그레이션 가이드
167
- ```typescript
168
- // 변경 (Phase 1-13)
169
- columns: [
170
- { field: 'id', header: 'ID', fixed: 'left' }, // ❌
171
- ]
172
-
173
- // 변경 (Phase 14)
174
- columns: [
175
- { field: 'id', header: 'ID' }, // fixed 속성 제거
176
- ],
177
- fixedOptions: {
178
- colCount: 1 // 번째 데이터 컬럼 고정
179
- }
180
- ```
181
-
182
- ---
183
-
184
- ## [0.7.1] - 2025-02-03
185
-
186
- ### 추가 - Phase 13: Summary/Aggregation
187
-
188
- #### 기본 기능
189
- - **GridSummary 모듈 추가** (380줄): 데이터 집계 핵심 모듈
190
- - **5가지 내장 함수**: `sum`, `avg`, `count`, `min`, `max`
191
- - **커스텀 함수 지원**: 사용자 정의 집계 함수
192
- - **Map 기반 캐싱**: 효율적인 계산 및 성능 최적화
193
- - **Number Formatting**: Locale 지원 숫자 포맷팅
194
-
195
- #### Footer Summary 렌더링
196
- - **Footer DOM 요소**: Fixed left 및 scrollable footer 지원
197
- - **GridRenderer.renderFooter()**: Footer 렌더링 메서드
198
- - **createFooterCell()**: Summary 생성 및 포맷팅
199
- - **자동 업데이트**: 데이터 변경 자동 재계산
200
-
201
- #### API 메서드
202
- - `getSummaryValue(field)`: 특정 필드의 집계값 조회
203
- - `getSummaryValues()`: 모든 집계값을 객체로 반환
204
- - `refreshSummary()`: 수동 집계 새로고침
205
-
206
- #### 타입 정의
207
- - `SummaryFunction`, `SummaryConfig`, `FooterSummaryOptions` 타입 추가
208
- - `ColumnDefinition.summary`: 컴럼별 Summary 설정
209
- - `GridOptions.footerSummary`: Footer Summary 옵션
210
- - `GridContext`: Summary 메서드 추가
211
-
212
- #### CSS 스타일링
213
- - **_footer.css** 추가 (139줄): Footer Summary 전용 스타일
214
- - Footer row, cell 기본 스타일링
215
- - Alignment, custom className 지원
216
- - Dark theme 지원
217
- - Special styles: `velox-footer-cell--total`, `--average`, `--count`
218
-
219
- #### 데모 페이지
220
- - `examples/phase13-demo.html`: 3개 데모 시나리오
221
- - `docs/demos/summary-demo.html`: Sales Analytics 대시보드 데모
222
- - `docs/index.html`: Summary 데모 링크 추가
223
-
224
- #### 문서화
225
- - README.md: Summary API 및 사용 예제 추가
226
- - TypeScript 타입 완전 문서화
227
-
228
- ### 번들 크기
229
- - UMD: 80.71 KB (gzip: 20.76 KB) - 71.35 KB에서 증가
230
- - ESM: 111.12 KB (gzip: 25.63 KB) - 98.05 KB에서 증가
231
- - CSS: 17.76 KB (gzip: 3.45 KB) - 15.38 KB에서 증가
232
-
233
- ### 수정 - Edit 모드 안정화
234
-
235
- #### 편집 클릭 Edit 모드 유지
236
- - 편집 중인 셀/input 클릭 edit 모드가 해제되던 문제 수정
237
- - Document mousedown 이벤트로 외부 클릭 감지
238
- - Cell 내부 클릭은 edit 모드 유지
239
- - Interactive 요소(input, select, button, textarea) 클릭 시 기능 허용
240
-
241
- #### Checkbox Editor 다중 클릭 지원
242
- - Checkbox를 여러 클릭 edit 모드가 해제되던 문제 수정
243
- - Checkbox editor는 change 시에도 edit 모드 유지
244
- - 데이터 업데이트 후 edit 상태 복원 및 재렌더링
245
- - 외부 클릭 시에만 edit 종료
246
-
247
- #### Document 리스너 중복 방지
248
- - `renderEditCell` 호출 시마다 document 리스너가 누적 등록되던 문제 수정
249
- - `editModeCleanup` 변수로 이전 리스너 추적 및 정리
250
- - edit 시작 시 이전 리스너 자동 제거
251
-
252
- #### 더블클릭 이벤트 처리
253
- - 빠른 연속 클릭이 더블클릭으로 인식되어 edit 재시작되던 문제 수정
254
- - 이미 editing 중인 셀의 더블클릭 무시
255
- - `startEdit`에서 같은 셀 편집 중이면 무시
256
-
257
- #### CheckBar 상태 변경 Edit 보존
258
- - CheckBar의 checkbox 클릭 edit 모드가 해제되던 문제 수정
259
- - `checkItem()` 호출 edit 상태 백업 및 복원
260
- - Exclusive mode에서도 edit 상태 보존
261
-
262
- #### Editor 타입별 중복 이벤트 제거
263
- - Select editor: blur 이벤트 제거 (change와 중복)
264
- - Checkbox editor: blur 이벤트 제거 (change와 중복)
265
-
266
- ### 개선 - 개발 환경
267
-
268
- #### 핫 리로드 지원
269
- - `examples/dev.html` 추가: 소스 파일 직접 import
270
- - Vite HMR로 실시간 코드 변경 반영
271
- - `vite.config.ts`: 개발 서버 기본 페이지를 dev.html로 변경
272
-
273
- ## [0.7.0] - 2025-01-29 ~ 2025-02-02
274
-
275
- ### 정리 - 코드 정리 (2025-02-02)
276
-
277
- #### 미사용 모듈 삭제
278
- - `GridEventManager.ts` 삭제 (VeloxGrid 자체 구현 사용)
279
- - `GridSelection.ts` 삭제 (VeloxGrid 자체 구현 사용)
280
- - `GridVirtualScroll.ts` 삭제 (VeloxGrid 자체 구현 사용)
281
- - `GridEditor.ts` 삭제 (VeloxGrid 자체 구현 사용)
282
- - `GridKeyboard.ts` 삭제 (VeloxGrid 자체 구현 사용)
283
- - `GridColumnManager.ts` 삭제 (VeloxGrid 자체 구현 사용)
284
- - `GridDataManager.ts` 삭제 (VeloxGrid 자체 구현 사용)
285
- - `GridState.ts` 삭제 (VeloxGrid 자체 구현 사용)
286
- - `VeloxGrid.ts.backup` 삭제
287
-
288
- #### 결과
289
- - 빌드 모듈 수: 22개 → 15개 (-7개)
290
- - 소스 파일: ~60KB 삭제
291
- - Core 모듈 수: 10개로 정리
292
-
293
- ### 추가 - Phase 12: 기능 확장
294
-
295
- #### Phase 12.1: 셀 검증
296
- - 7가지 검증 타입을 가진 `GridValidator` 모듈 추가
297
- - `required`, `min`, `max`, `minLength`, `maxLength`, `pattern`, `custom` 검증자 지원
298
- - 오류 빨간 테두리와 툴팁으로 검증 UI 피드백 제공
299
- - `onValidationError` 이벤트 추가
300
- - 검증 오류 시 셀이 편집 모드 유지
301
-
302
- #### Phase 12.2: 커스텀 에디터
303
- - 다양한 에디터 타입 생성을 위한 `GridEditorFactory` 모듈 추가
304
- - 5가지 에디터 타입 지원: `text`, `number`, `select`, `date`, `checkbox`, `custom`
305
- - 각 에디터 타입별 전용 CSS 스타일링
306
- - `VeloxGrid.renderEditCell()` 메서드와 통합
307
- - 모든 에디터에 키보드 지원 (Enter, Tab, Escape)
308
-
309
- #### Phase 12.3: 셀 툴팁
310
- - 호버 정보 표시를 위한 `GridTooltip` 모듈 추가
311
- - 잘린 텍스트 감지를 위한 자동 툴팁
312
- - 콜백 함수를 통한 커스텀 툴팁
313
- - 뷰포트 인식을 통한 동적 위치 설정
314
- - 구성 가능한 표시/숨김 지연 시간
315
-
316
- ### 추가 - 코드 구조 최적화 (Phase 1-7)
317
-
318
- #### VeloxGrid.ts 모듈화
319
- - **VeloxGrid.ts**: 2,826줄 2,044줄 (27.7% 감소)
320
- - **GridContext 인터페이스**: 모듈 간 통신을 위한 표준화된 인터페이스 정의
321
- - **GridRenderer.ts**: 렌더링 담당 모듈 분리 (482줄)
322
- - **GridFilterPopup.ts**: 필터 팝업 UI 모듈 분리 (191줄)
323
- - **GridColumnMenu.ts**: 컬럼 메뉴 UI 모듈 분리 (188줄)
324
- - **GridDragManager.ts**: 드래그 & 리사이즈 모듈 분리 (364줄)
325
-
326
- #### CSS 모듈화
327
- - 11개 파일로 CSS 분리 (유지보수성 향상)
328
- - `_variables.css`, `_base.css`, `_header.css`, `_body.css`, `_selection.css`
329
- - `_filter.css`, `_column-menu.css`, `_drag.css`, `_editor.css`, `_tooltip.css`, `_loading.css`
330
- - 빌드 시 자동 번들링 (최종 CSS 파일 크기 변화 없음)
331
-
332
- ### 변경
333
- - 기능을 위한 TypeScript 타입 업데이트
334
- - Phase 12 스타일로 CSS 강화 (~110줄 추가)
335
-
336
- ### 수정
337
- - 사용하지 않는 TypeScript 변수 제거 (깔끔한 빌드)
338
- - `endEdit()` 메서드의 에디터 타입 처리 수정
339
-
340
- ### 번들 크기
341
- - UMD: 71.35 KB (gzip: 18.23 KB) - 58.94 KB에서 증가
342
- - ESM: 98.05 KB (gzip: 22.32 KB) - 79.31 KB에서 증가
343
- - CSS: 15.38 KB (gzip: 3.06 KB) - 12.26 KB에서 증가
344
-
345
- ---
346
-
347
- ## [0.6.0] - 2025-01-26
348
-
349
- ### 추가 - Phase 10-11: 컬럼 & 기능
350
-
351
- #### Phase 10: 컬럼 기능
352
- - 드래그 앤 드롭을 통한 컬럼 재정렬
353
- - 커스터마이징 가능한 항목이 있는 컬럼 메뉴(컨텍스트 메뉴)
354
- - 동적으로 컬럼 고정/고정 해제
355
- - `fixColumn()` `reorderColumn()` API 메서드 추가
356
-
357
- #### Phase 11: 기능
358
- - 재정렬을 위한 드래그 앤 드롭
359
- - `moveRow()` API 메서드 추가
360
- - 드래그 핸들 UI 컴포넌트
361
-
362
- ### 변경
363
- - 주요 리팩토링: 핵심 컴포넌트 모듈화
364
- - `GridHistory`, `GridSelection`, `GridVirtualScroll`, `GridEditor`, `GridKeyboard`, `GridColumnManager`, `GridDataManager` 모듈 추가
365
- - 성능을 위한 컬럼 캐싱 시스템 구현
366
- - `createRowBase()` 메서드로 생성 통합
367
-
368
- ### 번들 크기
369
- - UMD: 58.94 KB (gzip: 14.92 KB) - 50.50 KB에서 증가
370
- - ESM: 79.31 KB (gzip: 17.52 KB)
371
- - CSS: 12.26 KB (gzip: 2.50 KB)
372
-
373
- ---
374
-
375
- ## [0.5.0] - 2025-01-XX
376
-
377
- ### 추가 - Phase 9: 키보드 & 실행 취소/다시 실행 향상
378
-
379
- - Enter/Tab 내비게이션 (편집 후 다음 셀로 자동 이동)
380
- - Delete 키 지원 (선택된 셀 내용 삭제)
381
- - 실행 취소/다시 실행 기능 (Ctrl+Z / Ctrl+Y)
382
- - 향상된 키보드 단축키 (Ctrl+C/V/X 처리)
383
- - 방향 내비게이션을 위한 `endEditAndMove()` 메서드
384
- - `deleteSelectedCells()` 및 `deleteSelectedRows()` 메서드
385
-
386
- ### 변경
387
- - 향상된 키보드 이벤트 처리
388
- - 개선된 클립보드 작업
389
-
390
- ### 번들 크기
391
- - UMD: 50.50 KB (gzip: 12.90 KB)
392
-
393
- ---
394
-
395
- ## [0.4.0] - 2025-01-XX
396
-
397
- ### 추가 - Phase 8: Excel 내보내기/가져오기
398
-
399
- - SheetJS를 사용한 Excel 내보내기 (.xlsx)
400
- - .xlsx 파일에서 Excel 가져오기
401
- - CSV 내보내기/가져오기
402
- - JSON 내보내기
403
- - 내보내기 옵션 (헤더, 선택된 행, 필터된 행)
404
- - `exportToExcel()`, `importFromExcel()`, `exportToCSV()`, `exportToJSON()` 메서드 추가
405
-
406
- ### 변경
407
- - SheetJS는 이제 선택적 외부 의존성
408
- - 향상된 내보내기 유틸리티
409
-
410
- ---
411
-
412
- ## [0.3.0] - 2025-01-XX
413
-
414
- ### 추가 - Phase 7: 선택 기능 향상
415
-
416
- - 셀 선택 (개별 셀 선택)
417
- - 블록 선택 (드래그하여 범위 선택, Excel 스타일)
418
- - CheckBar 분리 (Selection과 독립적)
419
- - 단독 체크 (라디오 버튼 스타일)
420
- - 체크 가능 콜백 (조건부 체크 가능 여부)
421
- - 키보드 내비게이션 (방향키)
422
- - 클립보드 작업 (복사/붙여넣기/잘라내기)
423
- - 로딩 상태 인디케이터
424
- - 자동 컬럼 너비 조정 기능
425
-
426
- ### 변경
427
- - 다양한 스타일로 선택 시스템 향상
428
- - 개선된 키보드 처리
429
- - 포괄적인 선택 API 추가
430
-
431
- ---
432
-
433
- ## [0.2.0] - 2025-01-XX
434
-
435
- ### 추가 - Phase 5-6: 가상 스크롤 & 컬럼 고급 기능
436
-
437
- - 대용량 데이터셋을 위한 가상 스크롤 (100,000+ 행)
438
- - 컬럼 고정 (왼쪽/오른쪽에 컬럼 고정)
439
- - 헤더 필터 UI
440
-
441
- ### 변경
442
- - 대용량 데이터셋에 대한 성능 향상
443
- - 향상된 컬럼 기능
444
-
445
- ---
446
-
447
- ## [0.1.0] - 2025-01-XX
448
-
449
- ### 추가 - Phase 1-4: 핵심 기능
450
-
451
- - 기본 테이블 렌더링
452
- - 컬럼 정의 시스템
453
- - 행 선택 (단일/다중)
454
- - 정렬 (오름차순/내림차순)
455
- - 필터링
456
- - 인라인 편집
457
- - 체크박스 기능
458
-
459
- ### 기능
460
- - 프레임워크 독립적 (Vanilla JS)
461
- - TypeScript 지원
462
- - Zero Dependencies (선택적 SheetJS 제외)
463
- - 경량화 (~30KB 초기)
464
-
465
- ---
466
-
467
- ## 향후 릴리즈
468
-
469
- ### [0.12.0] - 계획됨
470
- - Column Group (다단계 헤더)
471
- - Cell Merge (셀 병합)
472
-
473
- ### [1.0.0] - 계획됨
474
- - 안정적인 API
475
- - 종합적인 문서
476
- - 성능 최적화
477
- - 접근성 개선 (ARIA, 스크린 리더 지원)
478
- - 테마 시스템 (다크 테마 지원)
479
-
480
- ---
481
-
482
- [0.11.0]: https://github.com/bart-idea/velox-grid/compare/v0.10.0...v0.11.0
483
- [0.10.0]: https://github.com/bart-idea/velox-grid/compare/v0.9.1...v0.10.0
1
+ # 변경 이력
2
+
3
+ VeloxGrid의 모든 주요 변경사항은 이 파일에 문서화됩니다.
4
+
5
+ 이 형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.0.0/)를 기반으로 하며,
6
+ 이 프로젝트는 [Semantic Versioning](https://semver.org/lang/ko/)을 따릅니다.
7
+
8
+ ## [0.12.0] - 2025-02-19
9
+
10
+ ### Added - Phase 19: Column Group (다단계 헤더)
11
+
12
+ #### 핵심 기능
13
+ - **GridColumnLayout 모듈 신규**: 레이아웃 파싱, 정규화, 헤더 매트릭스 생성 (630줄)
14
+ - **CSS Grid 기반 다단계 헤더**: 2단, 3단 이상 중첩 그룹 지원
15
+ - **hideChildHeaders**: 자식 컬럼 헤더 숨김 옵션
16
+ - **setColumnLayout / getColumnLayout / clearColumnLayout API**: 동적 레이아웃 변경
17
+ - **하위 호환**: 레이아웃 미설정 기존 flexbox 헤더 유지
18
+
19
+ #### 기존 기능 통합
20
+ - **Fixed Columns 통합**: 스크롤 영역에만 그룹 헤더 적용, 헤더 높이 동기화
21
+ - **그룹 헤더 리사이즈**: 그룹 헤더 오른쪽 드래그 그룹 내 마지막 leaf 컬럼 너비 조절
22
+ - **컬럼 이동 제한**: 같은 그룹 내에서만 이동 허용 + 레이아웃 순서 동기화
23
+ - **정렬/필터/컬럼 메뉴**: leaf 컬럼 헤더에서 기존과 동일하게 동작
24
+ - **React/Vue 래퍼**: 새 API 3개 노출 (setColumnLayout, getColumnLayout, clearColumnLayout)
25
+
26
+ #### 드래그 UX 개선
27
+ - **헤더 직접 드래그**: 드래그 핸들(⋮⋮) 제거, 헤더 셀 자체를 드래그하여 컬럼 이동
28
+ - **임계값 기반 드래그 판별**: 5px 이상 이동 시 드래그 시작, 미만이면 클릭으로 처리
29
+ - **그룹 헤더 드래그**: 그룹 헤더 드래그 시 그룹 전체가 최상위 레벨에서 이동
30
+ - **최상위 레벨 순서 변경**: 독립 컬럼 ↔ 그룹, 그룹 ↔ 그룹 간 순서 변경 지원
31
+
32
+ #### 데모
33
+ - `examples/phase19-column-group-demo.html`: 5개 시나리오
34
+ 1. 기본 2단 헤더
35
+ 2. 3단 중첩
36
+ 3. hideChildHeaders
37
+ 4. 동적 레이아웃 전환
38
+ 5. Fixed Columns + Column Group
39
+
40
+ ### Fixed
41
+ - **헤더 정렬**: headerAlign 기본값을 column.align fallback 없이 `center`로 고정
42
+ - **헤더 정렬 렌더링**: flex:1 header-content 내부 justify-content가 align 클래스에 맞게 동작하도록 수정
43
+ - **그룹 헤더 padding**: grouped 헤더 셀의 padding을 일반 헤더와 동일하게 통일 (`0 4px` → `var(--velox-cell-padding)`)
44
+ - **컬럼 숨기기 헤더 미반영**: hideColumn/showColumn 시 columnLayout.invalidate() 호출 추가, parseColumnLayout에서 visible:false 컬럼을 노드 트리에서 제외
45
+ - **헤더/바디 가로 스크롤 어긋남**: 바디 세로 스크롤바 너비만큼 헤더 콘텐츠에 margin-right 보정
46
+
47
+ ### Bundle Size
48
+ - IIFE: 117.12 KB (gzip: 28.36 KB)
49
+ - ESM: 164.20 KB (gzip: 37.04 KB)
50
+ - CSS: 23.60 KB (gzip: 4.13 KB)
51
+
52
+ ## [0.11.0] - 2025-02-12
53
+
54
+ ### Added - Phase 17: Framework Wrappers (React + Vue)
55
+
56
+ #### React 래퍼
57
+ - **VeloxGridReact 컴포넌트**: `forwardRef` + `useImperativeHandle`로 전체 API를 ref로 노출
58
+ - **useVeloxGrid Hook**: `containerRef` + `grid` 인스턴스 + `isReady` 상태 반환
59
+ - **Props 매핑**: `GridOptions`의 모든 옵션을 Props로 전달, `GridEvents`를 콜백 Props로 바인딩
60
+ - **이벤트 프록시**: 리렌더 시에도 항상 최신 콜백 참조 (eventsRef 패턴)
61
+ - **TypeScript 타입**: `VeloxGridReactProps`, `VeloxGridReactRef` 타입 제공
62
+
63
+ #### Vue 3 래퍼
64
+ - **VeloxGridVue SFC**: `script setup` + `defineExpose`로 전체 API를 template ref로 노출
65
+ - **useVeloxGrid Composable**: `containerRef` + `grid` ref + `isReady` ref 반환
66
+ - **이벤트 emit**: `GridEvents`를 kebab-case로 변환하여 emit (예: `onCellClick` → `@cell-click`)
67
+ - **TypeScript 타입**: `VeloxGridVueProps`, `VeloxGridVueEmits` 타입 제공
68
+
69
+ #### 빌드 구조
70
+ - **별도 빌드 설정**: `vite.config.react.ts`, `vite.config.vue.ts`
71
+ - **package.json exports**: `velox-grid/react`, `velox-grid/vue`, `velox-grid/css`
72
+ - **peerDependencies**: `react >=16.8`, `vue >=3.0` (모두 optional)
73
+ - **빌드 스크립트**: `build:react`, `build:vue`, `build:all`
74
+
75
+ #### 설계 원칙
76
+ - **Pass-through 패턴**: GridOptions 확장 래퍼 수정 불필요
77
+ - **코어 무수정**: `src/core/` 소스 변경 없음
78
+ - **data/columns/loading** prop 변경 자동 반영
79
+
80
+ ### Fixed
81
+ - `VeloxGridInstance`에 Pagination 메서드 누락 수정 (`goToPage`, `setPageSize`, `getPaginationState`, `fetchData`)
82
+
83
+ ### Bundle Size (Core - 변경 없음)
84
+ - UMD: 100.20 KB (gzip: 24.69 KB)
85
+ - ESM: 139.67 KB (gzip: 31.51 KB)
86
+
87
+ ### React Wrapper
88
+ - ESM: 151.13 KB (gzip: 32.94 KB)
89
+ - CJS: 106.71 KB (gzip: 25.59 KB)
90
+
91
+ ### Vue Wrapper
92
+ - ESM: 150.41 KB (gzip: 33.59 KB)
93
+ - CJS: 107.16 KB (gzip: 26.32 KB)
94
+
95
+ ## [0.10.0] - 2025-02-09
96
+
97
+ ### Added - Phase 18: Server-Side Data & Pagination
98
+ - **DataSource 옵션**: `local` / `remote` 데이터 소스 타입 지원
99
+ - **Remote 데이터**: 서버에서 페이지 단위로 데이터를 가져오는 `fetch` 함수 지원
100
+ - **Pagination UI**: 페이지 네비게이션 바 (처음/이전/다음/마지막, 페이지 번호)
101
+ - **페이지 정보 표시**: "1-20 / 500" 형식의 현재 위치 정보
102
+ - **페이지 크기 변경**: `showSizeChanger` 옵션으로 드롭다운 선택기 제공
103
+ - **Local Pagination**: 클라이언트 데이터를 페이지 단위로 분할 표시
104
+ - **Remote Pagination**: 서버 측 정렬/필터/페이징 자동 연동
105
+ - **API 메서드**: `goToPage()`, `setPageSize()`, `fetchData()`, `getPaginationState()`
106
+ - **이벤트**: `onPageChange`, `onPageSizeChange`
107
+ - **Infinite Scroll**: `mode: 'infinite'` - 스크롤 끝에 도달 시 다음 페이지 자동 로드
108
+ - **Infinite Scroll 옵션**: `infiniteScrollThreshold` (바닥 여유 px 설정)
109
+ - **CSS 모듈**: `_pagination.css` 추가
110
+
111
+ ### Bundle Size
112
+ - UMD: 92.19 KB → 100.20 KB (+8.01 KB)
113
+ - ESM: 132.98 KB → 139.67 KB (+6.69 KB)
114
+ - CSS: 19.52 KB → 21.61 KB (+2.09 KB)
115
+ - gzip: 22.86 KB → 24.69 KB (+1.83 KB)
116
+
117
+ ## [0.9.1] - 2025-02-09
118
+
119
+ ### Added - Phase 15.1: Enhanced Keyboard Navigation
120
+ - **Quick Edit**: 셀 선택 후 바로 타이핑으로 편집 시작 (Excel 스타일)
121
+ - **Enter/Shift+Enter**: 저장 + 아래/위로 이동
122
+ - **Tab/Shift+Tab**: 저장 + 오른쪽/왼쪽으로 이동 (Edit 모드 & Read 모드)
123
+ - **onMove 콜백**: Custom Editor에서 이동 방향을 Grid에 전달
124
+
125
+ ### Changed
126
+ - 모든 Custom Editor에서 키보드 동작 통일
127
+ - Editor 내부 키 이벤트에 `stopPropagation` 추가
128
+ - Read 모드 Tab 키 네비게이션 지원 (행 래핑 포함)
129
+
130
+ ### Fixed - Phase 15.1 Follow-up
131
+ - **Enter 편집 종료**: Cell 모드에서 Enter 키가 편집을 종료하지 않던 문제 해결
132
+ - 원인: `endEdit()` `endEditAndMove()` 호출 state가 이미 초기화됨
133
+ - 해결: `endEditAndMove()`만 호출 (내부적으로 endEdit 호출)
134
+ - **Tab Read 모드**: 편집하지 않을 때 Tab 키가 동작하지 않던 문제 해결
135
+ - handleKeyDown에 Tab/Shift+Tab 케이스 추가
136
+ - 끝에서 다음/이전 행으로 래핑 지원
137
+ - **Focus 복원**: 편집 종료 focus가 사라져 방향키가 동작하지 않던 문제 해결
138
+ - `endEditAndMove()` `this.rootElement.focus()` 추가
139
+ - **Shift+Enter**: Edit 모드에서 Shift+Enter가 위로 이동하지 않던 문제 해결
140
+ - handleKeyDown에 Shift 키 체크 추가
141
+
142
+ ### Demo
143
+ - `examples/phase15-1-keyboard-demo.html`: 키보드 네비게이션 데모
144
+ - `examples/test-enter-key.html`: Enter 키 동작 검증
145
+ - `examples/test-cell-mode.html`: Cell 모드 테스트
146
+ - `examples/test-debug.html`: IIFE 빌드 디버깅
147
+
148
+ ### Keyboard Navigation Summary
149
+ **Edit 모드** (편집 중):
150
+ - Enter: 저장 + 아래로 이동
151
+ - Shift+Enter: 저장 + 위로 이동
152
+ - Tab: 저장 + 오른쪽 이동
153
+ - Shift+Tab: 저장 + 왼쪽 이동
154
+ - Escape: 편집 취소
155
+
156
+ **Read 모드** (읽기 전용):
157
+ - ArrowUp/Down/Left/Right: 셀 이동
158
+ - Tab: 오른쪽 이동 ( 래핑)
159
+ - Shift+Tab: 왼쪽 이동 ( 래핑)
160
+ - Enter/F2: 편집 시작
161
+ - Space: 체크박스 토글
162
+
163
+ ## [0.8.0] - 2025-02-05
164
+
165
+ ### 추가 - Phase 14: Fixed Columns
166
+
167
+ #### RealGrid 스타일 Fixed Columns API
168
+ - **FixedOptions 인터페이스 추가**: `colCount`, `rightCount` 지원
169
+ - **fixedOptions API**: 왼쪽/오른쪽 컬럼 고정 설정
170
+ - **API 메서드**: `setFixedOptions()`, `getFixedOptions()`
171
+
172
+ #### 컬럼 파티션 로직
173
+ - **특수 컬럼 자동 처리**: CheckBar, RowNumbers, DragHandle은 항상 왼쪽 고정
174
+ - **getFixedLeftColumns()**: 특수 컬럼 + 왼쪽 고정 데이터 컬럼 반환
175
+ - **getFixedRightColumns()**: 오른쪽 고정 컬럼 반환
176
+ - **getScrollableColumns()**: 중앙 스크롤 가능 컬럼 반환
177
+ - **getDataColumns()**: 데이터 컬럼만 반환 (특수 컬럼 제외)
178
+ - **isSpecialColumn()**: 특수 컬럼 판별 헬퍼 메서드
179
+
180
+ #### Fixed Right 컨테이너
181
+ - **DOM 요소 추가**: `fixedRightContainer`, `fixedRightHeader`, `fixedRightBody`, `fixedRightBodyInner`, `fixedRightFooter`
182
+ - **GridRenderer 확장**: Fixed Right 영역 렌더링 지원
183
+ - **hasFixedRight()**: Fixed Right 유무 확인 메서드
184
+
185
+ #### 스크롤 동기화
186
+ - **세로 스크롤 동기화**: Fixed Left/Right의 scrollTop을 메인 body와 동기화
187
+ - **throttle(16ms)**: 부드러운 스크롤 성능 최적화
188
+
189
+ #### CSS 스타일링
190
+ - **_base.css 확장**: `.velox-fixed-right` 스타일 추가
191
+ - 좌측 border, box-shadow 스타일
192
+ - 스크롤 숨김 처리
193
+
194
+ #### 데모 페이지
195
+ - **examples/phase14-fixed-demo.html**: 4가지 시나리오 데모
196
+ 1. Left Fixed (colCount만 사용)
197
+ 2. Right Fixed (rightCount만 사용)
198
+ 3. Both Fixed (colCount + rightCount)
199
+ 4. With Special Columns (CheckBar + RowNumbers + Fixed)
200
+
201
+ ### 번들 크기
202
+ - UMD: 84.30 KB (gzip: 21.31 KB) - 80.71 KB에서 +3.59 KB
203
+ - ESM: 116.75 KB (gzip: 26.58 KB) - 111.12 KB에서 +5.63 KB
204
+ - CSS: 18.32 KB (gzip: 3.48 KB) - 17.76 KB에서 +0.56 KB
205
+
206
+ ### Breaking Changes
207
+ - **ColumnDefinition.fixed 제거**: 개별 컬럼의 `fixed` 속성 제거
208
+ - **GridOptions.fixedOptions 사용**: RealGrid 스타일의 통합 API로 전환
209
+
210
+ ### 마이그레이션 가이드
211
+ ```typescript
212
+ // 변경 전 (Phase 1-13)
213
+ columns: [
214
+ { field: 'id', header: 'ID', fixed: 'left' }, // ❌
215
+ ]
216
+
217
+ // 변경 (Phase 14)
218
+ columns: [
219
+ { field: 'id', header: 'ID' }, // fixed 속성 제거
220
+ ],
221
+ fixedOptions: {
222
+ colCount: 1 // 번째 데이터 컬럼 고정
223
+ }
224
+ ```
225
+
226
+ ---
227
+
228
+ ## [0.7.1] - 2025-02-03
229
+
230
+ ### 추가 - Phase 13: Summary/Aggregation
231
+
232
+ #### 기본 기능
233
+ - **GridSummary 모듈 추가** (380줄): 데이터 집계 핵심 모듈
234
+ - **5가지 내장 함수**: `sum`, `avg`, `count`, `min`, `max`
235
+ - **커스텀 함수 지원**: 사용자 정의 집계 함수
236
+ - **Map 기반 캐싱**: 효율적인 계산 성능 최적화
237
+ - **Number Formatting**: Locale 지원 숫자 포맷팅
238
+
239
+ #### Footer Summary 렌더링
240
+ - **Footer DOM 요소**: Fixed left 및 scrollable footer 지원
241
+ - **GridRenderer.renderFooter()**: Footer 렌더링 메서드
242
+ - **createFooterCell()**: Summary 생성 포맷팅
243
+ - **자동 업데이트**: 데이터 변경 자동 재계산
244
+
245
+ #### API 메서드
246
+ - `getSummaryValue(field)`: 특정 필드의 집계값 조회
247
+ - `getSummaryValues()`: 모든 집계값을 객체로 반환
248
+ - `refreshSummary()`: 수동 집계 새로고침
249
+
250
+ #### 타입 정의
251
+ - `SummaryFunction`, `SummaryConfig`, `FooterSummaryOptions` 타입 추가
252
+ - `ColumnDefinition.summary`: 컴럼별 Summary 설정
253
+ - `GridOptions.footerSummary`: Footer Summary 옵션
254
+ - `GridContext`: Summary 메서드 추가
255
+
256
+ #### CSS 스타일링
257
+ - **_footer.css** 추가 (139줄): Footer Summary 전용 스타일
258
+ - Footer row, cell 기본 스타일링
259
+ - Alignment, custom className 지원
260
+ - Dark theme 지원
261
+ - Special styles: `velox-footer-cell--total`, `--average`, `--count`
262
+
263
+ #### 데모 페이지
264
+ - `examples/phase13-demo.html`: 3개 데모 시나리오
265
+ - `docs/demos/summary-demo.html`: Sales Analytics 대시보드 데모
266
+ - `docs/index.html`: Summary 데모 링크 추가
267
+
268
+ #### 문서화
269
+ - README.md: Summary API 사용 예제 추가
270
+ - TypeScript 타입 완전 문서화
271
+
272
+ ### 번들 크기
273
+ - UMD: 80.71 KB (gzip: 20.76 KB) - 71.35 KB에서 증가
274
+ - ESM: 111.12 KB (gzip: 25.63 KB) - 98.05 KB에서 증가
275
+ - CSS: 17.76 KB (gzip: 3.45 KB) - 15.38 KB에서 증가
276
+
277
+ ### 수정 - Edit 모드 안정화
278
+
279
+ #### 편집 클릭 Edit 모드 유지
280
+ - 편집 중인 셀/input 클릭 edit 모드가 해제되던 문제 수정
281
+ - Document mousedown 이벤트로 외부 클릭 감지
282
+ - Cell 내부 클릭은 edit 모드 유지
283
+ - Interactive 요소(input, select, button, textarea) 클릭 시 기능 허용
284
+
285
+ #### Checkbox Editor 다중 클릭 지원
286
+ - Checkbox를 여러 번 클릭 시 edit 모드가 해제되던 문제 수정
287
+ - Checkbox editor는 change 시에도 edit 모드 유지
288
+ - 데이터 업데이트 후 edit 상태 복원 및 재렌더링
289
+ - 외부 클릭 시에만 edit 종료
290
+
291
+ #### Document 리스너 중복 방지
292
+ - `renderEditCell` 호출 시마다 document 리스너가 누적 등록되던 문제 수정
293
+ - `editModeCleanup` 변수로 이전 리스너 추적 정리
294
+ - 새 edit 시작 시 이전 리스너 자동 제거
295
+
296
+ #### 더블클릭 이벤트 처리
297
+ - 빠른 연속 클릭이 더블클릭으로 인식되어 edit 재시작되던 문제 수정
298
+ - 이미 editing 중인 셀의 더블클릭 무시
299
+ - `startEdit`에서 같은 셀 편집 중이면 무시
300
+
301
+ #### CheckBar 상태 변경 시 Edit 보존
302
+ - CheckBar의 checkbox 클릭 edit 모드가 해제되던 문제 수정
303
+ - `checkItem()` 호출 edit 상태 백업 복원
304
+ - Exclusive mode에서도 edit 상태 보존
305
+
306
+ #### Editor 타입별 중복 이벤트 제거
307
+ - Select editor: blur 이벤트 제거 (change와 중복)
308
+ - Checkbox editor: blur 이벤트 제거 (change와 중복)
309
+
310
+ ### 개선 - 개발 환경
311
+
312
+ #### 리로드 지원
313
+ - `examples/dev.html` 추가: 소스 파일 직접 import
314
+ - Vite HMR로 실시간 코드 변경 반영
315
+ - `vite.config.ts`: 개발 서버 기본 페이지를 dev.html로 변경
316
+
317
+ ## [0.7.0] - 2025-01-29 ~ 2025-02-02
318
+
319
+ ### 정리 - 코드 정리 (2025-02-02)
320
+
321
+ #### 미사용 모듈 삭제
322
+ - `GridEventManager.ts` 삭제 (VeloxGrid 자체 구현 사용)
323
+ - `GridSelection.ts` 삭제 (VeloxGrid 자체 구현 사용)
324
+ - `GridVirtualScroll.ts` 삭제 (VeloxGrid 자체 구현 사용)
325
+ - `GridEditor.ts` 삭제 (VeloxGrid 자체 구현 사용)
326
+ - `GridKeyboard.ts` 삭제 (VeloxGrid 자체 구현 사용)
327
+ - `GridColumnManager.ts` 삭제 (VeloxGrid 자체 구현 사용)
328
+ - `GridDataManager.ts` 삭제 (VeloxGrid 자체 구현 사용)
329
+ - `GridState.ts` 삭제 (VeloxGrid 자체 구현 사용)
330
+ - `VeloxGrid.ts.backup` 삭제
331
+
332
+ #### 결과
333
+ - 빌드 모듈 수: 22개 15개 (-7개)
334
+ - 소스 파일: ~60KB 삭제
335
+ - Core 모듈 수: 10개로 정리
336
+
337
+ ### 추가 - Phase 12: 기능 확장
338
+
339
+ #### Phase 12.1: 셀 검증
340
+ - 7가지 검증 타입을 가진 `GridValidator` 모듈 추가
341
+ - `required`, `min`, `max`, `minLength`, `maxLength`, `pattern`, `custom` 검증자 지원
342
+ - 오류 빨간 테두리와 툴팁으로 검증 UI 피드백 제공
343
+ - `onValidationError` 이벤트 추가
344
+ - 검증 오류 시 셀이 편집 모드 유지
345
+
346
+ #### Phase 12.2: 커스텀 셀 에디터
347
+ - 다양한 에디터 타입 생성을 위한 `GridEditorFactory` 모듈 추가
348
+ - 5가지 에디터 타입 지원: `text`, `number`, `select`, `date`, `checkbox`, `custom`
349
+ - 에디터 타입별 전용 CSS 스타일링
350
+ - `VeloxGrid.renderEditCell()` 메서드와 통합
351
+ - 모든 에디터에 키보드 지원 (Enter, Tab, Escape)
352
+
353
+ #### Phase 12.3: 툴팁
354
+ - 호버 정보 표시를 위한 `GridTooltip` 모듈 추가
355
+ - 잘린 텍스트 감지를 위한 자동 툴팁
356
+ - 콜백 함수를 통한 커스텀 툴팁
357
+ - 뷰포트 인식을 통한 동적 위치 설정
358
+ - 구성 가능한 표시/숨김 지연 시간
359
+
360
+ ### 추가 - 코드 구조 최적화 (Phase 1-7)
361
+
362
+ #### VeloxGrid.ts 모듈화
363
+ - **VeloxGrid.ts**: 2,826줄 2,044줄 (27.7% 감소)
364
+ - **GridContext 인터페이스**: 모듈 통신을 위한 표준화된 인터페이스 정의
365
+ - **GridRenderer.ts**: 렌더링 담당 모듈 분리 (482줄)
366
+ - **GridFilterPopup.ts**: 필터 팝업 UI 모듈 분리 (191줄)
367
+ - **GridColumnMenu.ts**: 컬럼 메뉴 UI 모듈 분리 (188줄)
368
+ - **GridDragManager.ts**: 드래그 & 리사이즈 모듈 분리 (364줄)
369
+
370
+ #### CSS 모듈화
371
+ - 11개 파일로 CSS 분리 (유지보수성 향상)
372
+ - `_variables.css`, `_base.css`, `_header.css`, `_body.css`, `_selection.css`
373
+ - `_filter.css`, `_column-menu.css`, `_drag.css`, `_editor.css`, `_tooltip.css`, `_loading.css`
374
+ - 빌드 시 자동 번들링 (최종 CSS 파일 크기 변화 없음)
375
+
376
+ ### 변경
377
+ - 기능을 위한 TypeScript 타입 업데이트
378
+ - Phase 12 스타일로 CSS 강화 (~110줄 추가)
379
+
380
+ ### 수정
381
+ - 사용하지 않는 TypeScript 변수 제거 (깔끔한 빌드)
382
+ - `endEdit()` 메서드의 에디터 타입 처리 수정
383
+
384
+ ### 번들 크기
385
+ - UMD: 71.35 KB (gzip: 18.23 KB) - 58.94 KB에서 증가
386
+ - ESM: 98.05 KB (gzip: 22.32 KB) - 79.31 KB에서 증가
387
+ - CSS: 15.38 KB (gzip: 3.06 KB) - 12.26 KB에서 증가
388
+
389
+ ---
390
+
391
+ ## [0.6.0] - 2025-01-26
392
+
393
+ ### 추가 - Phase 10-11: 컬럼 & 행 기능
394
+
395
+ #### Phase 10: 컬럼 기능
396
+ - 드래그 앤 드롭을 통한 컬럼 재정렬
397
+ - 커스터마이징 가능한 항목이 있는 컬럼 메뉴(컨텍스트 메뉴)
398
+ - 동적으로 컬럼 고정/고정 해제
399
+ - `fixColumn()` `reorderColumn()` API 메서드 추가
400
+
401
+ #### Phase 11: 행 기능
402
+ - 재정렬을 위한 행 드래그 앤 드롭
403
+ - `moveRow()` API 메서드 추가
404
+ - 드래그 핸들 UI 컴포넌트
405
+
406
+ ### 변경
407
+ - 주요 리팩토링: 핵심 컴포넌트 모듈화
408
+ - `GridHistory`, `GridSelection`, `GridVirtualScroll`, `GridEditor`, `GridKeyboard`, `GridColumnManager`, `GridDataManager` 모듈 추가
409
+ - 성능을 위한 컬럼 캐싱 시스템 구현
410
+ - `createRowBase()` 메서드로 행 생성 통합
411
+
412
+ ### 번들 크기
413
+ - UMD: 58.94 KB (gzip: 14.92 KB) - 50.50 KB에서 증가
414
+ - ESM: 79.31 KB (gzip: 17.52 KB)
415
+ - CSS: 12.26 KB (gzip: 2.50 KB)
416
+
417
+ ---
418
+
419
+ ## [0.5.0] - 2025-01-XX
420
+
421
+ ### 추가 - Phase 9: 키보드 & 실행 취소/다시 실행 향상
422
+
423
+ - Enter/Tab 내비게이션 (편집 후 다음 셀로 자동 이동)
424
+ - Delete 지원 (선택된 셀 내용 삭제)
425
+ - 실행 취소/다시 실행 기능 (Ctrl+Z / Ctrl+Y)
426
+ - 향상된 키보드 단축키 (Ctrl+C/V/X 처리)
427
+ - 방향 내비게이션을 위한 `endEditAndMove()` 메서드
428
+ - `deleteSelectedCells()` `deleteSelectedRows()` 메서드
429
+
430
+ ### 변경
431
+ - 향상된 키보드 이벤트 처리
432
+ - 개선된 클립보드 작업
433
+
434
+ ### 번들 크기
435
+ - UMD: 50.50 KB (gzip: 12.90 KB)
436
+
437
+ ---
438
+
439
+ ## [0.4.0] - 2025-01-XX
440
+
441
+ ### 추가 - Phase 8: Excel 내보내기/가져오기
442
+
443
+ - SheetJS를 사용한 Excel 내보내기 (.xlsx)
444
+ - .xlsx 파일에서 Excel 가져오기
445
+ - CSV 내보내기/가져오기
446
+ - JSON 내보내기
447
+ - 내보내기 옵션 (헤더, 선택된 행, 필터된 행)
448
+ - `exportToExcel()`, `importFromExcel()`, `exportToCSV()`, `exportToJSON()` 메서드 추가
449
+
450
+ ### 변경
451
+ - SheetJS는 이제 선택적 외부 의존성
452
+ - 향상된 내보내기 유틸리티
453
+
454
+ ---
455
+
456
+ ## [0.3.0] - 2025-01-XX
457
+
458
+ ### 추가 - Phase 7: 선택 기능 향상
459
+
460
+ - 선택 (개별 셀 선택)
461
+ - 블록 선택 (드래그하여 범위 선택, Excel 스타일)
462
+ - CheckBar 분리 (Selection과 독립적)
463
+ - 단독 체크 (라디오 버튼 스타일)
464
+ - 체크 가능 콜백 (조건부 체크 가능 여부)
465
+ - 키보드 내비게이션 (방향키)
466
+ - 클립보드 작업 (복사/붙여넣기/잘라내기)
467
+ - 로딩 상태 인디케이터
468
+ - 자동 컬럼 너비 조정 기능
469
+
470
+ ### 변경
471
+ - 다양한 스타일로 선택 시스템 향상
472
+ - 개선된 키보드 처리
473
+ - 포괄적인 선택 API 추가
474
+
475
+ ---
476
+
477
+ ## [0.2.0] - 2025-01-XX
478
+
479
+ ### 추가 - Phase 5-6: 가상 스크롤 & 컬럼 고급 기능
480
+
481
+ - 대용량 데이터셋을 위한 가상 스크롤 (100,000+ 행)
482
+ - 컬럼 고정 (왼쪽/오른쪽에 컬럼 고정)
483
+ - 헤더 필터 UI
484
+
485
+ ### 변경
486
+ - 대용량 데이터셋에 대한 성능 향상
487
+ - 향상된 컬럼 기능
488
+
489
+ ---
490
+
491
+ ## [0.1.0] - 2025-01-XX
492
+
493
+ ### 추가 - Phase 1-4: 핵심 기능
494
+
495
+ - 기본 테이블 렌더링
496
+ - 컬럼 정의 시스템
497
+ - 행 선택 (단일/다중)
498
+ - 정렬 (오름차순/내림차순)
499
+ - 필터링
500
+ - 인라인 편집
501
+ - 체크박스 기능
502
+
503
+ ### 기능
504
+ - 프레임워크 독립적 (Vanilla JS)
505
+ - TypeScript 지원
506
+ - Zero Dependencies (선택적 SheetJS 제외)
507
+ - 경량화 (~30KB 초기)
508
+
509
+ ---
510
+
511
+ ## 향후 릴리즈
512
+
513
+ ### [0.13.0] - 계획됨
514
+ - Cell Merge (셀 병합)
515
+ - Row Grouping (행 그룹화)
516
+
517
+ ### [1.0.0] - 계획됨
518
+ - 안정적인 API
519
+ - 종합적인 문서
520
+ - 성능 최적화
521
+ - 접근성 개선 (ARIA, 스크린 리더 지원)
522
+ - 테마 시스템 (다크 테마 지원)
523
+
524
+ ---
525
+
526
+ [0.12.0]: https://github.com/veloxgrid/velox-grid/compare/v0.11.0...v0.12.0
527
+ [0.11.0]: https://github.com/veloxgrid/velox-grid/compare/v0.10.0...v0.11.0
528
+ [0.10.0]: https://github.com/veloxgrid/velox-grid/compare/v0.9.1...v0.10.0