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.
Files changed (66) hide show
  1. package/AGENTS.md +3 -3
  2. package/dist/components/SBadge/README.md +24 -0
  3. package/dist/components/SBadge/SBadge.d.ts +1 -1
  4. package/dist/components/SBarcodeInput/README.md +8 -0
  5. package/dist/components/SButton/README.md +34 -0
  6. package/dist/components/SCalendar/README.md +13 -0
  7. package/dist/components/SCallout/README.md +15 -0
  8. package/dist/components/SCheckbox/README.md +8 -0
  9. package/dist/components/SChipFilter/README.md +276 -3
  10. package/dist/components/SChipFilter/SChipFilter.d.ts +78 -37
  11. package/dist/components/SChipFilter/index.d.ts +1 -1
  12. package/dist/components/SChipInput/README.md +14 -0
  13. package/dist/components/SCircleProgress/README.md +8 -0
  14. package/dist/components/SConfirmModal/README.md +16 -0
  15. package/dist/components/SDatePicker/README.md +14 -0
  16. package/dist/components/SDateRangePicker/README.md +14 -0
  17. package/dist/components/SDraggableItem/README.md +36 -0
  18. package/dist/components/SDraggableList/README.md +24 -0
  19. package/dist/components/SDrawer/README.md +8 -0
  20. package/dist/components/SDropdownButton/README.md +19 -0
  21. package/dist/components/SExpansionItem/README.md +36 -0
  22. package/dist/components/SField/README.md +20 -0
  23. package/dist/components/SFilePicker/README.md +14 -0
  24. package/dist/components/SFooter/README.md +21 -0
  25. package/dist/components/SForm/README.md +11 -0
  26. package/dist/components/SGhostButton/README.md +14 -2
  27. package/dist/components/SGnb/README.md +45 -0
  28. package/dist/components/SGuide/README.md +15 -0
  29. package/dist/components/SImage/README.md +14 -0
  30. package/dist/components/SKeyValueTable/README.md +83 -0
  31. package/dist/components/SLayout/README.md +16 -0
  32. package/dist/components/SLinearProgress/README.md +8 -0
  33. package/dist/components/SListItem/README.md +41 -0
  34. package/dist/components/SLoadingModal/README.md +8 -0
  35. package/dist/components/SNumberInput/README.md +8 -0
  36. package/dist/components/SPage/README.md +38 -0
  37. package/dist/components/SPopover/README.md +15 -0
  38. package/dist/components/SPopup/README.md +19 -0
  39. package/dist/components/SPortal/README.md +14 -0
  40. package/dist/components/SRadio/README.md +20 -0
  41. package/dist/components/SRadioButton/README.md +18 -0
  42. package/dist/components/SScrollArea/README.md +14 -0
  43. package/dist/components/SSearchInput/README.md +13 -0
  44. package/dist/components/SSectionHeaderCard/README.md +32 -0
  45. package/dist/components/SSelect/README.md +21 -2
  46. package/dist/components/SSplitter/README.md +15 -0
  47. package/dist/components/SStepper/README.md +26 -0
  48. package/dist/components/STable/README.md +103 -0
  49. package/dist/components/STabs/README.md +12 -0
  50. package/dist/components/STag/README.md +47 -0
  51. package/dist/components/STextLink/README.md +14 -0
  52. package/dist/components/STimePicker/README.md +14 -0
  53. package/dist/components/STimeRangePicker/README.md +26 -0
  54. package/dist/components/SToast/README.md +24 -0
  55. package/dist/components/SToggle/README.md +8 -0
  56. package/dist/components/STooltip/README.md +20 -0
  57. package/dist/components/STree/README.md +38 -0
  58. package/dist/index.cjs +170 -186
  59. package/dist/index.cjs.map +1 -1
  60. package/dist/index.js +170 -186
  61. package/dist/index.js.map +1 -1
  62. package/dist/lib/story-docs.d.ts +19 -3
  63. package/dist/llms-full.txt +1444 -15
  64. package/dist/llms.txt +3 -3
  65. package/dist/styles.css +5 -16
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- export { SChipFilter, type SChipFilterChangeDetail, type SChipFilterDatePreset, type SChipFilterField, type SChipFilterGroup, type SChipFilterGroupRule, type SChipFilterHandle, type SChipFilterKeywordValue, type SChipFilterMatchMode, type SChipFilterOption, type SChipFilterOptionValue, type SChipFilterProps, type SChipFilterType, type SChipFilterValue, type SChipFilterValueMap, } from './SChipFilter';
1
+ export { SChipFilter, type SChipFilterChangeDetail, type SChipFilterCustomField, type SChipFilterDateField, type SChipFilterDatePreset, type SChipFilterField, type SChipFilterFieldBase, type SChipFilterGroup, type SChipFilterGroupRule, type SChipFilterHandle, type SChipFilterKeywordField, type SChipFilterKeywordValue, type SChipFilterMatchMode, type SChipFilterMultiField, type SChipFilterOption, type SChipFilterOptionValue, type SChipFilterOptionsField, type SChipFilterPeriodField, type SChipFilterPresetsField, type SChipFilterProps, type SChipFilterSingleField, type SChipFilterType, type SChipFilterValue, type SChipFilterValueMap, } from './SChipFilter';
@@ -54,6 +54,20 @@
54
54
  |--------|------|-------------|
55
55
  | `focus` | `() => void` | 입력 필드에 포커스를 이동합니다. |
56
56
 
57
+ ## Types
58
+
59
+ ### SChipInputSize
60
+
61
+ ```ts
62
+ export type SChipInputSize = SFieldSize;
63
+ ```
64
+
65
+ ### SChipInputMetaPlacement
66
+
67
+ ```ts
68
+ export type SChipInputMetaPlacement = 'end' | 'inline';
69
+ ```
70
+
57
71
  ## Dependencies
58
72
 
59
73
  ### Depends on
@@ -17,6 +17,14 @@
17
17
  | `className?` | `string` | — | |
18
18
  | `style?` | `CSSProperties` | — | |
19
19
 
20
+ ## Types
21
+
22
+ ### SCircleProgressType
23
+
24
+ ```ts
25
+ export type SCircleProgressType = 'primary' | 'inverse' | 'error' | 'complete' | 'neutral';
26
+ ```
27
+
20
28
  ## Dependencies
21
29
 
22
30
  ### Used by
@@ -36,6 +36,22 @@
36
36
  | `onCancel` | `() => void` | |
37
37
  | `onClose` | `() => void` | 닫기(X) 버튼 클릭 (sdClose) |
38
38
 
39
+ ## Types
40
+
41
+ ### SConfirmModalType
42
+
43
+ ```ts
44
+ export type SConfirmModalType = 'positive' | 'negative' | 'default';
45
+ ```
46
+
47
+ ### ConfirmModalMainButton
48
+
49
+ ```ts
50
+ /** 확인 버튼 프리셋 (sd-confirm-modal ConfirmModalMainButton) */
51
+ export type ConfirmModalMainButton =
52
+ 'primary_md' | 'primary_outline_md' | 'danger_md' | 'danger_outline_md' | 'neutral_outline_md';
53
+ ```
54
+
39
55
  ## Dependencies
40
56
 
41
57
  ### Used by
@@ -76,6 +76,20 @@
76
76
  |-------|------|-------------|
77
77
  | `onValueChange` | `(year: string) => void` | |
78
78
 
79
+ ## Types
80
+
81
+ ### SDatePickerMode
82
+
83
+ ```ts
84
+ export type SDatePickerMode = 'date' | 'month' | 'year';
85
+ ```
86
+
87
+ ### SDatePickerSize
88
+
89
+ ```ts
90
+ export type SDatePickerSize = SFieldSize;
91
+ ```
92
+
79
93
  ## Dependencies
80
94
 
81
95
  ### Used by
@@ -59,6 +59,20 @@
59
59
  | `onPendingStartChange` | `(start: string \| null) => void` | 시작일만 선택된(종료일 대기) 상태를 상위로 전달 — 트리거에 `start ~` 프리뷰 표시용 |
60
60
  | `onViewChange` | `(view: { year: number; month: number }) => void` | |
61
61
 
62
+ ## Types
63
+
64
+ ### SDateRangeValue
65
+
66
+ ```ts
67
+ export type SDateRangeValue = [string, string] | null;
68
+ ```
69
+
70
+ ### SDateRangePickerSize
71
+
72
+ ```ts
73
+ export type SDateRangePickerSize = SFieldSize;
74
+ ```
75
+
62
76
  ## Dependencies
63
77
 
64
78
  ### Used by
@@ -29,6 +29,42 @@
29
29
  |-------|------|-------------|
30
30
  | `onDragHandleMouseDown` | `(event: MouseEvent<HTMLDivElement>) => void` | 드래그 핸들 mouse down 이벤트 |
31
31
 
32
+ ## Types
33
+
34
+ ### SDraggableItemSlot
35
+
36
+ ```ts
37
+ export type SDraggableItemSlot = ReactNode | SDraggableItemRenderProp;
38
+ ```
39
+
40
+ ### SDraggableItemSupportingTextPosition
41
+
42
+ ```ts
43
+ export type SDraggableItemSupportingTextPosition = 'right' | 'bottom';
44
+ ```
45
+
46
+ ### SDraggableItemSize
47
+
48
+ ```ts
49
+ export type SDraggableItemSize = 'sm' | 'md';
50
+ ```
51
+
52
+ ### SDraggableItemRenderProp
53
+
54
+ ```ts
55
+ export type SDraggableItemRenderProp = (state: SDraggableItemRenderState) => ReactNode;
56
+ ```
57
+
58
+ ### SDraggableItemRenderState
59
+
60
+ ```ts
61
+ export interface SDraggableItemRenderState {
62
+ hovered: boolean;
63
+ dragging: boolean;
64
+ disabled: boolean;
65
+ }
66
+ ```
67
+
32
68
  ## Dependencies
33
69
 
34
70
  ### Depends on
@@ -46,6 +46,30 @@
46
46
  |------|------|---------|-------------|
47
47
  | `children` | `ReactNode` | — | |
48
48
 
49
+ ## Types
50
+
51
+ ### SDraggableGroupMoveEvent
52
+
53
+ ```ts
54
+ export interface SDraggableGroupMoveEvent {
55
+ group: string;
56
+ itemKey: string;
57
+ fromListId: string;
58
+ fromIndex: number;
59
+ toListId: string;
60
+ toIndex: number;
61
+ }
62
+ ```
63
+
64
+ ### SDraggableListRenderState
65
+
66
+ ```ts
67
+ export interface SDraggableListRenderState {
68
+ onDragHandleMouseDown: (event: MouseEvent<HTMLDivElement>) => void;
69
+ selected: boolean;
70
+ }
71
+ ```
72
+
49
73
  ## Dependencies
50
74
 
51
75
  ### Depends on
@@ -29,6 +29,14 @@
29
29
  | `onClose` | `() => void` | 닫기(X) 버튼 클릭 |
30
30
  | `onWidthChange` | `(width: number) => void` | 너비가 확정될 때(드래그를 놓거나 방향키 조작). 드래그하는 동안에는 오지 않는다 |
31
31
 
32
+ ## Types
33
+
34
+ ### SDrawerButton
35
+
36
+ ```ts
37
+ export type SDrawerButton = SFooterButton;
38
+ ```
39
+
32
40
  ## Dependencies
33
41
 
34
42
  ### Depends on
@@ -33,6 +33,25 @@
33
33
  | `open` | `() => void` | 드롭다운 열기 (sdOpen) |
34
34
  | `close` | `() => void` | 드롭다운 닫기 (sdClose) |
35
35
 
36
+ ## Types
37
+
38
+ ### SDropdownButtonSize
39
+
40
+ ```ts
41
+ export type SDropdownButtonSize = 'xs' | 'sm' | 'md';
42
+ ```
43
+
44
+ ### SDropdownButtonItem
45
+
46
+ ```ts
47
+ export interface SDropdownButtonItem {
48
+ value: string | number;
49
+ label: string;
50
+ icon?: SIconName;
51
+ disabled?: boolean;
52
+ }
53
+ ```
54
+
36
55
  ## Dependencies
37
56
 
38
57
  ### Depends on
@@ -31,6 +31,42 @@
31
31
  |-------|------|-------------|
32
32
  | `onToggle` | `(expanded: boolean, event: MouseEvent<HTMLButtonElement>) => void` | |
33
33
 
34
+ ## Types
35
+
36
+ ### SExpansionItemSupportingTextPosition
37
+
38
+ ```ts
39
+ export type SExpansionItemSupportingTextPosition = 'right' | 'bottom';
40
+ ```
41
+
42
+ ### SExpansionItemRenderProp
43
+
44
+ ```ts
45
+ export type SExpansionItemRenderProp = (state: SExpansionItemRenderState) => ReactNode;
46
+ ```
47
+
48
+ ### SExpansionItemInteraction
49
+
50
+ ```ts
51
+ export type SExpansionItemInteraction = 'chevron';
52
+ ```
53
+
54
+ ### SExpansionItemSize
55
+
56
+ ```ts
57
+ export type SExpansionItemSize = 'sm' | 'md';
58
+ ```
59
+
60
+ ### SExpansionItemRenderState
61
+
62
+ ```ts
63
+ export interface SExpansionItemRenderState {
64
+ expanded: boolean;
65
+ selected: boolean;
66
+ disabled: boolean;
67
+ }
68
+ ```
69
+
34
70
  ## Dependencies
35
71
 
36
72
  ### Used by
@@ -50,6 +50,26 @@
50
50
  |--------|------|-------------|
51
51
  | `focus` | `() => void` | 내부 컨트롤에 포커스하고 필드를 화면에 스크롤합니다. |
52
52
 
53
+ ## Types
54
+
55
+ ### SFieldSize
56
+
57
+ ```ts
58
+ export type SFieldSize = 'sm' | 'md';
59
+ ```
60
+
61
+ ### SFieldAddonAlign
62
+
63
+ ```ts
64
+ export type SFieldAddonAlign = 'start' | 'center' | 'end';
65
+ ```
66
+
67
+ ### SFieldStatus
68
+
69
+ ```ts
70
+ export type SFieldStatus = 'default' | 'pass' | 'error';
71
+ ```
72
+
53
73
  ## Dependencies
54
74
 
55
75
  ### Used by
@@ -46,6 +46,20 @@
46
46
  | `onValueChange` | `(value: SFilePickerValue) => void` | 파일 변경 (sdUpdate) |
47
47
  | `onReject` | `(detail: { files: File[]; reason: SFilePickerRejectReason }) => void` | 제한 초과 거부 (sdReject) |
48
48
 
49
+ ## Types
50
+
51
+ ### SFilePickerValue
52
+
53
+ ```ts
54
+ export type SFilePickerValue = File[] | File | null;
55
+ ```
56
+
57
+ ### SFilePickerRejectReason
58
+
59
+ ```ts
60
+ export type SFilePickerRejectReason = 'max-file-size' | 'max-total-size' | 'max-files';
61
+ ```
62
+
49
63
  ## Dependencies
50
64
 
51
65
  ### Used by
@@ -16,6 +16,27 @@
16
16
  | `leftClassName?` | `string` | — | |
17
17
  | `style?` | `CSSProperties` | — | |
18
18
 
19
+ ## Types
20
+
21
+ ### SFooterBg
22
+
23
+ ```ts
24
+ export type SFooterBg = 'white' | 'grey';
25
+ ```
26
+
27
+ ### SFooterButton
28
+
29
+ ```ts
30
+ export interface SFooterButton {
31
+ label?: string;
32
+ color?: SButtonColor;
33
+ outline?: boolean;
34
+ size?: SButtonSize;
35
+ disabled?: boolean;
36
+ onClick?: () => void;
37
+ }
38
+ ```
39
+
19
40
  ## Dependencies
20
41
 
21
42
  ### Used by
@@ -29,3 +29,14 @@
29
29
  | `reset` | `() => void` | resetValidation 별칭 — sd-form sdReset 대응. 값 리셋은 소비자(value/onChange) 책임 |
30
30
  | `focusFirstInvalid` | `() => void` | 첫 번째 실패 필드로 포커스 이동 |
31
31
 
32
+ ## Types
33
+
34
+ ### SFormValidationError
35
+
36
+ ```ts
37
+ export interface SFormValidationError {
38
+ /** 검증에 실패한 필드 name 목록 (DOM 순서) */
39
+ names: string[];
40
+ }
41
+ ```
42
+
@@ -27,6 +27,20 @@
27
27
  |-------|------|-------------|
28
28
  | `onClick` | `(e: MouseEvent<HTMLButtonElement>) => void` | 클릭 (sdClick) |
29
29
 
30
+ ## Types
31
+
32
+ ### SGhostButtonSize
33
+
34
+ ```ts
35
+ export type SGhostButtonSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg';
36
+ ```
37
+
38
+ ### SGhostButtonIntent
39
+
40
+ ```ts
41
+ export type SGhostButtonIntent = 'default' | 'danger' | 'action' | 'subAction' | 'inverse';
42
+ ```
43
+
30
44
  ## Dependencies
31
45
 
32
46
  ### Used by
@@ -45,7 +59,6 @@
45
59
  - [SPage](../SPage)
46
60
  - [SPopover](../SPopover)
47
61
  - [SSearchInput](../SSearchInput)
48
- - [SSelect](../SSelect)
49
62
  - [STimePicker](../STimePicker)
50
63
  - [STimeRangePicker](../STimeRangePicker)
51
64
  - [SToast](../SToast)
@@ -77,7 +90,6 @@ graph TD;
77
90
  SPage --> SGhostButton
78
91
  SPopover --> SGhostButton
79
92
  SSearchInput --> SGhostButton
80
- SSelect --> SGhostButton
81
93
  STimePicker --> SGhostButton
82
94
  STimeRangePicker --> SGhostButton
83
95
  SToast --> SGhostButton
@@ -38,6 +38,51 @@
38
38
  | `onLauncherClick` | `() => void` | 앱런처(그리드) 버튼 클릭. 미지정 시 런처 버튼을 렌더하지 않는다. 접힘 레일(fix)에는 폴드 버튼만 남으므로 표시되지 않는다. |
39
39
  | `onMenuWidthChange` | `(width: number) => void` | 메뉴 폭이 확정될 때(드래그를 놓거나 방향키 조작). 드래그하는 동안에는 오지 않는다 |
40
40
 
41
+ ## Types
42
+
43
+ ### SGnbType
44
+
45
+ ```ts
46
+ /** 메뉴 스타일: box = 라운드/좁은 들여쓰기, belt = 풀폭 행/넓은 들여쓰기 */
47
+ export type SGnbType = 'box' | 'belt';
48
+ ```
49
+
50
+ ### SGnbHeader
51
+
52
+ ```ts
53
+ /** 상단바 구조: fix = GNB 폭에 고정, full = 레이아웃 전폭 */
54
+ export type SGnbHeader = 'fix' | 'full';
55
+ ```
56
+
57
+ ### SGnbColor
58
+
59
+ ```ts
60
+ /** 색상(테마): light / dark */
61
+ export type SGnbColor = 'light' | 'dark';
62
+ ```
63
+
64
+ ### SGnbMenuItem
65
+
66
+ ```ts
67
+ /** GNB 메뉴 아이템 (재귀 트리). depth1 → depth2 → depth3. */
68
+ export interface SGnbMenuItem {
69
+ /** 표시 텍스트 */
70
+ label: string;
71
+ /** 고유 식별값 (선택 상태 비교 기준) */
72
+ value: string;
73
+ /** depth1 전용 아이콘명 */
74
+ icon?: SIconName;
75
+ /** 우측 Tag 뱃지 텍스트 */
76
+ tag?: string;
77
+ /** 뱃지 색. 미지정 시 blue. */
78
+ tagColor?: STagColor;
79
+ /** 비활성 여부 */
80
+ disabled?: boolean;
81
+ /** 하위 아이템 (있으면 펼침/접힘 대상) */
82
+ children?: SGnbMenuItem[];
83
+ }
84
+ ```
85
+
41
86
  ## Dependencies
42
87
 
43
88
  ### Depends on
@@ -17,6 +17,21 @@
17
17
  | `className?` | `string` | — | |
18
18
  | `style?` | `CSSProperties` | — | |
19
19
 
20
+ ## Types
21
+
22
+ ### SGuideType
23
+
24
+ ```ts
25
+ export type SGuideType = 'tip' | 'notion';
26
+ ```
27
+
28
+ ### SGuideMessage
29
+
30
+ ```ts
31
+ /** 중첩 배열로 depth 표현 (원본 renderListItem 대응). 예: ['상위', ['하위1', '하위2']] */
32
+ export type SGuideMessage = string | SGuideMessage[];
33
+ ```
34
+
20
35
  ## Dependencies
21
36
 
22
37
  ### Depends on
@@ -27,6 +27,20 @@
27
27
  | `onLoad` | `(src: string) => void` | 로드 완료. 로드된 src 를 넘긴다 |
28
28
  | `onError` | `(event: SyntheticEvent<HTMLImageElement>) => void` | 로드 실패 |
29
29
 
30
+ ## Types
31
+
32
+ ### SImageFit
33
+
34
+ ```ts
35
+ export type SImageFit = (typeof IMAGE_FITS)[number];
36
+ ```
37
+
38
+ ### IMAGE_FITS
39
+
40
+ ```ts
41
+ export const IMAGE_FITS = ['cover', 'contain', 'fill', 'none', 'scale-down'] as const;
42
+ ```
43
+
30
44
  ## Dependencies
31
45
 
32
46
  ### Depends on
@@ -23,6 +23,89 @@
23
23
  | `onChange` | `(detail: SKeyValueChangeDetail) => void` | 값 변경 (sdChange) |
24
24
  | `onSearch` | `() => void` | 검색 클릭 (sdSearch) |
25
25
 
26
+ ## Types
27
+
28
+ ### SKeyValueField
29
+
30
+ ```ts
31
+ export type SKeyValueField = SKeyValueFieldBase & SKeyValueFieldByType;
32
+ ```
33
+
34
+ ### SKeyValueChangeDetail
35
+
36
+ ```ts
37
+ /**
38
+ * `onChange` 콜백 detail.
39
+ * 제네릭 `V`에 폼 값 형태(`{ [name]: value }`)를 넘기면 `name`/`value`/`values`가 정밀하게 타이핑됩니다.
40
+ * 미지정 시 `value`는 {@link SKeyValueFieldValue} 유니온으로 잡힙니다.
41
+ */
42
+ export interface SKeyValueChangeDetail<
43
+ V extends Record<string, SKeyValueFieldValue> = Record<string, SKeyValueFieldValue>,
44
+ > {
45
+ /** 변경된 field의 name */
46
+ name: Extract<keyof V, string>;
47
+ /** 변경된 field의 새 값 */
48
+ value: V[Extract<keyof V, string>];
49
+ /** 변경이 반영된 전체 값 객체 (`{ [name]: value }`). controlled 패턴에서 그대로 상태에 반영하면 됩니다. */
50
+ values: V;
51
+ }
52
+ ```
53
+
54
+ ### SKeyValueFieldBase
55
+
56
+ ```ts
57
+ /** field type과 무관한 공통 속성 (레이아웃·레이블·스팬 등) */
58
+ export interface SKeyValueFieldBase {
59
+ name: string;
60
+ label?: string;
61
+ required?: boolean;
62
+ helpText?: string[];
63
+ hideTh?: boolean;
64
+ thRowSpan?: number;
65
+ thColSpan?: number;
66
+ tdRowSpan?: number;
67
+ tdColSpan?: number;
68
+ thWidth?: number | string;
69
+ thClass?: string;
70
+ tdClass?: string;
71
+ /** 셀 커스텀 렌더 (React 확장). 지정 시 type/options는 무시되고 이 노드가 그대로 렌더됩니다. */
72
+ render?: ReactNode;
73
+ }
74
+ ```
75
+
76
+ ### SKeyValueFieldByType
77
+
78
+ ```ts
79
+ /**
80
+ * `type`에 따라 `options`가 해당 컴포넌트의 props로 좁혀지는 discriminated union.
81
+ * `type` 생략 시 `text`로 동작합니다.
82
+ */
83
+ export type SKeyValueFieldByType =
84
+ | { type?: 'text'; options?: { value?: ReactNode } }
85
+ | { type: 'input'; options?: FieldOptions<SInputProps> }
86
+ | { type: 'textarea'; options?: FieldOptions<STextareaProps> }
87
+ | { type: 'number-input'; options?: FieldOptions<SNumberInputProps> }
88
+ | { type: 'select'; options?: FieldOptions<SSelectProps> }
89
+ | { type: 'radio'; options?: FieldOptions<SRadioGroupProps> }
90
+ | { type: 'checkbox'; options?: FieldOptions<SCheckboxProps> }
91
+ | { type: 'date-picker'; options?: FieldOptions<SDatePickerProps> }
92
+ | { type: 'date-range-picker'; options?: FieldOptions<SDateRangePickerProps> }
93
+ | { type: 'file-picker'; options?: FieldOptions<SFilePickerProps> };
94
+ ```
95
+
96
+ ### SKeyValueFieldValue
97
+
98
+ ```ts
99
+ /**
100
+ * field type별 `onChange`로 올라오는 값 타입.
101
+ * - `string`: input · textarea · select · radio · date-picker
102
+ * - `number`: number-input
103
+ * - `boolean`: checkbox
104
+ * - `string[]`: date-range-picker
105
+ */
106
+ export type SKeyValueFieldValue = string | number | boolean | string[];
107
+ ```
108
+
26
109
  ## Dependencies
27
110
 
28
111
  ### Depends on
@@ -20,6 +20,22 @@
20
20
  |-------|------|-------------|
21
21
  | `onFoldedChange` | `(folded: boolean) => void` | 접힘 상태 변경 |
22
22
 
23
+ ## Types
24
+
25
+ ### SLayoutType
26
+
27
+ ```ts
28
+ /** 메뉴 스타일: box(라운드) / belt(풀폭 행) — 자식 SGnb 의 메뉴 모양 */
29
+ export type SLayoutType = SGnbType;
30
+ ```
31
+
32
+ ### SLayoutHeader
33
+
34
+ ```ts
35
+ /** 레이아웃 구조: fix(좌측 GNB + 페이지 가로 분할) / full(풀폭 상단바 + 아래에 메뉴|페이지) */
36
+ export type SLayoutHeader = SGnbHeader;
37
+ ```
38
+
23
39
  ## Dependencies
24
40
 
25
41
  ### Used by
@@ -15,3 +15,11 @@
15
15
  | `className?` | `string` | — | |
16
16
  | `style?` | `CSSProperties` | — | |
17
17
 
18
+ ## Types
19
+
20
+ ### SLinearProgressType
21
+
22
+ ```ts
23
+ export type SLinearProgressType = 'primary' | 'error' | 'complete';
24
+ ```
25
+
@@ -23,6 +23,47 @@
23
23
  | `size?` | `SListItemSize` | `'sm'` | 타이포그래피 크기 |
24
24
  | `disabled?` | `boolean` | `false` | 비활성 상태 여부 |
25
25
 
26
+ ## Types
27
+
28
+ ### SListItemSlot
29
+
30
+ ```ts
31
+ export type SListItemSlot = ReactNode | SListItemRenderProp;
32
+ ```
33
+
34
+ ### SListItemSupportingTextPosition
35
+
36
+ ```ts
37
+ export type SListItemSupportingTextPosition = 'right' | 'bottom';
38
+ ```
39
+
40
+ ### SListItemInteraction
41
+
42
+ ```ts
43
+ export type SListItemInteraction = 'chevron';
44
+ ```
45
+
46
+ ### SListItemSize
47
+
48
+ ```ts
49
+ export type SListItemSize = 'sm' | 'md';
50
+ ```
51
+
52
+ ### SListItemRenderProp
53
+
54
+ ```ts
55
+ export type SListItemRenderProp = (state: SListItemRenderState) => ReactNode;
56
+ ```
57
+
58
+ ### SListItemRenderState
59
+
60
+ ```ts
61
+ export interface SListItemRenderState {
62
+ hovered: boolean;
63
+ disabled: boolean;
64
+ }
65
+ ```
66
+
26
67
  ## Dependencies
27
68
 
28
69
  ### Used by
@@ -26,6 +26,14 @@
26
26
  | `onClose` | `() => void` | 닫기(X) 버튼 클릭 (sdClose) — error 상태에서만 노출 |
27
27
  | `onButtonClick` | `() => void` | 버튼 클릭 (sdClick) |
28
28
 
29
+ ## Types
30
+
31
+ ### LoadingModalState
32
+
33
+ ```ts
34
+ export type LoadingModalState = 'loading' | 'error';
35
+ ```
36
+
29
37
  ## Dependencies
30
38
 
31
39
  ### Used by