sellmate-design-system-react 9.0.0-beta.4 → 9.0.0-beta.40

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 (185) hide show
  1. package/AGENTS.md +642 -88
  2. package/README.md +111 -9
  3. package/dist/components/SAccountListBox/AccountListBoxPortal.d.ts +31 -0
  4. package/dist/components/SAccountListBox/README.md +86 -0
  5. package/dist/components/SAccountListBox/SAccountListBox.d.ts +79 -0
  6. package/dist/components/SAccountListBox/SystemMenuPortal.d.ts +58 -0
  7. package/dist/components/SAccountListBox/accountListBox.config.d.ts +64 -0
  8. package/dist/components/SAccountListBox/index.d.ts +2 -0
  9. package/dist/components/SBadge/README.md +26 -0
  10. package/dist/components/SBadge/SBadge.d.ts +1 -1
  11. package/dist/components/SBarcodeInput/README.md +9 -1
  12. package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +7 -1
  13. package/dist/components/SButton/README.md +38 -0
  14. package/dist/components/SCalendar/README.md +13 -0
  15. package/dist/components/SCalendarBoard/CalendarDayCard.d.ts +38 -0
  16. package/dist/components/SCalendarBoard/CalendarDayEventListBox.d.ts +26 -0
  17. package/dist/components/SCalendarBoard/CalendarEventButton.d.ts +13 -0
  18. package/dist/components/SCalendarBoard/CalendarMoreButton.d.ts +12 -0
  19. package/dist/components/SCalendarBoard/README.md +137 -0
  20. package/dist/components/SCalendarBoard/SCalendarBoard.d.ts +68 -0
  21. package/dist/components/SCalendarBoard/calendarBoard.config.d.ts +33 -0
  22. package/dist/components/SCalendarBoard/index.d.ts +3 -0
  23. package/dist/components/SCalendarBoard/types.d.ts +31 -0
  24. package/dist/components/SCallout/README.md +16 -1
  25. package/dist/components/SCallout/SCallout.d.ts +9 -4
  26. package/dist/components/SCard/README.md +16 -0
  27. package/dist/components/SCard/SCard.d.ts +17 -2
  28. package/dist/components/SCheckbox/README.md +8 -0
  29. package/dist/components/SChipFilter/README.md +339 -14
  30. package/dist/components/SChipFilter/SChipFilter.d.ts +150 -60
  31. package/dist/components/SChipFilter/index.d.ts +1 -1
  32. package/dist/components/SChipInput/README.md +15 -1
  33. package/dist/components/SChipInput/SChipInput.d.ts +7 -1
  34. package/dist/components/SChipInput/index.d.ts +1 -1
  35. package/dist/components/SCircleProgress/README.md +8 -0
  36. package/dist/components/SConfirmModal/README.md +17 -1
  37. package/dist/components/SConfirmModal/SConfirmModal.d.ts +2 -2
  38. package/dist/components/SConfirmModal/index.d.ts +1 -1
  39. package/dist/components/SDatePicker/README.md +20 -2
  40. package/dist/components/SDatePicker/SDatePicker.d.ts +27 -4
  41. package/dist/components/SDateRangePicker/README.md +17 -2
  42. package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +16 -3
  43. package/dist/components/SDivider/README.md +7 -0
  44. package/dist/components/SDivider/SDivider.d.ts +11 -0
  45. package/dist/components/SDraggableItem/README.md +37 -0
  46. package/dist/components/SDraggableItem/SDraggableItem.d.ts +2 -0
  47. package/dist/components/SDraggableItem/index.d.ts +1 -1
  48. package/dist/components/SDraggableList/README.md +30 -0
  49. package/dist/components/SDraggableList/SDraggableList.d.ts +11 -0
  50. package/dist/components/SDraggableList/index.d.ts +1 -1
  51. package/dist/components/SDrawer/README.md +8 -0
  52. package/dist/components/SDropdownButton/README.md +19 -0
  53. package/dist/components/SEditor/EditorBody.d.ts +36 -0
  54. package/dist/components/SEditor/EditorToolbar.d.ts +93 -0
  55. package/dist/components/SEditor/README.md +203 -0
  56. package/dist/components/SEditor/SEditor.d.ts +114 -0
  57. package/dist/components/SEditor/editor-icons.d.ts +63 -0
  58. package/dist/components/SEditor/editor.config.d.ts +119 -0
  59. package/dist/components/SEditor/index.d.ts +8 -0
  60. package/dist/components/SEditor/tiptap-api.d.ts +29 -0
  61. package/dist/components/SEditor/use-is-mobile.d.ts +14 -0
  62. package/dist/components/SExpansionItem/README.md +36 -0
  63. package/dist/components/SExpansionItem/index.d.ts +1 -1
  64. package/dist/components/SField/README.md +27 -3
  65. package/dist/components/SField/SField.d.ts +12 -6
  66. package/dist/components/SFilePicker/README.md +15 -1
  67. package/dist/components/SFilePicker/SFilePicker.d.ts +7 -1
  68. package/dist/components/SFooter/README.md +25 -0
  69. package/dist/components/SFooter/SFooter.d.ts +4 -3
  70. package/dist/components/SForm/README.md +11 -0
  71. package/dist/components/SGhostButton/README.md +22 -4
  72. package/dist/components/SGnb/README.md +51 -0
  73. package/dist/components/SGnb/SGnb.d.ts +50 -0
  74. package/dist/components/SGnb/gnb.config.d.ts +10 -3
  75. package/dist/components/SGnb/index.d.ts +1 -1
  76. package/dist/components/SGnbSystem/README.md +186 -0
  77. package/dist/components/SGnbSystem/SGnbSystem.d.ts +179 -0
  78. package/dist/components/SGnbSystem/gnbSystem.config.d.ts +122 -0
  79. package/dist/components/SGnbSystem/index.d.ts +2 -0
  80. package/dist/components/SGuide/README.md +15 -0
  81. package/dist/components/SIcon/README.md +10 -0
  82. package/dist/components/SIcon/SIcon.d.ts +1 -1
  83. package/dist/components/SIcon/icons.gen.d.ts +4 -0
  84. package/dist/components/SImage/README.md +14 -0
  85. package/dist/components/SInput/README.md +3 -1
  86. package/dist/components/SInput/SInput.d.ts +7 -1
  87. package/dist/components/SKeyValueTable/README.md +86 -0
  88. package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +6 -2
  89. package/dist/components/SKeyValueTable/index.d.ts +1 -1
  90. package/dist/components/SLayout/README.md +21 -0
  91. package/dist/components/SLayout/SLayout.d.ts +4 -0
  92. package/dist/components/SLayout/index.d.ts +1 -1
  93. package/dist/components/SLinearProgress/README.md +15 -0
  94. package/dist/components/SLinearProgress/SLinearProgress.d.ts +3 -0
  95. package/dist/components/SLinearProgress/index.d.ts +1 -1
  96. package/dist/components/SList/README.md +5 -1
  97. package/dist/components/SList/SList.d.ts +0 -2
  98. package/dist/components/SListItem/README.md +41 -0
  99. package/dist/components/SListItem/index.d.ts +1 -1
  100. package/dist/components/SLoadingContainer/loading.d.ts +18 -2
  101. package/dist/components/SLoadingModal/README.md +9 -1
  102. package/dist/components/SLoadingModal/SLoadingModal.d.ts +2 -2
  103. package/dist/components/SLoadingModal/index.d.ts +1 -1
  104. package/dist/components/SNumberInput/README.md +9 -1
  105. package/dist/components/SNumberInput/SNumberInput.d.ts +7 -1
  106. package/dist/components/SPage/README.md +47 -4
  107. package/dist/components/SPage/SPage.d.ts +15 -10
  108. package/dist/components/SPage/SPageHeader.d.ts +18 -11
  109. package/dist/components/SPage/index.d.ts +1 -1
  110. package/dist/components/SPage/page-column.d.ts +25 -0
  111. package/dist/components/SPopover/README.md +15 -0
  112. package/dist/components/SPopup/README.md +19 -0
  113. package/dist/components/SPortal/README.md +18 -0
  114. package/dist/components/SRadio/README.md +20 -0
  115. package/dist/components/SRadioButton/README.md +18 -0
  116. package/dist/components/SRadioButton/SRadioButton.d.ts +1 -1
  117. package/dist/components/SRadioCard/README.md +78 -0
  118. package/dist/components/SRadioCard/SRadioCard.d.ts +29 -0
  119. package/dist/components/SRadioCard/SRadioCardGroup.d.ts +36 -0
  120. package/dist/components/SRadioCard/index.d.ts +2 -0
  121. package/dist/components/SScrollArea/README.md +27 -0
  122. package/dist/components/SSearchInput/README.md +63 -0
  123. package/dist/components/SSearchInput/SSearchInput.d.ts +52 -0
  124. package/dist/components/SSearchInput/index.d.ts +1 -0
  125. package/dist/components/SSectionHeaderCard/README.md +37 -0
  126. package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +10 -0
  127. package/dist/components/SSelect/README.md +24 -6
  128. package/dist/components/SSelect/SSelect.d.ts +14 -2
  129. package/dist/components/SSplitter/README.md +15 -0
  130. package/dist/components/SStepper/README.md +26 -0
  131. package/dist/components/SSwitch/README.md +13 -0
  132. package/dist/components/SSystemActionButton/README.md +221 -0
  133. package/dist/components/SSystemActionButton/SSystemActionButton.d.ts +161 -0
  134. package/dist/components/SSystemActionButton/index.d.ts +2 -0
  135. package/dist/components/SSystemActionButton/systemActionButton.config.d.ts +93 -0
  136. package/dist/components/STable/README.md +86 -1
  137. package/dist/components/STable/STable.d.ts +121 -11
  138. package/dist/components/STable/index.d.ts +1 -1
  139. package/dist/components/STabs/README.md +12 -1
  140. package/dist/components/STabs/STabs.d.ts +2 -4
  141. package/dist/components/STabs/index.d.ts +1 -1
  142. package/dist/components/STabs/tabs.config.d.ts +3 -4
  143. package/dist/components/STag/README.md +52 -0
  144. package/dist/components/STag/STag.d.ts +3 -1
  145. package/dist/components/STextLink/README.md +18 -0
  146. package/dist/components/STextLink/STextLink.d.ts +4 -0
  147. package/dist/components/STextarea/README.md +1 -1
  148. package/dist/components/STextarea/STextarea.d.ts +7 -1
  149. package/dist/components/STimePicker/README.md +15 -1
  150. package/dist/components/STimePicker/STimePicker.d.ts +7 -1
  151. package/dist/components/STimePicker/timepicker.config.d.ts +4 -2
  152. package/dist/components/STimeRangePicker/README.md +27 -1
  153. package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +7 -1
  154. package/dist/components/SToast/README.md +24 -0
  155. package/dist/components/SToggle/README.md +8 -0
  156. package/dist/components/SToggle/index.d.ts +1 -1
  157. package/dist/components/STooltip/README.md +24 -0
  158. package/dist/components/STree/README.md +41 -0
  159. package/dist/components/STree/STree.d.ts +8 -0
  160. package/dist/components/STree/index.d.ts +1 -1
  161. package/dist/docs/Gallery.d.ts +9 -0
  162. package/dist/docs/gallery-previews.d.ts +24 -0
  163. package/dist/index.cjs +10754 -5244
  164. package/dist/index.cjs.map +1 -1
  165. package/dist/index.d.ts +8 -0
  166. package/dist/index.js +10718 -5244
  167. package/dist/index.js.map +1 -1
  168. package/dist/lib/doc-sections.d.ts +35 -0
  169. package/dist/lib/field-width.d.ts +31 -0
  170. package/dist/lib/floating-height.d.ts +15 -0
  171. package/dist/lib/story-docs.d.ts +19 -3
  172. package/dist/lib/truncated-value-tooltip.d.ts +18 -0
  173. package/dist/llms-full.txt +3263 -228
  174. package/dist/llms.txt +647 -90
  175. package/dist/playground/categories.d.ts +19 -0
  176. package/dist/styles.css +1725 -169
  177. package/dist/theme.css +216 -24
  178. package/eslint/index.mjs +14 -0
  179. package/eslint/lib/table-column.mjs +26 -0
  180. package/eslint/rules/divider-vertical-height.mjs +137 -0
  181. package/eslint/rules/field-width-grade.d.mts +41 -0
  182. package/eslint/rules/field-width-grade.mjs +311 -0
  183. package/eslint/rules/table-column-width.mjs +110 -0
  184. package/eslint/scale.gen.mjs +5 -2
  185. package/package.json +13 -1
@@ -0,0 +1,122 @@
1
+ import type { SSystemActionButtonColor } from '../SSystemActionButton';
2
+ /**
3
+ * SGnbSystem 설정.
4
+ *
5
+ * 토큰은 GNB system 패널 한 벌(`--cmp-gnb-system-*`)이다.
6
+ * 패널(배경·경계·구분선·간격) → --cmp-gnb-system-panel-*
7
+ * 도메인 태그 → --cmp-gnb-system-domainTag-*
8
+ * 행 공통(높이·라운드·아이콘 프레임) → --cmp-gnb-system-item-* (SSystemActionButton 과 공유)
9
+ * 알림 버튼 → --cmp-gnb-system-alertButton-*
10
+ * 설정 버튼 → --cmp-gnb-system-setting-*
11
+ * 펼침·접힘 패널 여백 → --cmp-gnb-system-project-padding · --cmp-gnb-system-min-padding
12
+ *
13
+ * 타이포그래피는 CSS 변수가 아니라 `.typo-*` 프리셋으로 나온다.
14
+ * domainTag.typography → typo-body-sm-medium (12/500/20)
15
+ * item.label.typography → typo-body-sm-semibold (12/600/20)
16
+ * alertButton.count → typo-body-md-bold (13/700/22)
17
+ */
18
+ /** 색상(표면). light = 흰 면, dark = 오션블루 면. GNB 의 color 를 그대로 따라간다 */
19
+ export declare const GNB_SYSTEM_COLORS: readonly ["light", "dark"];
20
+ export type SGnbSystemColor = (typeof GNB_SYSTEM_COLORS)[number];
21
+ /**
22
+ * 조각들이 놓이는 자리. GNB 의 `header` 가 정하므로 앱이 고르지 않는다.
23
+ * - `panel` — GNB 바닥에 깔리는 세로 판 (header="fix"). 접히면 48px 레일용 min 형태가 된다.
24
+ * - `top` — 레이아웃 전폭 상단바 위 (header="full"). 판을 깔지 않고 가로 한 줄로 선다.
25
+ */
26
+ export declare const GNB_SYSTEM_PLACEMENTS: readonly ["panel", "top"];
27
+ export type SGnbSystemPlacement = (typeof GNB_SYSTEM_PLACEMENTS)[number];
28
+ /**
29
+ * 패널 색이 곧 행 색이다 — 행(아이콘 프레임·라벨·hover)은 SSystemActionButton 과 같은
30
+ * `--cmp-gnb-system-item-*` 토큰을 쓰므로, 그 색표를 그대로 빌려 두 컴포넌트가 어긋나지 않게 한다.
31
+ * `darker`(판 없이 어두운 GNB 면에 바로 얹는 색)는 판을 깔지 않는 `top` 자리가 쓴다
32
+ * → GNB_SYSTEM_TOP_COLOR_CONFIG.
33
+ */
34
+ export type GnbSystemItemColor = SSystemActionButtonColor;
35
+ export interface GnbSystemColorTokens {
36
+ /** 패널 배경 */
37
+ bg: string;
38
+ /**
39
+ * 패널 위쪽 경계 (GNB 본문과 나누는 선). 배경만으로 경계가 읽히는 색에서는 없다.
40
+ * 토큰에는 light·dark 모두 정의돼 있지만, dark 는 시안이 선을 긋지 않는다 — 아래 주석 참고.
41
+ */
42
+ border?: string;
43
+ /** 패널 안 구분선 (가로 divider · 알림↔설정 세로선) */
44
+ divider: string;
45
+ /** 도메인 태그 배경 */
46
+ domainBg: string;
47
+ /** 도메인 태그 글자색 */
48
+ domainText: string;
49
+ /** 알림이 있을 때의 벨 글리프색 */
50
+ alertIcon: string;
51
+ /** 알림 개수(펼침) · 점 배지(접힘) 색 */
52
+ alertCount: string;
53
+ /** 알림이 있을 때의 hover 배경. 없으면 행 기본 hover 를 쓴다 */
54
+ alertHoverBg?: string;
55
+ }
56
+ export declare const GNB_SYSTEM_COLOR_CONFIG: Record<SGnbSystemColor, GnbSystemColorTokens>;
57
+ /**
58
+ * `top` 자리(전폭 상단바)의 색.
59
+ *
60
+ * 상단바에는 판을 깔지 않고 조각을 GNB 면에 바로 얹는다 — 그래서 행 색이 패널과 한 단계 다르다.
61
+ * dark 는 패널의 오션블루(`dark`)가 아니라 GNB 네이비 면용 `darker` 를 쓰고, 구분선·도메인 태그도
62
+ * 그에 맞춘 `*-darker-*` 토큰을 쓴다. 알림 강조색은 darker 대응 토큰이 없어 dark 값을 그대로 쓴다
63
+ * (두 면 모두 어두운 면이라 같은 노랑이 맞는다).
64
+ */
65
+ export interface GnbSystemTopColorTokens {
66
+ /** 조각(액션·알림·설정·계정)이 쓰는 행 색 */
67
+ item: GnbSystemItemColor;
68
+ /** 조각 사이 세로 구분선 */
69
+ divider: string;
70
+ /** 도메인 태그 배경 */
71
+ domainBg: string;
72
+ /** 도메인 태그 글자색 */
73
+ domainText: string;
74
+ /** 알림이 있을 때의 벨 글리프색 */
75
+ alertIcon: string;
76
+ /** 알림 개수 색 */
77
+ alertCount: string;
78
+ /** 알림이 있을 때의 hover 배경. 없으면 행 기본 hover 를 쓴다 */
79
+ alertHoverBg?: string;
80
+ }
81
+ export declare const GNB_SYSTEM_TOP_COLOR_CONFIG: Record<SGnbSystemColor, GnbSystemTopColorTokens>;
82
+ /** 치수 — 전부 토큰 참조 */
83
+ export declare const GNB_SYSTEM_LAYOUT: {
84
+ /** 펼친 패널의 안쪽 여백 */
85
+ readonly padding: "var(--cmp-gnb-system-project-padding)";
86
+ /** 접힌(min) 패널의 안쪽 여백 */
87
+ readonly foldedPadding: "var(--cmp-gnb-system-min-padding)";
88
+ /**
89
+ * 패널이 쌓는 블록 사이 간격. 알림↔설정 사이의 가로 간격도 전용 토큰이 없어 이 값을 쓴다
90
+ * (시안에서 두 간격이 같다).
91
+ */
92
+ readonly gap: string;
93
+ /** 행 높이 */
94
+ readonly itemHeight: string;
95
+ /** 행 라운드 */
96
+ readonly itemRadius: string;
97
+ /** 아이콘 프레임 한 변 */
98
+ readonly iconFrame: string;
99
+ /** 아이콘 글리프 크기 */
100
+ readonly iconGlyph: string;
101
+ /** 아이콘 프레임 라운드 */
102
+ readonly iconRadius: string;
103
+ /** 아이콘 프레임 ↔ 라벨 간격 */
104
+ readonly iconLabelGap: string;
105
+ /** 알림 버튼 좌우 여백 */
106
+ readonly alertPaddingX: string;
107
+ /** 설정 버튼 좌우 여백 */
108
+ readonly settingPaddingX: "var(--cmp-gnb-system-setting-paddingX)";
109
+ /** 도메인 태그 */
110
+ readonly domainPaddingX: string;
111
+ readonly domainPaddingY: string;
112
+ readonly domainRadius: string;
113
+ };
114
+ /**
115
+ * 알림 점 배지 지름(px). 접힌 패널에는 개수를 적을 자리가 없어 점만 찍는다.
116
+ * 전용 토큰이 없어 시안 값을 상수로 둔다.
117
+ */
118
+ export declare const GNB_SYSTEM_ALERT_DOT_SIZE = 6;
119
+ /** 알림 버튼 기본 라벨 */
120
+ export declare const GNB_SYSTEM_ALERT_LABEL = "\uC54C\uB9BC";
121
+ /** 설정 버튼 기본 라벨 */
122
+ export declare const GNB_SYSTEM_SETTING_LABEL = "\uC124\uC815";
@@ -0,0 +1,2 @@
1
+ export { SGnbSystem, type SGnbSystemProps, type SGnbSystemAction, type SGnbSystemAlert, type SGnbSystemSetting, type SGnbSystemAccount, } from './SGnbSystem';
2
+ export { GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, type SGnbSystemColor, type SGnbSystemPlacement, type GnbSystemColorTokens, type GnbSystemTopColorTokens, } from './gnbSystem.config';
@@ -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
@@ -20,6 +20,7 @@
20
20
 
21
21
  ### Used by
22
22
 
23
+ - [SAccountListBox](../SAccountListBox)
23
24
  - [SButton](../SButton)
24
25
  - [SCallout](../SCallout)
25
26
  - [SCheckbox](../SCheckbox)
@@ -30,11 +31,13 @@
30
31
  - [SDateRangePicker](../SDateRangePicker)
31
32
  - [SDraggableItem](../SDraggableItem)
32
33
  - [SDropdownButton](../SDropdownButton)
34
+ - [SEditor](../SEditor)
33
35
  - [SExpansionItem](../SExpansionItem)
34
36
  - [SField](../SField)
35
37
  - [SFilePicker](../SFilePicker)
36
38
  - [SGhostButton](../SGhostButton)
37
39
  - [SGnb](../SGnb)
40
+ - [SGnbSystem](../SGnbSystem)
38
41
  - [SGuide](../SGuide)
39
42
  - [SImage](../SImage)
40
43
  - [SKeyValueTable](../SKeyValueTable)
@@ -43,9 +46,11 @@
43
46
  - [SNumberInput](../SNumberInput)
44
47
  - [SPagination](../SPagination)
45
48
  - [SPopover](../SPopover)
49
+ - [SSearchInput](../SSearchInput)
46
50
  - [SSectionHeaderCard](../SSectionHeaderCard)
47
51
  - [SSelect](../SSelect)
48
52
  - [SStepper](../SStepper)
53
+ - [SSystemActionButton](../SSystemActionButton)
49
54
  - [STable](../STable)
50
55
  - [STag](../STag)
51
56
  - [STextLink](../STextLink)
@@ -58,6 +63,7 @@
58
63
 
59
64
  ```mermaid
60
65
  graph TD;
66
+ SAccountListBox --> SIcon
61
67
  SButton --> SIcon
62
68
  SCallout --> SIcon
63
69
  SCheckbox --> SIcon
@@ -68,11 +74,13 @@ graph TD;
68
74
  SDateRangePicker --> SIcon
69
75
  SDraggableItem --> SIcon
70
76
  SDropdownButton --> SIcon
77
+ SEditor --> SIcon
71
78
  SExpansionItem --> SIcon
72
79
  SField --> SIcon
73
80
  SFilePicker --> SIcon
74
81
  SGhostButton --> SIcon
75
82
  SGnb --> SIcon
83
+ SGnbSystem --> SIcon
76
84
  SGuide --> SIcon
77
85
  SImage --> SIcon
78
86
  SKeyValueTable --> SIcon
@@ -81,9 +89,11 @@ graph TD;
81
89
  SNumberInput --> SIcon
82
90
  SPagination --> SIcon
83
91
  SPopover --> SIcon
92
+ SSearchInput --> SIcon
84
93
  SSectionHeaderCard --> SIcon
85
94
  SSelect --> SIcon
86
95
  SStepper --> SIcon
96
+ SSystemActionButton --> SIcon
87
97
  STable --> SIcon
88
98
  STag --> SIcon
89
99
  STextLink --> SIcon
@@ -17,6 +17,6 @@ export interface SIconProps {
17
17
  }
18
18
  /**
19
19
  * SIcon — sd-icon 포팅.
20
- * 94개 SVG(icons.gen.tsx)를 currentColor 기반으로 렌더한다.
20
+ * icons.gen.tsx 의 SVG 를 currentColor 기반으로 렌더한다.
21
21
  */
22
22
  export declare const SIcon: import("react").ForwardRefExoticComponent<SIconProps & import("react").RefAttributes<HTMLSpanElement>>;
@@ -3,6 +3,7 @@ export type IconRenderProps = {
3
3
  size?: number | string;
4
4
  } & SVGProps<SVGSVGElement>;
5
5
  export declare const ICONS: {
6
+ readonly account: (p: IconRenderProps) => import("react").JSX.Element;
6
7
  readonly add: (p: IconRenderProps) => import("react").JSX.Element;
7
8
  readonly alert: (p: IconRenderProps) => import("react").JSX.Element;
8
9
  readonly alignKorean: (p: IconRenderProps) => import("react").JSX.Element;
@@ -15,6 +16,7 @@ export declare const ICONS: {
15
16
  readonly attachFile: (p: IconRenderProps) => import("react").JSX.Element;
16
17
  readonly barcode: (p: IconRenderProps) => import("react").JSX.Element;
17
18
  readonly bell: (p: IconRenderProps) => import("react").JSX.Element;
19
+ readonly bellRinging: (p: IconRenderProps) => import("react").JSX.Element;
18
20
  readonly bill: (p: IconRenderProps) => import("react").JSX.Element;
19
21
  readonly board: (p: IconRenderProps) => import("react").JSX.Element;
20
22
  readonly box: (p: IconRenderProps) => import("react").JSX.Element;
@@ -39,6 +41,7 @@ export declare const ICONS: {
39
41
  readonly clockFill: (p: IconRenderProps) => import("react").JSX.Element;
40
42
  readonly clockOutline: (p: IconRenderProps) => import("react").JSX.Element;
41
43
  readonly close: (p: IconRenderProps) => import("react").JSX.Element;
44
+ readonly company: (p: IconRenderProps) => import("react").JSX.Element;
42
45
  readonly copy: (p: IconRenderProps) => import("react").JSX.Element;
43
46
  readonly coupon: (p: IconRenderProps) => import("react").JSX.Element;
44
47
  readonly dashboard: (p: IconRenderProps) => import("react").JSX.Element;
@@ -76,6 +79,7 @@ export declare const ICONS: {
76
79
  readonly reset: (p: IconRenderProps) => import("react").JSX.Element;
77
80
  readonly robot: (p: IconRenderProps) => import("react").JSX.Element;
78
81
  readonly row: (p: IconRenderProps) => import("react").JSX.Element;
82
+ readonly rowDense: (p: IconRenderProps) => import("react").JSX.Element;
79
83
  readonly save: (p: IconRenderProps) => import("react").JSX.Element;
80
84
  readonly search: (p: IconRenderProps) => import("react").JSX.Element;
81
85
  readonly send: (p: IconRenderProps) => import("react").JSX.Element;
@@ -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
@@ -31,7 +31,7 @@
31
31
  | `errorMessage?` | `string` | — | |
32
32
  | `addonLabel?` | `string` | — | |
33
33
  | `addonAlign?` | `SFieldAddonAlign` | — | 어드온 정렬 |
34
- | `width?` | `number \| string` | — | |
34
+ | `width?` | `SFieldWidth` | — | 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이. 등급은 `--cmp-field-width-*` 토큰으로 풀리며 `maxLength`(= 스키마 상한)로 고른다. 상한이 `xl` 을 넘거나 상한이 없으면 `"100%"`. (`sellmate/field-width-grade` 가 검사한다) |
35
35
  | `disabled?` | `boolean` | `false` | |
36
36
  | `readOnly?` | `boolean` | `false` | |
37
37
  | `className?` | `string` | — | |
@@ -48,6 +48,7 @@
48
48
 
49
49
  ### Used by
50
50
 
51
+ - [SEditor](../SEditor)
51
52
  - [SKeyValueTable](../SKeyValueTable)
52
53
 
53
54
  ### Depends on
@@ -61,6 +62,7 @@
61
62
  graph TD;
62
63
  SInput --> SField
63
64
  SInput --> SGhostButton
65
+ SEditor --> SInput
64
66
  SKeyValueTable --> SInput
65
67
  style SInput fill:#f9f,stroke:#333,stroke-width:4px
66
68
  ```
@@ -4,6 +4,7 @@ import { type SIconName } from '../SIcon';
4
4
  import { type SColor } from '../../lib/color';
5
5
  import { type Rule } from '../../lib/form';
6
6
  import { type STooltipProps } from '../STooltip';
7
+ import { type SFieldWidth } from '../../lib/field-width';
7
8
  export interface SInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'value' | 'onChange' | 'type' | 'prefix' | 'suffix'> {
8
9
  /** 값 (제어) */
9
10
  value?: string | number;
@@ -49,7 +50,12 @@ export interface SInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
49
50
  addonLabel?: string;
50
51
  /** 어드온 정렬 */
51
52
  addonAlign?: SFieldAddonAlign;
52
- width?: number | string;
53
+ /**
54
+ * 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이.
55
+ * 등급은 `--cmp-field-width-*` 토큰으로 풀리며 `maxLength`(= 스키마 상한)로 고른다.
56
+ * 상한이 `xl` 을 넘거나 상한이 없으면 `"100%"`. (`sellmate/field-width-grade` 가 검사한다)
57
+ */
58
+ width?: SFieldWidth;
53
59
  disabled?: boolean;
54
60
  readOnly?: boolean;
55
61
  className?: string;
@@ -23,6 +23,90 @@
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: 'switch'; options?: FieldOptions<SSwitchProps> }
92
+ | { type: 'date-picker'; options?: FieldOptions<SDatePickerProps> }
93
+ | { type: 'date-range-picker'; options?: FieldOptions<SDateRangePickerProps> }
94
+ | { type: 'file-picker'; options?: FieldOptions<SFilePickerProps> };
95
+ ```
96
+
97
+ ### SKeyValueFieldValue
98
+
99
+ ```ts
100
+ /**
101
+ * field type별 `onChange`로 올라오는 값 타입.
102
+ * - `string`: input · textarea · select · radio · date-picker
103
+ * - `number`: number-input
104
+ * - `boolean`: checkbox · switch
105
+ * - `string[]`: date-range-picker
106
+ */
107
+ export type SKeyValueFieldValue = string | number | boolean | string[];
108
+ ```
109
+
26
110
  ## Dependencies
27
111
 
28
112
  ### Depends on
@@ -37,6 +121,7 @@
37
121
  - [SNumberInput](../SNumberInput)
38
122
  - [SRadio](../SRadio)
39
123
  - [SSelect](../SSelect)
124
+ - [SSwitch](../SSwitch)
40
125
  - [STextarea](../STextarea)
41
126
  - [STooltip](../STooltip)
42
127
 
@@ -54,6 +139,7 @@ graph TD;
54
139
  SKeyValueTable --> SNumberInput
55
140
  SKeyValueTable --> SRadio
56
141
  SKeyValueTable --> SSelect
142
+ SKeyValueTable --> SSwitch
57
143
  SKeyValueTable --> STextarea
58
144
  SKeyValueTable --> STooltip
59
145
  style SKeyValueTable fill:#f9f,stroke:#333,stroke-width:4px
@@ -5,10 +5,11 @@ import { type SNumberInputProps } from '../SNumberInput';
5
5
  import { type SSelectProps } from '../SSelect';
6
6
  import { type SRadioGroupProps } from '../SRadio';
7
7
  import { type SCheckboxProps } from '../SCheckbox';
8
+ import { type SSwitchProps } from '../SSwitch';
8
9
  import { type SDatePickerProps } from '../SDatePicker';
9
10
  import { type SDateRangePickerProps } from '../SDateRangePicker';
10
11
  import { type SFilePickerProps } from '../SFilePicker';
11
- export type SKeyValueFieldType = 'text' | 'input' | 'textarea' | 'number-input' | 'select' | 'radio' | 'checkbox' | 'date-picker' | 'date-range-picker' | 'file-picker';
12
+ export type SKeyValueFieldType = 'text' | 'input' | 'textarea' | 'number-input' | 'select' | 'radio' | 'checkbox' | 'switch' | 'date-picker' | 'date-range-picker' | 'file-picker';
12
13
  /** field type과 무관한 공통 속성 (레이아웃·레이블·스팬 등) */
13
14
  export interface SKeyValueFieldBase {
14
15
  name: string;
@@ -59,6 +60,9 @@ export type SKeyValueFieldByType = {
59
60
  } | {
60
61
  type: 'checkbox';
61
62
  options?: FieldOptions<SCheckboxProps>;
63
+ } | {
64
+ type: 'switch';
65
+ options?: FieldOptions<SSwitchProps>;
62
66
  } | {
63
67
  type: 'date-picker';
64
68
  options?: FieldOptions<SDatePickerProps>;
@@ -74,7 +78,7 @@ export type SKeyValueField = SKeyValueFieldBase & SKeyValueFieldByType;
74
78
  * field type별 `onChange`로 올라오는 값 타입.
75
79
  * - `string`: input · textarea · select · radio · date-picker
76
80
  * - `number`: number-input
77
- * - `boolean`: checkbox
81
+ * - `boolean`: checkbox · switch
78
82
  * - `string[]`: date-range-picker
79
83
  */
80
84
  export type SKeyValueFieldValue = string | number | boolean | string[];
@@ -1 +1 @@
1
- export { SKeyValueTable, type SKeyValueTableProps, type SKeyValueField, type SKeyValueFieldType, type SKeyValueChangeDetail, } from './SKeyValueTable';
1
+ export { SKeyValueTable, type SKeyValueTableProps, type SKeyValueField, type SKeyValueFieldBase, type SKeyValueFieldByType, type SKeyValueFieldType, type SKeyValueFieldValue, type SKeyValueChangeDetail, } from './SKeyValueTable';
@@ -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
@@ -27,10 +43,15 @@
27
43
  - [SGnb](../SGnb)
28
44
  - [SPage](../SPage)
29
45
 
46
+ ### Depends on
47
+
48
+ - [SPage](../SPage)
49
+
30
50
  ### Graph
31
51
 
32
52
  ```mermaid
33
53
  graph TD;
54
+ SLayout --> SPage
34
55
  SGnb --> SLayout
35
56
  SPage --> SLayout
36
57
  style SLayout fill:#f9f,stroke:#333,stroke-width:4px
@@ -106,5 +106,9 @@ export interface SLayoutProps extends HTMLAttributes<HTMLDivElement> {
106
106
  * "header header" ← 전폭 상단바 (1행, 높이 = 등록된 topHeight)
107
107
  * "nav page" ← 메뉴 열(등록된 columnWidth) | 페이지
108
108
  * 접으면 nav 열을 0 으로 접어 페이지가 전폭을 쓴다.
109
+ *
110
+ * 자식 순서는 `SGnb` → (선택) `SPageHeader` → `SPage` 다. `SPageHeader` 를 두면 **그 자식부터 뒤가**
111
+ * 하나의 페이지 열로 묶여(page-column.tsx) 헤더가 페이지 위에 고정되고, 그 아래에서만 스크롤이 일어난다.
112
+ * 헤더를 두지 않으면 아무것도 감싸지 않는다 — `SPage` 가 예전처럼 프레임의 자식으로 남는다.
109
113
  */
110
114
  export declare const SLayout: import("react").ForwardRefExoticComponent<SLayoutProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- export { SLayout, SLayoutContext, SLAYOUT_MIN_WIDTH, useSLayout, type SLayoutProps, type SLayoutType, type SLayoutHeader, type SLayoutContextValue, } from './SLayout';
1
+ export { SLayout, SLayoutContext, SLAYOUT_MIN_WIDTH, useSLayout, type SLayoutProps, type SLayoutType, type SLayoutHeader, type SLayoutNavState, type SLayoutContextValue, } from './SLayout';
@@ -10,8 +10,23 @@
10
10
  |------|------|---------|-------------|
11
11
  | `value?` | `number` | `0` | 진행률 (0–100) |
12
12
  | `type?` | `SLinearProgressType` | `'primary'` | 색상 타입 |
13
+ | `size?` | `SLinearProgressSize` | `'sm'` | 바 높이. xs 는 바 안에 퍼센트 텍스트를 넣지 않는다 |
13
14
  | `indeterminate?` | `boolean` | `false` | 진행률 없이 무한 애니메이션 |
14
15
  | `label?` | `string` | — | 하단 레이블 |
15
16
  | `className?` | `string` | — | |
16
17
  | `style?` | `CSSProperties` | — | |
17
18
 
19
+ ## Types
20
+
21
+ ### SLinearProgressType
22
+
23
+ ```ts
24
+ export type SLinearProgressType = 'primary' | 'error' | 'complete';
25
+ ```
26
+
27
+ ### SLinearProgressSize
28
+
29
+ ```ts
30
+ export type SLinearProgressSize = 'xs' | 'sm' | 'md';
31
+ ```
32
+
@@ -1,10 +1,13 @@
1
1
  import { type CSSProperties } from 'react';
2
2
  export type SLinearProgressType = 'primary' | 'error' | 'complete';
3
+ export type SLinearProgressSize = 'xs' | 'sm' | 'md';
3
4
  export interface SLinearProgressProps {
4
5
  /** 진행률 (0–100) */
5
6
  value?: number;
6
7
  /** 색상 타입 */
7
8
  type?: SLinearProgressType;
9
+ /** 바 높이. xs 는 바 안에 퍼센트 텍스트를 넣지 않는다 */
10
+ size?: SLinearProgressSize;
8
11
  /** 진행률 없이 무한 애니메이션 */
9
12
  indeterminate?: boolean;
10
13
  /** 하단 레이블 */
@@ -1 +1 @@
1
- export { SLinearProgress, type SLinearProgressProps, type SLinearProgressType, } from './SLinearProgress';
1
+ export { SLinearProgress, type SLinearProgressProps, type SLinearProgressType, type SLinearProgressSize, } from './SLinearProgress';
@@ -11,7 +11,6 @@
11
11
  | `children?` | `ReactNode` | — | 리스트 컨테이너 내부에 렌더링할 내용 |
12
12
  | `useGap?` | `boolean` | `false` | 리스트 아이템 사이 gap 토큰 적용 여부 |
13
13
  | `usePadding?` | `boolean` | `false` | 리스트 컨테이너 padding 토큰 적용 여부 |
14
- | `separator?` | `boolean` | `false` | 아이템 하단 구분선 표시 여부. 테두리를 가진 아이템(`bordered`)에는 쓰지 않는다 |
15
14
 
16
15
  ## Dependencies
17
16
 
@@ -20,10 +19,15 @@
20
19
  - [SDraggableList](../SDraggableList)
21
20
  - [SExpansionList](../SExpansionList)
22
21
 
22
+ ### Depends on
23
+
24
+ - [SDivider](../SDivider)
25
+
23
26
  ### Graph
24
27
 
25
28
  ```mermaid
26
29
  graph TD;
30
+ SList --> SDivider
27
31
  SDraggableList --> SList
28
32
  SExpansionList --> SList
29
33
  style SList fill:#f9f,stroke:#333,stroke-width:4px
@@ -6,7 +6,5 @@ export interface SListProps extends HTMLAttributes<HTMLDivElement> {
6
6
  useGap?: boolean;
7
7
  /** 리스트 컨테이너 padding 토큰 적용 여부 */
8
8
  usePadding?: boolean;
9
- /** 아이템 하단 구분선 표시 여부. 테두리를 가진 아이템(`bordered`)에는 쓰지 않는다 */
10
- separator?: boolean;
11
9
  }
12
10
  export declare const SList: import("react").ForwardRefExoticComponent<SListProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -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
@@ -1 +1 @@
1
- export { SListItem, type SListItemProps, type SListItemSupportingTextPosition } from './SListItem';
1
+ export { SListItem, type SListItemInteraction, type SListItemProps, type SListItemRenderProp, type SListItemRenderState, type SListItemSize, type SListItemSlot, type SListItemSupportingTextPosition, } from './SListItem';