sellmate-design-system-react 9.0.0-beta.10 → 9.0.0-beta.12
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/AGENTS.md +3 -3
- package/dist/components/SBadge/README.md +24 -0
- package/dist/components/SBadge/SBadge.d.ts +1 -1
- package/dist/components/SBarcodeInput/README.md +8 -0
- package/dist/components/SButton/README.md +34 -0
- package/dist/components/SCalendar/README.md +13 -0
- package/dist/components/SCallout/README.md +15 -0
- package/dist/components/SCheckbox/README.md +8 -0
- package/dist/components/SChipFilter/README.md +276 -3
- package/dist/components/SChipFilter/SChipFilter.d.ts +78 -37
- package/dist/components/SChipFilter/index.d.ts +1 -1
- package/dist/components/SChipInput/README.md +14 -0
- package/dist/components/SCircleProgress/README.md +8 -0
- package/dist/components/SConfirmModal/README.md +16 -0
- package/dist/components/SDatePicker/README.md +14 -0
- package/dist/components/SDateRangePicker/README.md +14 -0
- package/dist/components/SDraggableItem/README.md +36 -0
- package/dist/components/SDraggableList/README.md +24 -0
- package/dist/components/SDrawer/README.md +8 -0
- package/dist/components/SDropdownButton/README.md +19 -0
- package/dist/components/SExpansionItem/README.md +36 -0
- package/dist/components/SField/README.md +20 -0
- package/dist/components/SFilePicker/README.md +14 -0
- package/dist/components/SFooter/README.md +21 -0
- package/dist/components/SForm/README.md +11 -0
- package/dist/components/SGhostButton/README.md +14 -2
- package/dist/components/SGnb/README.md +45 -0
- package/dist/components/SGuide/README.md +15 -0
- package/dist/components/SImage/README.md +14 -0
- package/dist/components/SKeyValueTable/README.md +83 -0
- package/dist/components/SLayout/README.md +16 -0
- package/dist/components/SLinearProgress/README.md +8 -0
- package/dist/components/SListItem/README.md +41 -0
- package/dist/components/SLoadingModal/README.md +8 -0
- package/dist/components/SNumberInput/README.md +8 -0
- package/dist/components/SPage/README.md +38 -0
- package/dist/components/SPopover/README.md +15 -0
- package/dist/components/SPopup/README.md +19 -0
- package/dist/components/SPortal/README.md +14 -0
- package/dist/components/SRadio/README.md +20 -0
- package/dist/components/SRadioButton/README.md +18 -0
- package/dist/components/SScrollArea/README.md +14 -0
- package/dist/components/SSearchInput/README.md +13 -0
- package/dist/components/SSectionHeaderCard/README.md +32 -0
- package/dist/components/SSelect/README.md +21 -2
- package/dist/components/SSplitter/README.md +15 -0
- package/dist/components/SStepper/README.md +26 -0
- package/dist/components/STable/README.md +103 -0
- package/dist/components/STabs/README.md +12 -0
- package/dist/components/STag/README.md +47 -0
- package/dist/components/STextLink/README.md +14 -0
- package/dist/components/STimePicker/README.md +14 -0
- package/dist/components/STimeRangePicker/README.md +26 -0
- package/dist/components/SToast/README.md +24 -0
- package/dist/components/SToggle/README.md +8 -0
- package/dist/components/STooltip/README.md +20 -0
- package/dist/components/STree/README.md +38 -0
- package/dist/index.cjs +170 -186
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +170 -186
- package/dist/index.js.map +1 -1
- package/dist/lib/story-docs.d.ts +19 -3
- package/dist/llms-full.txt +1444 -15
- package/dist/llms.txt +3 -3
- package/dist/styles.css +5 -16
- package/package.json +1 -1
|
@@ -52,6 +52,14 @@
|
|
|
52
52
|
| `onFocus` | `(e: React.FocusEvent<HTMLInputElement>) => void` | 포커스 이벤트 (sdFocus) |
|
|
53
53
|
| `onBlur` | `(e: React.FocusEvent<HTMLInputElement>) => void` | 블러 이벤트 (sdBlur) |
|
|
54
54
|
|
|
55
|
+
## Types
|
|
56
|
+
|
|
57
|
+
### SNumberInputSize
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
export type SNumberInputSize = SFieldSize;
|
|
61
|
+
```
|
|
62
|
+
|
|
55
63
|
## Dependencies
|
|
56
64
|
|
|
57
65
|
### Used by
|
|
@@ -32,6 +32,44 @@
|
|
|
32
32
|
| `contentHeight?` | `SPageContentHeight` | `'auto'` | 본문 높이 모드. 기본은 `auto` — 콘텐츠가 흐르고 넘치면 페이지가 스크롤한다. `fill` 은 본문이 남은 높이를 정확히 채우고 페이지는 스크롤하지 않는다. 표가 자기 안에서 스크롤하고 페이지네이션이 하단에 고정되는 목록 화면용이다. 본문 루트에 `h-full` 이 먹으므로 `<div className="flex h-full min-h-0 flex-col">` + `<STable className="min-h-0 flex-1" />` 구성이 성립한다. `fill` 에서는 페이지가 스크롤하지 않으므로 `scrollEndSpacing` 이 무시된다. |
|
|
33
33
|
| `header?` | `SPageHeaderProps` | — | 페이지 타이틀 영역(pageHeader 포팅). 주면 스크롤·페이지 패딩 밖으로 빼내 상단에 고정 배치한다. `children` 은 항상 본문이다 — header 유무와 무관하게 같은 자리에 같은 뜻으로 들어간다. |
|
|
34
34
|
|
|
35
|
+
## Types
|
|
36
|
+
|
|
37
|
+
### SPageBackground
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
export type SPageBackground = (typeof PAGE_BACKGROUNDS)[number];
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### SPageContentHeight
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
export type SPageContentHeight = (typeof PAGE_CONTENT_HEIGHTS)[number];
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### PAGE_BACKGROUNDS
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
/**
|
|
53
|
+
* 페이지 배경 — 표면의 역할로 이름을 붙인다(리터럴 색이 아니다).
|
|
54
|
+
* - frame: 콘텐츠를 얹는 흰 표면 (sys.color.bg.frame)
|
|
55
|
+
* - neutral: 한 단계 눌러앉은 회색 표면 (sys.color.bg.neutralLight)
|
|
56
|
+
* - screen: 카드·패널이 떠 있는 앱 바탕 (sys.color.bg.screen)
|
|
57
|
+
*/
|
|
58
|
+
export const PAGE_BACKGROUNDS = ['frame', 'neutral', 'screen'] as const;
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### PAGE_CONTENT_HEIGHTS
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
/**
|
|
65
|
+
* 본문 높이 모드 — 페이지가 스크롤할지, 본문이 남은 높이를 채울지.
|
|
66
|
+
* - auto: 콘텐츠가 흐르고, 넘치면 페이지가 스크롤한다
|
|
67
|
+
* - fill: 본문이 남은 높이를 정확히 채우고 페이지는 스크롤하지 않는다.
|
|
68
|
+
* 표가 자기 안에서 스크롤하고 페이지네이션이 하단에 고정되는 목록 화면용.
|
|
69
|
+
*/
|
|
70
|
+
export const PAGE_CONTENT_HEIGHTS = ['auto', 'fill'] as const;
|
|
71
|
+
```
|
|
72
|
+
|
|
35
73
|
## Dependencies
|
|
36
74
|
|
|
37
75
|
### Depends on
|
|
@@ -33,6 +33,21 @@
|
|
|
33
33
|
| `onLeftLinkClick` | `() => void` | 하단 좌측 링크 클릭 |
|
|
34
34
|
| `onButtonClick` | `() => void` | 하단 우측 버튼 클릭 |
|
|
35
35
|
|
|
36
|
+
## Types
|
|
37
|
+
|
|
38
|
+
### SPopoverPlacement
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
export type SPopoverPlacement = 'top' | 'bottom' | 'left' | 'right';
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### SPopoverType
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
/** 색상 타입 — default: 다크 배경 / danger·warning·accent: 라이트 배경 (component.popover 토큰) */
|
|
48
|
+
export type SPopoverType = 'default' | 'danger' | 'warning' | 'accent';
|
|
49
|
+
```
|
|
50
|
+
|
|
36
51
|
## Dependencies
|
|
37
52
|
|
|
38
53
|
### Depends on
|
|
@@ -24,6 +24,25 @@
|
|
|
24
24
|
|-------|------|-------------|
|
|
25
25
|
| `onSubmit` | `() => void` | 확인 버튼 클릭 (sdSubmit) |
|
|
26
26
|
|
|
27
|
+
## Types
|
|
28
|
+
|
|
29
|
+
### SPopupType
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
export type SPopupType = 'default' | 'light';
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### SPopupSubmitButton
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
export interface SPopupSubmitButton {
|
|
39
|
+
label?: string;
|
|
40
|
+
color?: SButtonColor;
|
|
41
|
+
outline?: boolean;
|
|
42
|
+
size?: SButtonSize;
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
27
46
|
## Dependencies
|
|
28
47
|
|
|
29
48
|
### Depends on
|
|
@@ -34,6 +34,20 @@
|
|
|
34
34
|
| `onCloseAutoFocus` | `(event: Event) => void` | 닫힐 때 포커스 복귀 처리 (기본은 Radix가 앵커로 포커스를 되돌림). e.preventDefault()로 막을 수 있다. |
|
|
35
35
|
| `onPointerDownOutside` | `(event: Event) => void` | 바깥 영역 pointerdown 으로 닫힘이 시작될 때 (앵커 위 클릭·persistent 는 제외). |
|
|
36
36
|
|
|
37
|
+
## Types
|
|
38
|
+
|
|
39
|
+
### SPortalPlacement
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
export type SPortalPlacement = 'top' | 'bottom' | 'left' | 'right';
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### SPortalAlign
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
export type SPortalAlign = 'start' | 'center' | 'end';
|
|
49
|
+
```
|
|
50
|
+
|
|
37
51
|
## Dependencies
|
|
38
52
|
|
|
39
53
|
### Used by
|
|
@@ -42,6 +42,26 @@
|
|
|
42
42
|
|-------|------|-------------|
|
|
43
43
|
| `onValueChange` | `(val: SRadioValue) => void` | 선택 변경 (sdUpdate) — 선택된 val 전달 |
|
|
44
44
|
|
|
45
|
+
## Types
|
|
46
|
+
|
|
47
|
+
### SRadioOption
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
export interface SRadioOption {
|
|
51
|
+
/** 옵션 값 (sd-radio-group SRadioOption.value) */
|
|
52
|
+
value: SRadioValue;
|
|
53
|
+
label: string;
|
|
54
|
+
disabled?: boolean;
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### SRadioValue
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
/** 라디오 값 타입 (sd-radio SRadioValue) */
|
|
62
|
+
export type SRadioValue = string | number | boolean;
|
|
63
|
+
```
|
|
64
|
+
|
|
45
65
|
## Dependencies
|
|
46
66
|
|
|
47
67
|
### Used by
|
|
@@ -22,6 +22,24 @@
|
|
|
22
22
|
|-------|------|-------------|
|
|
23
23
|
| `onValueChange` | `(value: string \| number) => void` | 변경 (sdUpdate) |
|
|
24
24
|
|
|
25
|
+
## Types
|
|
26
|
+
|
|
27
|
+
### SRadioButtonOption
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
export interface SRadioButtonOption {
|
|
31
|
+
value: string | number;
|
|
32
|
+
label: string;
|
|
33
|
+
disabled?: boolean;
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### SRadioButtonSize
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
export type SRadioButtonSize = 'xs' | 'sm';
|
|
41
|
+
```
|
|
42
|
+
|
|
25
43
|
## Dependencies
|
|
26
44
|
|
|
27
45
|
### Used by
|
|
@@ -14,3 +14,17 @@
|
|
|
14
14
|
| `maxHeight?` | `string` | — | viewport 최대 높이 (예: '400px'). 비우면 부모 크기를 따른다. |
|
|
15
15
|
| `maxWidth?` | `string` | — | viewport 최대 너비 (예: '480px'). 비우면 부모 크기를 따른다. |
|
|
16
16
|
|
|
17
|
+
## Types
|
|
18
|
+
|
|
19
|
+
### SScrollAreaAxis
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
export type SScrollAreaAxis = (typeof SCROLL_AREA_AXES)[number];
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### SCROLL_AREA_AXES
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
export const SCROLL_AREA_AXES = ['vertical', 'horizontal', 'both'] as const;
|
|
29
|
+
```
|
|
30
|
+
|
|
@@ -29,8 +29,20 @@
|
|
|
29
29
|
| `onChange` | `InputHTMLAttributes<HTMLInputElement>['onChange']` | 네이티브 onChange (form-agnostic 연동용, RHF 등) |
|
|
30
30
|
| `onSearch` | `(value: string) => void` | 검색 실행 — Enter 키에서 현재 값과 함께 호출된다. 한글 조합 중의 Enter(IME 확정)는 검색으로 치지 않는다. |
|
|
31
31
|
|
|
32
|
+
## Types
|
|
33
|
+
|
|
34
|
+
### SSearchInputSize
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
export type SSearchInputSize = SFieldSize;
|
|
38
|
+
```
|
|
39
|
+
|
|
32
40
|
## Dependencies
|
|
33
41
|
|
|
42
|
+
### Used by
|
|
43
|
+
|
|
44
|
+
- [SSelect](../SSelect)
|
|
45
|
+
|
|
34
46
|
### Depends on
|
|
35
47
|
|
|
36
48
|
- [SField](../SField)
|
|
@@ -44,5 +56,6 @@ graph TD;
|
|
|
44
56
|
SSearchInput --> SField
|
|
45
57
|
SSearchInput --> SGhostButton
|
|
46
58
|
SSearchInput --> SIcon
|
|
59
|
+
SSelect --> SSearchInput
|
|
47
60
|
style SSearchInput fill:#f9f,stroke:#333,stroke-width:4px
|
|
48
61
|
```
|
|
@@ -21,6 +21,38 @@
|
|
|
21
21
|
| `background?` | `SSectionHeaderCardBodyBackground` | — | 본문 배경. 기본은 `frame` — 카드가 깐 흰 면을 그대로 쓴다. `neutral` 은 바탕을 한 단계 눌러앉혀, 흰 면 덩어리(표·리스트)가 여럿일 때 그것들이 **"면 위에 놓인 객체"로 읽히게** 한다. 위계를 한 단계 더 주고 싶을 때 고르는 선택지이며, **기본값이 틀린 것은 아니다** — 표·리스트는 테두리·라운드·헤더 줄과 간격을 이미 갖고 있어 흰 바탕에서도 경계가 읽힌다. 깔아도 **효과가 없는** 자리가 있다 — 덩어리가 가장자리까지 차는 경우(`padding="none"` 으로 표를 채우면 바탕이 완전히 가려진다), 덩어리에 회색 면이 섞인 경우(그 덩어리가 바탕에 묻힌다), 맨 텍스트나 폼 컨트롤만 있는 본문(떠오를 흰 면이 없다). |
|
|
22
22
|
| `children?` | `SSectionHeaderCardChildren` | — | 바디 콘텐츠. 특정 컴포넌트 타입으로 제한하지 않습니다. |
|
|
23
23
|
|
|
24
|
+
## Types
|
|
25
|
+
|
|
26
|
+
### SSectionHeaderCardTitleSize
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
export type SSectionHeaderCardTitleSize = 'xs' | 'sm';
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### SSectionHeaderCardThickness
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
export type SSectionHeaderCardThickness = false | 'default' | 'accent';
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### SSectionHeaderCardBodyPadding
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
export type SSectionHeaderCardBodyPadding = 'default' | 'wide' | 'none';
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### SSectionHeaderCardBodyBackground
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
export type SSectionHeaderCardBodyBackground = 'frame' | 'neutral';
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### SSectionHeaderCardChildren
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
export type SSectionHeaderCardChildren = ReactNode;
|
|
54
|
+
```
|
|
55
|
+
|
|
24
56
|
## Dependencies
|
|
25
57
|
|
|
26
58
|
### Depends on
|
|
@@ -51,6 +51,25 @@
|
|
|
51
51
|
| `focus` | `() => void` | 트리거 버튼에 포커스 (sdFocus) |
|
|
52
52
|
| `open` | `() => void` | 드롭다운 열기 (sdOpen) |
|
|
53
53
|
|
|
54
|
+
## Types
|
|
55
|
+
|
|
56
|
+
### SSelectOption
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
export interface SSelectOption {
|
|
60
|
+
value: string | number;
|
|
61
|
+
label: string;
|
|
62
|
+
disabled?: boolean;
|
|
63
|
+
children?: SSelectOption[];
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### SSelectType
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
export type SSelectType = 'default' | 'multi' | 'default_depth' | 'multi_depth';
|
|
71
|
+
```
|
|
72
|
+
|
|
54
73
|
## Dependencies
|
|
55
74
|
|
|
56
75
|
### Used by
|
|
@@ -62,18 +81,18 @@
|
|
|
62
81
|
### Depends on
|
|
63
82
|
|
|
64
83
|
- [SField](../SField)
|
|
65
|
-
- [SGhostButton](../SGhostButton)
|
|
66
84
|
- [SIcon](../SIcon)
|
|
67
85
|
- [SPortal](../SPortal)
|
|
86
|
+
- [SSearchInput](../SSearchInput)
|
|
68
87
|
|
|
69
88
|
### Graph
|
|
70
89
|
|
|
71
90
|
```mermaid
|
|
72
91
|
graph TD;
|
|
73
92
|
SSelect --> SField
|
|
74
|
-
SSelect --> SGhostButton
|
|
75
93
|
SSelect --> SIcon
|
|
76
94
|
SSelect --> SPortal
|
|
95
|
+
SSelect --> SSearchInput
|
|
77
96
|
SChipFilter --> SSelect
|
|
78
97
|
SKeyValueTable --> SSelect
|
|
79
98
|
STable --> SSelect
|
|
@@ -25,3 +25,18 @@
|
|
|
25
25
|
|-------|------|-------------|
|
|
26
26
|
| `onValueChange` | `(value: number) => void` | 크기가 확정될 때. emitImmediately 가 아니면 드래그를 놓는 순간 한 번만 온다 |
|
|
27
27
|
|
|
28
|
+
## Types
|
|
29
|
+
|
|
30
|
+
### SSplitterUnit
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
/** 모델·limits 를 읽는 단위. Quasar QSplitter 의 `unit` 과 같다. */
|
|
34
|
+
export type SSplitterUnit = (typeof SSPLITTER_UNITS)[number];
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### SSPLITTER_UNITS
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
export const SSPLITTER_UNITS = ['%', 'px'] as const;
|
|
41
|
+
```
|
|
42
|
+
|
|
@@ -30,6 +30,32 @@
|
|
|
30
30
|
| `showItemTooltip` | `() => void` | error 아이템 중 첫 번째에 툴팁을 연다. error 아이템이 없으면 아무 일도 일어나지 않는다. |
|
|
31
31
|
| `hideItemTooltip` | `() => void` | 열려있는 커스텀 툴팁을 닫는다. 활성 단계(value prop)가 바뀌면 별도 호출 없이도 자동으로 닫힌다. |
|
|
32
32
|
|
|
33
|
+
## Types
|
|
34
|
+
|
|
35
|
+
### SStepperItem
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
export type SStepperItem = {
|
|
39
|
+
label: string;
|
|
40
|
+
value?: string;
|
|
41
|
+
group?: string;
|
|
42
|
+
completed?: boolean;
|
|
43
|
+
error?: boolean;
|
|
44
|
+
};
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### SStepperSize
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
export type SStepperSize = (typeof STEPPER_SIZES)[number];
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### STEPPER_SIZES
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
export const STEPPER_SIZES = ['sm', 'lg'] as const;
|
|
57
|
+
```
|
|
58
|
+
|
|
33
59
|
## Dependencies
|
|
34
60
|
|
|
35
61
|
### Depends on
|
|
@@ -60,6 +60,109 @@
|
|
|
60
60
|
| `updateRowSelect` | `(row: SRow) => void` | 단일 행 선택 토글 (sd-table updateRowSelect) — onSelectedChange 발생 |
|
|
61
61
|
| `toggleSelectAll` | `(checked: boolean, rows: SRow[]) => void` | 주어진 행들 전체 선택/해제 (sd-table toggleSelectAll) — onSelectedChange 발생 |
|
|
62
62
|
|
|
63
|
+
## Types
|
|
64
|
+
|
|
65
|
+
### STableColumn
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
export interface STableColumn {
|
|
69
|
+
name: string;
|
|
70
|
+
label: string;
|
|
71
|
+
/** 값 접근: 필드명 또는 접근 함수 */
|
|
72
|
+
field: string | ((row: SRow) => any);
|
|
73
|
+
align?: 'left' | 'center' | 'right';
|
|
74
|
+
width?: string;
|
|
75
|
+
/** 고정폭 없이 자동 너비 (sticky/resize 계산에서 제외) */
|
|
76
|
+
autoWidth?: boolean;
|
|
77
|
+
/** 리사이즈 최소/최대 너비 (px) */
|
|
78
|
+
minWidth?: number;
|
|
79
|
+
maxWidth?: number;
|
|
80
|
+
/** 표시 포맷 */
|
|
81
|
+
format?: (value: any, row: SRow) => string;
|
|
82
|
+
visible?: boolean;
|
|
83
|
+
icon?: SIconName;
|
|
84
|
+
/** 헤더 아이콘 색상. 팔레트 키(`grey_65`, `red_95` …) 또는 임의 CSS 색상 */
|
|
85
|
+
iconColor?: SColor;
|
|
86
|
+
/**
|
|
87
|
+
* 셀에 무엇이 들어가는지. 좌우 여백이 여기서 갈린다 — 기본은 `text`(넓게).
|
|
88
|
+
*
|
|
89
|
+
* 자기 폭을 가진 컨트롤(`SInput`·`SNumberInput`·`SSelect` 등)이 들어가는 열은 `control` 로 준다.
|
|
90
|
+
* 텍스트와 같은 넓은 여백을 두면 컨트롤이 쓸 폭이 그만큼 줄어 같은 열 폭에서도 좁아 보인다.
|
|
91
|
+
*
|
|
92
|
+
* `SKeyValueTable` 은 `field.type` 으로 이 판정을 스스로 하지만, `STable` 의 셀은 소비 앱이 넘긴
|
|
93
|
+
* 임의의 `render` 결과라 컴포넌트가 알 수 없다. 그래서 열 단위로 받는다.
|
|
94
|
+
*/
|
|
95
|
+
contentType?: 'text' | 'control';
|
|
96
|
+
/** 셀 커스텀 렌더 (React 확장) — `<td>` 안쪽 내용만 교체한다 */
|
|
97
|
+
render?: (row: SRow, value: any) => ReactNode;
|
|
98
|
+
/**
|
|
99
|
+
* 셀(`<td>`) 자체를 커스텀 렌더 (React 확장). 반환한 엘리먼트가 그대로 `<td>`가 되므로
|
|
100
|
+
* `colSpan` / `rowSpan`을 직접 지정할 수 있다. `render`보다 우선한다.
|
|
101
|
+
*
|
|
102
|
+
* - `ctx.className` / `ctx.style`을 그대로 펼쳐야 구분선·정렬·sticky 등 기본 스타일이 유지된다.
|
|
103
|
+
* - `null`(또는 `false`)을 반환하면 그 자리에는 `<td>`를 만들지 않는다.
|
|
104
|
+
* 다른 셀의 `colSpan` / `rowSpan`에 덮이는 자리를 이렇게 비운다.
|
|
105
|
+
* - 병합은 sticky 컬럼(인덱스 기준 offset 계산)과 함께 쓰지 않는 것을 전제로 한다.
|
|
106
|
+
* `rowSpan`은 행을 잘라 쓰는 가상 스크롤 / 내부 페이지네이션과 경계에서 어긋날 수 있다.
|
|
107
|
+
*/
|
|
108
|
+
renderCell?: (ctx: STableCellContext) => ReactNode;
|
|
109
|
+
/** 헤더 셀 커스텀 렌더 (React 확장) */
|
|
110
|
+
renderHeader?: (column: STableColumn, index: number) => ReactNode;
|
|
111
|
+
/** 본문 셀 커스텀 클래스. 함수를 주면 행마다 다른 클래스를 반환할 수 있다 */
|
|
112
|
+
tdClass?: string | ((row: SRow) => string | undefined);
|
|
113
|
+
/** 헤더 셀 커스텀 클래스/스타일 (sd-table thClass/thStyle) */
|
|
114
|
+
thClass?: string;
|
|
115
|
+
thStyle?: CSSProperties;
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### SRow
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
export type SRow = Record<string, any>;
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### STableStickyColumn
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
export interface STableStickyColumn {
|
|
129
|
+
left?: number;
|
|
130
|
+
right?: number;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### STablePagination
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
export interface STablePagination {
|
|
138
|
+
page: number;
|
|
139
|
+
rowsPerPage: number;
|
|
140
|
+
lastPage?: number;
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### STableCellContext
|
|
145
|
+
|
|
146
|
+
```ts
|
|
147
|
+
/** `STableColumn.renderCell`에 전달되는 컨텍스트 */
|
|
148
|
+
export interface STableCellContext {
|
|
149
|
+
row: SRow;
|
|
150
|
+
/** `field` + `format`이 적용된 표시 값 */
|
|
151
|
+
value: any;
|
|
152
|
+
column: STableColumn;
|
|
153
|
+
/** 보이는 컬럼 기준 인덱스 */
|
|
154
|
+
colIndex: number;
|
|
155
|
+
/** 현재 렌더 중인 행 목록 기준 인덱스 (페이지/가상 스크롤 윈도우 기준) */
|
|
156
|
+
rowIndex: number;
|
|
157
|
+
/** 행 선택 여부 */
|
|
158
|
+
isSelected: boolean;
|
|
159
|
+
/** STable이 이 셀에 적용하려던 클래스 (구분선·말줄임·sticky 그림자 포함) */
|
|
160
|
+
className: string;
|
|
161
|
+
/** STable이 이 셀에 적용하려던 스타일 (패딩·정렬·폭·sticky offset 포함) */
|
|
162
|
+
style: CSSProperties;
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
63
166
|
## Dependencies
|
|
64
167
|
|
|
65
168
|
### Depends on
|
|
@@ -21,6 +21,18 @@
|
|
|
21
21
|
|-------|------|-------------|
|
|
22
22
|
| `onValueChange` | `(value: string) => void` | 탭 변경 (sdUpdate) |
|
|
23
23
|
|
|
24
|
+
## Types
|
|
25
|
+
|
|
26
|
+
### STabOption
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
export interface STabOption {
|
|
30
|
+
label: string;
|
|
31
|
+
value: string;
|
|
32
|
+
badge?: string | number;
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
24
36
|
## Dependencies
|
|
25
37
|
|
|
26
38
|
### Depends on
|
|
@@ -16,6 +16,53 @@
|
|
|
16
16
|
| `iconLeft?` | `boolean` | `true` | 아이콘을 레이블 왼쪽에 배치 |
|
|
17
17
|
| `width?` | `string \| number` | — | 태그 너비 (숫자면 px, 문자열이면 그대로 적용). 미지정 시 콘텐츠 크기 |
|
|
18
18
|
|
|
19
|
+
## Types
|
|
20
|
+
|
|
21
|
+
### STagShape
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
export type STagShape = (typeof TAG_SHAPES)[number];
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### STagSize
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
export type STagSize = (typeof TAG_SIZES)[number];
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### STagColor
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
export type STagColor = (typeof TAG_COLORS)[number];
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### TAG_SHAPES
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
export const TAG_SHAPES = ['square', 'pill'] as const;
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### TAG_SIZES
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
export const TAG_SIZES = ['xs', 'sm', 'md'] as const;
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### TAG_COLORS
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
export const TAG_COLORS = [
|
|
55
|
+
'grey',
|
|
56
|
+
'red',
|
|
57
|
+
'orange',
|
|
58
|
+
'yellow',
|
|
59
|
+
'green',
|
|
60
|
+
'blue',
|
|
61
|
+
'darkblue',
|
|
62
|
+
'indigo',
|
|
63
|
+
] as const;
|
|
64
|
+
```
|
|
65
|
+
|
|
19
66
|
## Dependencies
|
|
20
67
|
|
|
21
68
|
### Used by
|
|
@@ -24,6 +24,20 @@
|
|
|
24
24
|
|-------|------|-------------|
|
|
25
25
|
| `onClick` | `() => void` | |
|
|
26
26
|
|
|
27
|
+
## Types
|
|
28
|
+
|
|
29
|
+
### STextLinkArrow
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
export type STextLinkArrow = 'none' | 'chevron' | 'caret';
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### STextLinkSize
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
export type STextLinkSize = 'sm' | 'md' | 'lg';
|
|
39
|
+
```
|
|
40
|
+
|
|
27
41
|
## Dependencies
|
|
28
42
|
|
|
29
43
|
### Used by
|
|
@@ -41,6 +41,20 @@
|
|
|
41
41
|
| `onValueChange` | `(time: string \| null) => void` | 선택 변경 (sdUpdate) |
|
|
42
42
|
| `onOpenChange` | `(open: boolean) => void` | 열림/닫힘 변경 (sdDropDownShow) |
|
|
43
43
|
|
|
44
|
+
## Types
|
|
45
|
+
|
|
46
|
+
### STimePickerType
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
export type STimePickerType = 'default' | 'midday';
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### STimePickerSize
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
export type STimePickerSize = 'sm' | 'md';
|
|
56
|
+
```
|
|
57
|
+
|
|
44
58
|
## Dependencies
|
|
45
59
|
|
|
46
60
|
### Used by
|
|
@@ -42,6 +42,32 @@
|
|
|
42
42
|
| `onValueChange` | `(range: STimeRangeValue) => void` | 선택 변경 (sdUpdate) |
|
|
43
43
|
| `onOpenChange` | `(open: boolean) => void` | 열림/닫힘 변경 (sdDropDownShow) |
|
|
44
44
|
|
|
45
|
+
## Types
|
|
46
|
+
|
|
47
|
+
### STimeRangeValue
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
export type STimeRangeValue = [string, string] | null;
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### STimeRangePickerType
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
export type STimeRangePickerType = STimePickerType;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### STimeRangePickerSize
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
export type STimeRangePickerSize = STimePickerSize;
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### STimeRangePickerRangeOrder
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
export type STimeRangePickerRangeOrder = 'strict' | 'allow-cross-day';
|
|
69
|
+
```
|
|
70
|
+
|
|
45
71
|
## Dependencies
|
|
46
72
|
|
|
47
73
|
### Depends on
|
|
@@ -51,6 +51,30 @@
|
|
|
51
51
|
| `onClose` | `() => void` | 닫기 (sdClose) |
|
|
52
52
|
| `onButtonClick` | `(e: MouseEvent) => void` | 버튼 클릭 (sdButtonClick) |
|
|
53
53
|
|
|
54
|
+
## Types
|
|
55
|
+
|
|
56
|
+
### SToastPosition
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
export type SToastPosition =
|
|
60
|
+
'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### SToastNotifyOptions
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
export interface SToastNotifyOptions extends Omit<SToastProps, 'onClose'> {
|
|
67
|
+
/** 자동 닫힘 지연(ms). 0이면 자동 닫힘 없음 (없으면 defaultDuration) */
|
|
68
|
+
duration?: number;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### SToastType
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
export type SToastType = 'default' | 'danger' | 'caution' | 'complete' | 'accent' | 'info';
|
|
76
|
+
```
|
|
77
|
+
|
|
54
78
|
## Dependencies
|
|
55
79
|
|
|
56
80
|
### Depends on
|