sellmate-design-system-react 9.0.0-beta.25 → 9.0.0-beta.27
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/dist/components/SChipFilter/README.md +15 -10
- package/dist/components/SChipFilter/SChipFilter.d.ts +18 -9
- package/dist/components/SGhostButton/README.md +0 -2
- package/dist/components/SSearchInput/README.md +2 -0
- package/dist/components/SSelect/README.md +1 -1
- package/dist/components/SSelect/SSelect.d.ts +1 -1
- package/dist/components/STable/README.md +16 -0
- package/dist/components/STable/STable.d.ts +12 -0
- package/dist/components/STable/index.d.ts +1 -1
- package/dist/index.cjs +413 -227
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +413 -227
- package/dist/index.js.map +1 -1
- package/dist/lib/floating-height.d.ts +15 -0
- package/dist/llms-full.txt +32 -11
- package/dist/styles.css +4 -6
- package/package.json +1 -1
|
@@ -11,8 +11,7 @@
|
|
|
11
11
|
| `fields?` | `SChipFilterGroup[]` | — | 필터 정의 목록. 묶을 것이 없어도 한 그룹으로 감싸 넘긴다 — `[{ fields: [...] }]`. 그룹은 rule로 함께 검증하거나 divider로 갈라 놓을 때 나눈다. |
|
|
12
12
|
| `value?` | `SChipFilterValueMap` | — | 필터 값 맵 |
|
|
13
13
|
| `activeKeys?` | `string[]` | — | 노출 필터 key 목록. 지정하면 제어 컴포넌트로 동작 — "필터 추가"로 고른 필드를 이 배열에 직접 넣어줘야 칩이 나타난다(onActiveKeysChange에서 받은 keys로 갱신). 지정하지 않으면 fixed·required 필드만 노출된 상태로 시작해 컴포넌트가 내부 상태로 관리하는 비제어 방식으로 동작한다. fixed·required 필드는 이 배열에 없어도 항상 노출된다 |
|
|
14
|
-
| `label?` | `string` |
|
|
15
|
-
| `showLabel?` | `boolean` | `false` | 좌측 태그(label)·구분선 표시 여부 |
|
|
14
|
+
| `label?` | `string` | — | 좌측 태그 텍스트. 지정하면 태그와 그 뒤 구분선이 함께 노출되고, 지정하지 않으면(undefined) 둘 다 생략된다 |
|
|
16
15
|
| `showReset?` | `boolean` | `true` | 검색 초기화 링크 표시 여부 |
|
|
17
16
|
| `disabled?` | `boolean` | `false` | 바 비활성 상태 |
|
|
18
17
|
| `className?` | `string` | — | |
|
|
@@ -24,7 +23,7 @@
|
|
|
24
23
|
|-------|------|-------------|
|
|
25
24
|
| `onValueChange` | `(value: SChipFilterValueMap) => void` | 전체 값 변경 — 편집 중인 값이 바뀔 때마다(선택할 때마다) 호출된다. 실제 검색 실행은 onSearch를 쓴다 |
|
|
26
25
|
| `onFilterChange` | `(detail: SChipFilterChangeDetail) => void` | 개별 필터 값 변경 |
|
|
27
|
-
| `onSearch` | `(value: SChipFilterValueMap) => void` | 실제 검색을 실행할 시점 — 편집 팝오버의 "검색" 버튼을 누르거나 팝오버가 닫힐 때(바깥 클릭·Esc·다른 칩으로 전환 포함) 그 시점의 전체 값 맵과 함께 호출된다. 팝오버가 없는 필드(인라인 date 프리셋·custom, clearable ×, 검색 초기화)는 값이 바뀌는 즉시 호출된다. keyword 필터에서 Enter 로 키워드를 추가할 때도 그 즉시 호출된다 — 팝오버는 열린 채라 키워드를 이어서 더 넣을 수 있고, 넣을 때마다 조회가 갱신된다. dirty 체크가 기본 적용되어 있어 — 마지막으로 실제 검색이 실행된 값 맵과 비교해 하나라도 달라진 게 없으면(예: 팝오버를 열었다 아무것도 안 바꾸고 닫는 경우) 호출되지 않는다. fields를 그룹으로 넘겼다면 rule을 만족하지 못한 그룹이 있는 동안엔 onSearch가 호출되지 않는다 — 해당 그룹의 경고 툴팁은 이 시점과 무관하게 값이 비어 있는 동안 항상 실시간으로 떠 있다(별도로 validate()를 호출할 필요 없음) |
|
|
26
|
+
| `onSearch` | `(value: SChipFilterValueMap) => void` | 실제 검색을 실행할 시점 — 편집 팝오버의 "검색" 버튼을 누르거나 팝오버가 닫힐 때(바깥 클릭·Esc·다른 칩으로 전환 포함) 그 시점의 전체 값 맵과 함께 호출된다. 팝오버가 없는 필드(인라인 date 프리셋·custom, clearable ×, 검색 초기화)는 값이 바뀌는 즉시 호출된다. keyword 필터에서 Enter 로 키워드를 추가할 때도 그 즉시 호출된다 — 팝오버는 열린 채라 키워드를 이어서 더 넣을 수 있고, 넣을 때마다 조회가 갱신된다. dirty 체크가 기본 적용되어 있어 — 마지막으로 실제 검색이 실행된 값 맵과 비교해 하나라도 달라진 게 없으면(예: 팝오버를 열었다 아무것도 안 바꾸고 닫는 경우) 호출되지 않는다. fields를 그룹으로 넘겼다면 rule을 만족하지 못한 그룹이 있는 동안엔 onSearch가 호출되지 않는다 — 해당 그룹의 경고 툴팁은 이 시점과 무관하게 값이 비어 있는 동안 항상 실시간으로 떠 있다(별도로 validate()를 호출할 필요 없음). required 필드가 비어 있는 동안에도 마찬가지로 호출되지 않는다 — 정상 설정(내장 기본값 또는 defaultValue)이라면 원래 비워지지 않지만, defaultValue 없는 select-multi·keyword·custom에 required만 준 오설정에서는 "검색 초기화"·clearable이 값을 null로 비울 수 있어 이때의 안전장치다 |
|
|
28
27
|
| `onActiveKeysChange` | `(keys: string[]) => void` | 노출 필터 key 변경(칩 추가·제거) — 비제어 방식에서도 참고용으로 호출된다. activeKeys를 직접 제어할 때는 이 값을 그대로 activeKeys에 반영해야 한다 |
|
|
29
28
|
| `onReset` | `() => void` | "검색 초기화" 클릭 — 모든 필드가 기본값(또는 null)으로 리셋된 뒤 호출된다 |
|
|
30
29
|
| `onAddFilter` | `(key: string) => void` | "필터 추가" 목록에서 항목을 골랐을 때 — activeKeys를 직접 제어 중이면 이 콜백에서 (또는 onActiveKeysChange에서) key를 activeKeys에 추가해줘야 칩이 실제로 나타난다. activeKeys를 넘기지 않았다면(비제어) 별도 처리 없이도 컴포넌트가 알아서 칩을 노출한다 |
|
|
@@ -35,7 +34,7 @@
|
|
|
35
34
|
|--------|------|-------------|
|
|
36
35
|
| `open` | `(key: string) => void` | 특정 필터 편집 팝오버를 엽니다. |
|
|
37
36
|
| `reset` | `() => void` | 모든 필터 값을 초기화합니다. |
|
|
38
|
-
| `validate` | `() => boolean` | 현재 값 기준으로 각 그룹의 rule을
|
|
37
|
+
| `validate` | `() => boolean` | 현재 값 기준으로 각 그룹의 rule을 만족하는지, 그리고 required 필드가 모두 비어 있지 않은지 반환합니다. rule을 준 그룹이 없고 required 필드도 모두 값이 있으면 항상 true. 경고 툴팁은 이 호출과 무관하게 rule 위반 상태인 동안 항상 실시간으로 떠 있으므로, 이 메서드는 그 상태를 그대로 읽어오는 용도다(예: 검색 버튼을 눌러도 되는지 사전 확인) |
|
|
39
38
|
|
|
40
39
|
## Types
|
|
41
40
|
|
|
@@ -52,7 +51,8 @@ export interface SChipFilterGroup {
|
|
|
52
51
|
/** rule을 만족하지 않을 때 그룹 중앙에 띄울 툴팁 메시지. 지정 안 하면 rule 종류에 따른 기본 문구를 쓴다 */
|
|
53
52
|
tooltipMessage?: string;
|
|
54
53
|
/** 이 그룹 앞에 구분선을 넣을지. 검증(rule)과 구분선은 별개라 — 묶어서 검증만 하고 싶으면
|
|
55
|
-
* 주지 않는다. 첫 그룹에는 앞에 가를 것이 없으므로 무시된다(
|
|
54
|
+
* 주지 않는다. 첫 그룹에는 앞에 가를 것이 없으므로 무시된다(label을 지정했다면 그 구분선이
|
|
55
|
+
* 이미 있다) */
|
|
56
56
|
divider?: boolean;
|
|
57
57
|
}
|
|
58
58
|
```
|
|
@@ -288,12 +288,17 @@ export interface SChipFilterFieldBase {
|
|
|
288
288
|
```ts
|
|
289
289
|
/** 프리셋으로 기간을 고르는 필터 — datepicker-range·datepicker-statistics */
|
|
290
290
|
export interface SChipFilterPresetsField extends SChipFilterFieldBase {
|
|
291
|
-
/** 프리셋 라디오 목록.
|
|
292
|
-
* datepicker-
|
|
291
|
+
/** 프리셋 라디오 목록. 지정하지 않으면 타입별 기본 목록을 쓴다 —
|
|
292
|
+
* datepicker-range: 오늘·지난 7일·지난 30일·사용자 지정,
|
|
293
|
+
* datepicker-statistics: 일별·월별·분기별·반기별·연도별·사용자 지정.
|
|
294
|
+
* 프리셋 라디오 없이 캘린더(datepicker-range) 하나만 두려면 presets: [] 를 명시한다 */
|
|
293
295
|
presets?: SChipFilterDatePreset[];
|
|
294
296
|
/** 선택 가능 범위 */
|
|
295
297
|
selectable?: [string, string];
|
|
296
|
-
/** "사용자 지정" 프리셋으로 기간을 고를 때의 최대 선택
|
|
298
|
+
/** "사용자 지정" 프리셋으로 기간을 고를 때의 최대 선택 일수.
|
|
299
|
+
* 지정하지 않아도 presets에 custom 프리셋이 있으면 기본 90일이 적용된다 — 무제한 기간
|
|
300
|
+
* 집계·조회로 백엔드에 과도한 요청이 가는 것을 막기 위한 안전장치. 다른 상한이 필요하면
|
|
301
|
+
* 이 값을 직접 지정한다 */
|
|
297
302
|
maxRange?: number;
|
|
298
303
|
}
|
|
299
304
|
```
|
|
@@ -350,10 +355,10 @@ export interface SChipFilterDatePreset {
|
|
|
350
355
|
|
|
351
356
|
- [SDatePicker](../SDatePicker)
|
|
352
357
|
- [SDateRangePicker](../SDateRangePicker)
|
|
353
|
-
- [SGhostButton](../SGhostButton)
|
|
354
358
|
- [SIcon](../SIcon)
|
|
355
359
|
- [SRadio](../SRadio)
|
|
356
360
|
- [SRadioButton](../SRadioButton)
|
|
361
|
+
- [SSearchInput](../SSearchInput)
|
|
357
362
|
- [STag](../STag)
|
|
358
363
|
- [STextLink](../STextLink)
|
|
359
364
|
- [STooltip](../STooltip)
|
|
@@ -364,10 +369,10 @@ export interface SChipFilterDatePreset {
|
|
|
364
369
|
graph TD;
|
|
365
370
|
SChipFilter --> SDatePicker
|
|
366
371
|
SChipFilter --> SDateRangePicker
|
|
367
|
-
SChipFilter --> SGhostButton
|
|
368
372
|
SChipFilter --> SIcon
|
|
369
373
|
SChipFilter --> SRadio
|
|
370
374
|
SChipFilter --> SRadioButton
|
|
375
|
+
SChipFilter --> SSearchInput
|
|
371
376
|
SChipFilter --> STag
|
|
372
377
|
SChipFilter --> STextLink
|
|
373
378
|
SChipFilter --> STooltip
|
|
@@ -75,12 +75,17 @@ export interface SChipFilterOptionsField extends SChipFilterFieldBase {
|
|
|
75
75
|
}
|
|
76
76
|
/** 프리셋으로 기간을 고르는 필터 — datepicker-range·datepicker-statistics */
|
|
77
77
|
export interface SChipFilterPresetsField extends SChipFilterFieldBase {
|
|
78
|
-
/** 프리셋 라디오 목록.
|
|
79
|
-
* datepicker-
|
|
78
|
+
/** 프리셋 라디오 목록. 지정하지 않으면 타입별 기본 목록을 쓴다 —
|
|
79
|
+
* datepicker-range: 오늘·지난 7일·지난 30일·사용자 지정,
|
|
80
|
+
* datepicker-statistics: 일별·월별·분기별·반기별·연도별·사용자 지정.
|
|
81
|
+
* 프리셋 라디오 없이 캘린더(datepicker-range) 하나만 두려면 presets: [] 를 명시한다 */
|
|
80
82
|
presets?: SChipFilterDatePreset[];
|
|
81
83
|
/** 선택 가능 범위 */
|
|
82
84
|
selectable?: [string, string];
|
|
83
|
-
/** "사용자 지정" 프리셋으로 기간을 고를 때의 최대 선택
|
|
85
|
+
/** "사용자 지정" 프리셋으로 기간을 고를 때의 최대 선택 일수.
|
|
86
|
+
* 지정하지 않아도 presets에 custom 프리셋이 있으면 기본 90일이 적용된다 — 무제한 기간
|
|
87
|
+
* 집계·조회로 백엔드에 과도한 요청이 가는 것을 막기 위한 안전장치. 다른 상한이 필요하면
|
|
88
|
+
* 이 값을 직접 지정한다 */
|
|
84
89
|
maxRange?: number;
|
|
85
90
|
}
|
|
86
91
|
/** 후보 하나를 고른다 */
|
|
@@ -172,7 +177,8 @@ export interface SChipFilterGroup {
|
|
|
172
177
|
/** rule을 만족하지 않을 때 그룹 중앙에 띄울 툴팁 메시지. 지정 안 하면 rule 종류에 따른 기본 문구를 쓴다 */
|
|
173
178
|
tooltipMessage?: string;
|
|
174
179
|
/** 이 그룹 앞에 구분선을 넣을지. 검증(rule)과 구분선은 별개라 — 묶어서 검증만 하고 싶으면
|
|
175
|
-
* 주지 않는다. 첫 그룹에는 앞에 가를 것이 없으므로 무시된다(
|
|
180
|
+
* 주지 않는다. 첫 그룹에는 앞에 가를 것이 없으므로 무시된다(label을 지정했다면 그 구분선이
|
|
181
|
+
* 이미 있다) */
|
|
176
182
|
divider?: boolean;
|
|
177
183
|
}
|
|
178
184
|
export interface SChipFilterHandle {
|
|
@@ -180,7 +186,8 @@ export interface SChipFilterHandle {
|
|
|
180
186
|
open: (key: string) => void;
|
|
181
187
|
/** 모든 필터 값을 초기화합니다. */
|
|
182
188
|
reset: () => void;
|
|
183
|
-
/** 현재 값 기준으로 각 그룹의 rule을
|
|
189
|
+
/** 현재 값 기준으로 각 그룹의 rule을 만족하는지, 그리고 required 필드가 모두 비어 있지 않은지
|
|
190
|
+
* 반환합니다. rule을 준 그룹이 없고 required 필드도 모두 값이 있으면 항상 true.
|
|
184
191
|
* 경고 툴팁은 이 호출과 무관하게 rule 위반 상태인 동안 항상 실시간으로 떠 있으므로,
|
|
185
192
|
* 이 메서드는 그 상태를 그대로 읽어오는 용도다(예: 검색 버튼을 눌러도 되는지 사전 확인) */
|
|
186
193
|
validate: () => boolean;
|
|
@@ -202,7 +209,10 @@ export interface SChipFilterProps {
|
|
|
202
209
|
* 실제 검색이 실행된 값 맵과 비교해 하나라도 달라진 게 없으면(예: 팝오버를 열었다 아무것도 안 바꾸고
|
|
203
210
|
* 닫는 경우) 호출되지 않는다. fields를 그룹으로 넘겼다면 rule을 만족하지 못한 그룹이 있는 동안엔
|
|
204
211
|
* onSearch가 호출되지 않는다 — 해당 그룹의 경고 툴팁은 이 시점과 무관하게 값이 비어 있는 동안 항상
|
|
205
|
-
* 실시간으로 떠 있다(별도로 validate()를 호출할 필요 없음)
|
|
212
|
+
* 실시간으로 떠 있다(별도로 validate()를 호출할 필요 없음). required 필드가 비어 있는 동안에도
|
|
213
|
+
* 마찬가지로 호출되지 않는다 — 정상 설정(내장 기본값 또는 defaultValue)이라면 원래 비워지지
|
|
214
|
+
* 않지만, defaultValue 없는 select-multi·keyword·custom에 required만 준 오설정에서는 "검색
|
|
215
|
+
* 초기화"·clearable이 값을 null로 비울 수 있어 이때의 안전장치다 */
|
|
206
216
|
onSearch?: (value: SChipFilterValueMap) => void;
|
|
207
217
|
/** 노출 필터 key 목록. 지정하면 제어 컴포넌트로 동작 — "필터 추가"로 고른 필드를 이 배열에 직접
|
|
208
218
|
* 넣어줘야 칩이 나타난다(onActiveKeysChange에서 받은 keys로 갱신). 지정하지 않으면
|
|
@@ -218,10 +228,9 @@ export interface SChipFilterProps {
|
|
|
218
228
|
* (또는 onActiveKeysChange에서) key를 activeKeys에 추가해줘야 칩이 실제로 나타난다.
|
|
219
229
|
* activeKeys를 넘기지 않았다면(비제어) 별도 처리 없이도 컴포넌트가 알아서 칩을 노출한다 */
|
|
220
230
|
onAddFilter?: (key: string) => void;
|
|
221
|
-
/** 좌측 태그
|
|
231
|
+
/** 좌측 태그 텍스트. 지정하면 태그와 그 뒤 구분선이 함께 노출되고, 지정하지 않으면(undefined)
|
|
232
|
+
* 둘 다 생략된다 */
|
|
222
233
|
label?: string;
|
|
223
|
-
/** 좌측 태그(label)·구분선 표시 여부 */
|
|
224
|
-
showLabel?: boolean;
|
|
225
234
|
/** 검색 초기화 링크 표시 여부 */
|
|
226
235
|
showReset?: boolean;
|
|
227
236
|
/** 바 비활성 상태 */
|
|
@@ -48,7 +48,6 @@ export type SGhostButtonIntent = 'default' | 'danger' | 'action' | 'subAction' |
|
|
|
48
48
|
- [SBarcodeInput](../SBarcodeInput)
|
|
49
49
|
- [SCalendar](../SCalendar)
|
|
50
50
|
- [SChip](../SChip)
|
|
51
|
-
- [SChipFilter](../SChipFilter)
|
|
52
51
|
- [SDatePicker](../SDatePicker)
|
|
53
52
|
- [SDateRangePicker](../SDateRangePicker)
|
|
54
53
|
- [SFilePicker](../SFilePicker)
|
|
@@ -81,7 +80,6 @@ graph TD;
|
|
|
81
80
|
SBarcodeInput --> SGhostButton
|
|
82
81
|
SCalendar --> SGhostButton
|
|
83
82
|
SChip --> SGhostButton
|
|
84
|
-
SChipFilter --> SGhostButton
|
|
85
83
|
SDatePicker --> SGhostButton
|
|
86
84
|
SDateRangePicker --> SGhostButton
|
|
87
85
|
SFilePicker --> SGhostButton
|
|
@@ -41,6 +41,7 @@ export type SSearchInputSize = SFieldSize;
|
|
|
41
41
|
|
|
42
42
|
### Used by
|
|
43
43
|
|
|
44
|
+
- [SChipFilter](../SChipFilter)
|
|
44
45
|
- [SSelect](../SSelect)
|
|
45
46
|
|
|
46
47
|
### Depends on
|
|
@@ -56,6 +57,7 @@ graph TD;
|
|
|
56
57
|
SSearchInput --> SField
|
|
57
58
|
SSearchInput --> SGhostButton
|
|
58
59
|
SSearchInput --> SIcon
|
|
60
|
+
SChipFilter --> SSearchInput
|
|
59
61
|
SSelect --> SSearchInput
|
|
60
62
|
style SSearchInput fill:#f9f,stroke:#333,stroke-width:4px
|
|
61
63
|
```
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
| `error?` | `boolean` | `false` | 에러 상태 |
|
|
23
23
|
| `rules?` | `Rule[]` | — | 유효성 규칙 — 닫힐 때 자동 검증 |
|
|
24
24
|
| `labelTooltipProps?` | `Partial<STooltipProps>` | — | 레이블 툴팁 상세 옵션 |
|
|
25
|
-
| `dropdownHeight?` | `string` | `'
|
|
25
|
+
| `dropdownHeight?` | `string` | `'640px'` | 드롭다운 최대 높이. 기본 640px — 창이 이보다 작으면 창 안에 남는 만큼까지만 채워진다 |
|
|
26
26
|
| `dropdownWidth?` | `string` | — | 드롭다운 너비 (없으면 트리거 너비). 창보다 넓게 줘도 창 폭까지만 벌어진다. |
|
|
27
27
|
| `maxDropdownWidth?` | `string` | `'640px'` | 드롭다운 최대 너비. 창이 이보다 좁으면 창 폭이 상한이 된다. |
|
|
28
28
|
| `label?` | `string` | — | |
|
|
@@ -49,7 +49,7 @@ export interface SSelectProps {
|
|
|
49
49
|
rules?: Rule[];
|
|
50
50
|
/** 레이블 툴팁 상세 옵션 */
|
|
51
51
|
labelTooltipProps?: Partial<STooltipProps>;
|
|
52
|
-
/** 드롭다운 최대
|
|
52
|
+
/** 드롭다운 최대 높이. 기본 640px — 창이 이보다 작으면 창 안에 남는 만큼까지만 채워진다 */
|
|
53
53
|
dropdownHeight?: string;
|
|
54
54
|
/** 드롭다운 너비 (없으면 트리거 너비). 창보다 넓게 줘도 창 폭까지만 벌어진다. */
|
|
55
55
|
dropdownWidth?: string;
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
| Prop | Type | Default | Description |
|
|
10
10
|
|------|------|---------|-------------|
|
|
11
11
|
| `columns?` | `STableColumn[]` | `[]` | |
|
|
12
|
+
| `headerGroups?` | `STableHeaderGroup[]` | — | 상위 그룹 헤더. 지정하면 기존 컬럼 헤더가 두 번째 행에 렌더링된다. |
|
|
12
13
|
| `rows?` | `SRow[]` | `[]` | |
|
|
13
14
|
| `rowKey?` | `string` | `'id'` | 행 식별 필드 |
|
|
14
15
|
| `selectable?` | `boolean` | `false` | 행 선택 체크박스 |
|
|
@@ -78,6 +79,21 @@ export type STableColumn = STableColumnBase &
|
|
|
78
79
|
);
|
|
79
80
|
```
|
|
80
81
|
|
|
82
|
+
### STableHeaderGroup
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
/** 2단 헤더의 상위 셀. columnNames는 visible 컬럼 기준으로 연속되어야 한다. */
|
|
86
|
+
export interface STableHeaderGroup {
|
|
87
|
+
label?: ReactNode;
|
|
88
|
+
columnNames: string[];
|
|
89
|
+
rowSpan?: 1 | 2;
|
|
90
|
+
align?: 'left' | 'center' | 'right';
|
|
91
|
+
className?: string;
|
|
92
|
+
style?: CSSProperties;
|
|
93
|
+
render?: () => ReactNode;
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
81
97
|
### SRow
|
|
82
98
|
|
|
83
99
|
```ts
|
|
@@ -147,6 +147,16 @@ export interface STableSort {
|
|
|
147
147
|
name: string;
|
|
148
148
|
dir: 'asc' | 'desc';
|
|
149
149
|
}
|
|
150
|
+
/** 2단 헤더의 상위 셀. columnNames는 visible 컬럼 기준으로 연속되어야 한다. */
|
|
151
|
+
export interface STableHeaderGroup {
|
|
152
|
+
label?: ReactNode;
|
|
153
|
+
columnNames: string[];
|
|
154
|
+
rowSpan?: 1 | 2;
|
|
155
|
+
align?: 'left' | 'center' | 'right';
|
|
156
|
+
className?: string;
|
|
157
|
+
style?: CSSProperties;
|
|
158
|
+
render?: () => ReactNode;
|
|
159
|
+
}
|
|
150
160
|
/** STable ref 명령형 API (sd-table @Method 대응) */
|
|
151
161
|
export interface STableHandle {
|
|
152
162
|
/** 행 선택 여부 */
|
|
@@ -171,6 +181,8 @@ export interface STableHandle {
|
|
|
171
181
|
}
|
|
172
182
|
export interface STableProps {
|
|
173
183
|
columns?: STableColumn[];
|
|
184
|
+
/** 상위 그룹 헤더. 지정하면 기존 컬럼 헤더가 두 번째 행에 렌더링된다. */
|
|
185
|
+
headerGroups?: STableHeaderGroup[];
|
|
174
186
|
rows?: SRow[];
|
|
175
187
|
/** 행 식별 필드 */
|
|
176
188
|
rowKey?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { STable, type STableProps, type STableColumn, type STableColumnField, type STableSort, type STableCellContext, type STablePagination, type STableStickyColumn, type STableHandle, type SRow, } from './STable';
|
|
1
|
+
export { STable, type STableProps, type STableColumn, type STableColumnField, type STableSort, type STableHeaderGroup, type STableCellContext, type STablePagination, type STableStickyColumn, type STableHandle, type SRow, } from './STable';
|