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

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 (196) hide show
  1. package/AGENTS.md +670 -95
  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 +12 -4
  12. package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +10 -2
  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 +16 -2
  33. package/dist/components/SChipInput/SChipInput.d.ts +8 -2
  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 +11 -3
  37. package/dist/components/SConfirmModal/SConfirmModal.d.ts +16 -8
  38. package/dist/components/SDatePicker/README.md +20 -2
  39. package/dist/components/SDatePicker/SDatePicker.d.ts +27 -4
  40. package/dist/components/SDateRangePicker/README.md +19 -4
  41. package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +19 -6
  42. package/dist/components/SDivider/README.md +7 -0
  43. package/dist/components/SDivider/SDivider.d.ts +11 -0
  44. package/dist/components/SDraggableItem/README.md +37 -0
  45. package/dist/components/SDraggableItem/SDraggableItem.d.ts +2 -0
  46. package/dist/components/SDraggableItem/index.d.ts +1 -1
  47. package/dist/components/SDraggableList/README.md +30 -0
  48. package/dist/components/SDraggableList/SDraggableList.d.ts +11 -0
  49. package/dist/components/SDraggableList/index.d.ts +1 -1
  50. package/dist/components/SDrawer/README.md +8 -0
  51. package/dist/components/SDropdownButton/README.md +19 -0
  52. package/dist/components/SEditor/EditorBody.d.ts +36 -0
  53. package/dist/components/SEditor/EditorToolbar.d.ts +93 -0
  54. package/dist/components/SEditor/README.md +203 -0
  55. package/dist/components/SEditor/SEditor.d.ts +114 -0
  56. package/dist/components/SEditor/editor-icons.d.ts +63 -0
  57. package/dist/components/SEditor/editor.config.d.ts +119 -0
  58. package/dist/components/SEditor/index.d.ts +8 -0
  59. package/dist/components/SEditor/tiptap-api.d.ts +29 -0
  60. package/dist/components/SEditor/use-is-mobile.d.ts +14 -0
  61. package/dist/components/SExpansionItem/README.md +36 -0
  62. package/dist/components/SExpansionItem/index.d.ts +1 -1
  63. package/dist/components/SField/README.md +29 -5
  64. package/dist/components/SField/SField.d.ts +20 -8
  65. package/dist/components/SFilePicker/README.md +18 -4
  66. package/dist/components/SFilePicker/SFilePicker.d.ts +11 -5
  67. package/dist/components/SFooter/README.md +25 -0
  68. package/dist/components/SFooter/SFooter.d.ts +4 -3
  69. package/dist/components/SForm/README.md +12 -1
  70. package/dist/components/SForm/SForm.d.ts +2 -2
  71. package/dist/components/SGhostButton/README.md +22 -4
  72. package/dist/components/SGnb/README.md +57 -6
  73. package/dist/components/SGnb/SGnb.d.ts +58 -8
  74. package/dist/components/SGnb/gnb.config.d.ts +12 -5
  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 +15 -1
  85. package/dist/components/SImage/SImage.d.ts +2 -2
  86. package/dist/components/SInput/README.md +6 -4
  87. package/dist/components/SInput/SInput.d.ts +10 -4
  88. package/dist/components/SKeyValueTable/README.md +86 -0
  89. package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +6 -2
  90. package/dist/components/SKeyValueTable/index.d.ts +1 -1
  91. package/dist/components/SLayout/README.md +22 -1
  92. package/dist/components/SLayout/SLayout.d.ts +6 -2
  93. package/dist/components/SLayout/index.d.ts +1 -1
  94. package/dist/components/SLinearProgress/README.md +15 -0
  95. package/dist/components/SLinearProgress/SLinearProgress.d.ts +3 -0
  96. package/dist/components/SLinearProgress/index.d.ts +1 -1
  97. package/dist/components/SList/README.md +15 -3
  98. package/dist/components/SList/SList.d.ts +7 -5
  99. package/dist/components/SList/index.d.ts +1 -1
  100. package/dist/components/SListItem/README.md +41 -0
  101. package/dist/components/SListItem/index.d.ts +1 -1
  102. package/dist/components/SLoadingContainer/loading.d.ts +18 -2
  103. package/dist/components/SLoadingModal/README.md +10 -2
  104. package/dist/components/SLoadingModal/SLoadingModal.d.ts +4 -4
  105. package/dist/components/SLoadingModal/index.d.ts +1 -1
  106. package/dist/components/SModal/README.md +1 -1
  107. package/dist/components/SNumberInput/README.md +14 -6
  108. package/dist/components/SNumberInput/SNumberInput.d.ts +12 -4
  109. package/dist/components/SPage/README.md +87 -5
  110. package/dist/components/SPage/SPage.d.ts +29 -9
  111. package/dist/components/SPage/SPageHeader.d.ts +31 -13
  112. package/dist/components/SPage/index.d.ts +2 -2
  113. package/dist/components/SPage/page-column.d.ts +34 -0
  114. package/dist/components/SPage/page-width.d.ts +23 -0
  115. package/dist/components/SPage/page.config.d.ts +18 -0
  116. package/dist/components/SPopover/README.md +15 -0
  117. package/dist/components/SPopup/README.md +27 -2
  118. package/dist/components/SPopup/SPopup.d.ts +7 -3
  119. package/dist/components/SPopup/index.d.ts +1 -1
  120. package/dist/components/SPortal/README.md +18 -0
  121. package/dist/components/SRadio/README.md +20 -0
  122. package/dist/components/SRadioButton/README.md +18 -0
  123. package/dist/components/SRadioButton/SRadioButton.d.ts +1 -1
  124. package/dist/components/SRadioCard/README.md +78 -0
  125. package/dist/components/SRadioCard/SRadioCard.d.ts +29 -0
  126. package/dist/components/SRadioCard/SRadioCardGroup.d.ts +36 -0
  127. package/dist/components/SRadioCard/index.d.ts +2 -0
  128. package/dist/components/SScrollArea/README.md +27 -0
  129. package/dist/components/SSearchInput/README.md +63 -0
  130. package/dist/components/SSearchInput/SSearchInput.d.ts +52 -0
  131. package/dist/components/SSearchInput/index.d.ts +1 -0
  132. package/dist/components/SSectionHeaderCard/README.md +37 -0
  133. package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +10 -0
  134. package/dist/components/SSelect/README.md +29 -11
  135. package/dist/components/SSelect/SSelect.d.ts +28 -8
  136. package/dist/components/SSplitter/README.md +17 -2
  137. package/dist/components/SSplitter/SSplitter.d.ts +7 -3
  138. package/dist/components/SStepper/README.md +26 -0
  139. package/dist/components/SSwitch/README.md +13 -1
  140. package/dist/components/SSwitch/SSwitch.d.ts +1 -3
  141. package/dist/components/SSystemActionButton/README.md +221 -0
  142. package/dist/components/SSystemActionButton/SSystemActionButton.d.ts +161 -0
  143. package/dist/components/SSystemActionButton/index.d.ts +2 -0
  144. package/dist/components/SSystemActionButton/systemActionButton.config.d.ts +93 -0
  145. package/dist/components/STable/README.md +94 -10
  146. package/dist/components/STable/STable.d.ts +130 -22
  147. package/dist/components/STable/index.d.ts +1 -1
  148. package/dist/components/STabs/README.md +13 -2
  149. package/dist/components/STabs/STabs.d.ts +3 -5
  150. package/dist/components/STabs/index.d.ts +1 -1
  151. package/dist/components/STabs/tabs.config.d.ts +3 -4
  152. package/dist/components/STag/README.md +52 -0
  153. package/dist/components/STag/STag.d.ts +3 -1
  154. package/dist/components/STextLink/README.md +19 -1
  155. package/dist/components/STextLink/STextLink.d.ts +5 -1
  156. package/dist/components/STextarea/README.md +4 -4
  157. package/dist/components/STextarea/STextarea.d.ts +10 -4
  158. package/dist/components/STimePicker/README.md +16 -2
  159. package/dist/components/STimePicker/STimePicker.d.ts +11 -5
  160. package/dist/components/STimePicker/timepicker.config.d.ts +4 -2
  161. package/dist/components/STimeRangePicker/README.md +28 -2
  162. package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +11 -5
  163. package/dist/components/SToast/README.md +25 -1
  164. package/dist/components/SToast/SToast.d.ts +2 -2
  165. package/dist/components/SToggle/README.md +8 -0
  166. package/dist/components/SToggle/index.d.ts +1 -1
  167. package/dist/components/STooltip/README.md +25 -1
  168. package/dist/components/STooltip/STooltip.d.ts +1 -1
  169. package/dist/components/STree/README.md +44 -3
  170. package/dist/components/STree/STree.d.ts +24 -4
  171. package/dist/components/STree/index.d.ts +1 -1
  172. package/dist/docs/Gallery.d.ts +9 -0
  173. package/dist/docs/gallery-previews.d.ts +24 -0
  174. package/dist/index.cjs +10890 -5322
  175. package/dist/index.cjs.map +1 -1
  176. package/dist/index.d.ts +8 -0
  177. package/dist/index.js +10852 -5322
  178. package/dist/index.js.map +1 -1
  179. package/dist/lib/doc-sections.d.ts +35 -0
  180. package/dist/lib/field-width.d.ts +31 -0
  181. package/dist/lib/floating-height.d.ts +15 -0
  182. package/dist/lib/story-docs.d.ts +19 -3
  183. package/dist/lib/truncated-value-tooltip.d.ts +18 -0
  184. package/dist/llms-full.txt +3396 -297
  185. package/dist/llms.txt +675 -97
  186. package/dist/playground/categories.d.ts +19 -0
  187. package/dist/styles.css +1731 -166
  188. package/dist/theme.css +216 -24
  189. package/eslint/index.mjs +14 -0
  190. package/eslint/lib/table-column.mjs +26 -0
  191. package/eslint/rules/divider-vertical-height.mjs +137 -0
  192. package/eslint/rules/field-width-grade.d.mts +41 -0
  193. package/eslint/rules/field-width-grade.mjs +311 -0
  194. package/eslint/rules/table-column-width.mjs +110 -0
  195. package/eslint/scale.gen.mjs +5 -2
  196. package/package.json +13 -1
@@ -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;
@@ -15,7 +15,7 @@
15
15
  | `position?` | `string` | `'50% 50%'` | 이미지 정렬 위치 (object-position) |
16
16
  | `loading?` | `'lazy' \| 'eager'` | `'lazy'` | 브라우저 로딩 방식 |
17
17
  | `loadingShowDelay?` | `number` | `0` | 스피너를 띄우기까지 기다리는 시간(ms). 이 시간 안에 로드되면 스피너를 아예 그리지 않는다 — 캐시된 이미지에서 스피너가 한 프레임 번쩍이는 것을 막는다. |
18
- | `noSpinner?` | `boolean` | `false` | 로딩 중에도 스피너를 그리지 않는다 |
18
+ | `showSpinner?` | `boolean` | `true` | 로딩 중 스피너를 그릴지. 끄면 `loadingSlot` 도 없을 때 로딩 표시가 아무것도 남지 않는다. |
19
19
  | `loadingSlot?` | `ReactNode` | — | 로딩 중 표시를 직접 지정한다 (기본: 스피너) |
20
20
  | `errorSlot?` | `ReactNode` | — | 실패·빈 상태 표시를 직접 지정한다 (기본: 빈 이미지 아이콘) |
21
21
  | `imgProps?` | `ImgHTMLAttributes<HTMLImageElement>` | — | 안쪽 `<img>` 로 넘길 네이티브 속성 (srcSet · sizes · crossOrigin · draggable 등) |
@@ -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
@@ -19,8 +19,8 @@ export interface SImageProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onLoa
19
19
  * 캐시된 이미지에서 스피너가 한 프레임 번쩍이는 것을 막는다.
20
20
  */
21
21
  loadingShowDelay?: number;
22
- /** 로딩 중에도 스피너를 그리지 않는다 */
23
- noSpinner?: boolean;
22
+ /** 로딩 중 스피너를 그릴지. 끄면 `loadingSlot` 도 없을 때 로딩 표시가 아무것도 남지 않는다. */
23
+ showSpinner?: boolean;
24
24
  /** 로딩 중 표시를 직접 지정한다 (기본: 스피너) */
25
25
  loadingSlot?: ReactNode;
26
26
  /** 실패·빈 상태 표시를 직접 지정한다 (기본: 빈 이미지 아이콘) */
@@ -18,9 +18,9 @@
18
18
  | `clearable?` | `boolean` | `false` | 지우기 버튼 |
19
19
  | `rules?` | `Rule[]` | — | 유효성 규칙 — blur 시 자동 검증 |
20
20
  | `status?` | `SFieldStatus` | — | 필드 상태 ('default' | 'pass' | 'error') |
21
- | `focused?` | `boolean` | — | 포커스 상태 (제어/반영) |
22
- | `hovered?` | `boolean` | — | 호버 상태 (제어/반영) |
23
- | `inputClass?` | `string` | — | 내부 input 요소 className |
21
+ | `focused?` | `boolean` | — | 포커스 상태를 밖에서 지정한다 — 강조 테두리·링이 즉시 걸린다 (SField 로 그대로 넘어간다) |
22
+ | `hovered?` | `boolean` | — | 호버 상태를 밖에서 지정한다 — 강조는 `focused` 와 같다 (SField 로 그대로 넘어간다) |
23
+ | `inputClassName?` | `string` | — | 내부 input 요소 className |
24
24
  | `inputStyle?` | `CSSProperties` | — | 내부 input 요소 style |
25
25
  | `label?` | `string` | — | |
26
26
  | `labelWidth?` | `number \| string` | — | |
@@ -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;
@@ -29,12 +30,12 @@ export interface SInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
29
30
  rules?: Rule[];
30
31
  /** 필드 상태 ('default' | 'pass' | 'error') */
31
32
  status?: SFieldStatus;
32
- /** 포커스 상태 (제어/반영) */
33
+ /** 포커스 상태를 밖에서 지정한다 — 강조 테두리·링이 즉시 걸린다 (SField 로 그대로 넘어간다) */
33
34
  focused?: boolean;
34
- /** 호버 상태 (제어/반영) */
35
+ /** 호버 상태를 밖에서 지정한다 — 강조는 `focused` 와 같다 (SField 로 그대로 넘어간다) */
35
36
  hovered?: boolean;
36
37
  /** 내부 input 요소 className */
37
- inputClass?: string;
38
+ inputClassName?: string;
38
39
  /** 내부 input 요소 style */
39
40
  inputStyle?: CSSProperties;
40
41
  label?: string;
@@ -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';
@@ -10,7 +10,7 @@
10
10
  |------|------|---------|-------------|
11
11
  | `type?` | `SLayoutType` | `'box'` | 메뉴 스타일: box(라운드) / belt(풀폭 행). 자식 SGnb 가 이 값을 따른다. |
12
12
  | `header?` | `SLayoutHeader` | `'fix'` | 레이아웃 구조: fix(가로 분할) / full(풀폭 상단바). 자식 SGnb·SPage 가 이 값을 따른다. |
13
- | `useRail?` | `boolean` | `false` | GNB 좌측 레일 사용 여부. 자식 SGnb 가 이 값을 따르고, 그만큼 넓어진 컬럼 폭을 되올린다. 레일에 children 없는 아이템이 있으면 SGnb 가 full 상단바를 요구하고, 이 레이아웃도 그에 맞춰 full 그리드로 선다. |
13
+ | `showRail?` | `boolean` | `false` | GNB 좌측 레일 사용 여부. 자식 SGnb 가 이 값을 따르고, 그만큼 넓어진 컬럼 폭을 되올린다. 레일에 children 없는 아이템이 있으면 SGnb 가 full 상단바를 요구하고, 이 레이아웃도 그에 맞춰 full 그리드로 선다. |
14
14
  | `folded?` | `boolean` | — | GNB 접힘 상태 (controlled) |
15
15
  | `defaultFolded?` | `boolean` | `false` | GNB 초기 접힘 상태 (uncontrolled) |
16
16
 
@@ -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
@@ -42,7 +42,7 @@ export interface SLayoutContextValue {
42
42
  */
43
43
  header: SLayoutHeader;
44
44
  /** GNB 좌측 레일 사용 여부 — 자식 SGnb 가 따른다 */
45
- useRail: boolean;
45
+ showRail: boolean;
46
46
  /** GNB 접힘 상태 */
47
47
  folded: boolean;
48
48
  /** 접힘 상태 변경 */
@@ -81,7 +81,7 @@ export interface SLayoutProps extends HTMLAttributes<HTMLDivElement> {
81
81
  * GNB 좌측 레일 사용 여부. 자식 SGnb 가 이 값을 따르고, 그만큼 넓어진 컬럼 폭을 되올린다.
82
82
  * 레일에 children 없는 아이템이 있으면 SGnb 가 full 상단바를 요구하고, 이 레이아웃도 그에 맞춰 full 그리드로 선다.
83
83
  */
84
- useRail?: boolean;
84
+ showRail?: boolean;
85
85
  /** GNB 접힘 상태 (controlled) */
86
86
  folded?: boolean;
87
87
  /** GNB 초기 접힘 상태 (uncontrolled) */
@@ -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';
@@ -9,9 +9,16 @@
9
9
  | Prop | Type | Default | Description |
10
10
  |------|------|---------|-------------|
11
11
  | `children?` | `ReactNode` | — | 리스트 컨테이너 내부에 렌더링할 내용 |
12
- | `useGap?` | `boolean` | `false` | 리스트 아이템 사이 gap 토큰 적용 여부 |
13
- | `usePadding?` | `boolean` | `false` | 리스트 컨테이너 padding 토큰 적용 여부 |
14
- | `separator?` | `boolean` | `false` | 아이템 하단 구분선 표시 여부. 테두리를 가진 아이템(`bordered`)에는 쓰지 않는다 |
12
+ | `gap?` | `boolean` | `false` | 리스트 아이템 사이 gap 토큰 적용 여부 |
13
+ | `padding?` | `SListPadding` | `'none'` | 컨테이너 안쪽 여백. 기본은 `none` — 목록이 담긴 면이 이미 여백을 쥔 경우가 많다. 목록이 배경 위에 직접 얹혀 스스로 여백을 쥐어야 할 때만 `default`. |
14
+
15
+ ## Types
16
+
17
+ ### SListPadding
18
+
19
+ ```ts
20
+ export type SListPadding = 'default' | 'none';
21
+ ```
15
22
 
16
23
  ## Dependencies
17
24
 
@@ -20,10 +27,15 @@
20
27
  - [SDraggableList](../SDraggableList)
21
28
  - [SExpansionList](../SExpansionList)
22
29
 
30
+ ### Depends on
31
+
32
+ - [SDivider](../SDivider)
33
+
23
34
  ### Graph
24
35
 
25
36
  ```mermaid
26
37
  graph TD;
38
+ SList --> SDivider
27
39
  SDraggableList --> SList
28
40
  SExpansionList --> SList
29
41
  style SList fill:#f9f,stroke:#333,stroke-width:4px
@@ -1,12 +1,14 @@
1
1
  import { type HTMLAttributes, type ReactNode } from 'react';
2
+ export type SListPadding = 'default' | 'none';
2
3
  export interface SListProps extends HTMLAttributes<HTMLDivElement> {
3
4
  /** 리스트 컨테이너 내부에 렌더링할 내용 */
4
5
  children?: ReactNode;
5
6
  /** 리스트 아이템 사이 gap 토큰 적용 여부 */
6
- useGap?: boolean;
7
- /** 리스트 컨테이너 padding 토큰 적용 여부 */
8
- usePadding?: boolean;
9
- /** 아이템 하단 구분선 표시 여부. 테두리를 가진 아이템(`bordered`)에는 쓰지 않는다 */
10
- separator?: boolean;
7
+ gap?: boolean;
8
+ /**
9
+ * 컨테이너 안쪽 여백. 기본은 `none` — 목록이 담긴 면이 이미 여백을 쥔 경우가 많다.
10
+ * 목록이 배경 위에 직접 얹혀 스스로 여백을 쥐어야 할 때만 `default`.
11
+ */
12
+ padding?: SListPadding;
11
13
  }
12
14
  export declare const SList: import("react").ForwardRefExoticComponent<SListProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- export { SList, type SListProps } from './SList';
1
+ export { SList, type SListPadding, type SListProps } from './SList';
@@ -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';
@@ -1,10 +1,26 @@
1
1
  /** 오버레이 뷰포트 — 스토어를 구독해 SLoadingContainer 를 렌더한다. 직접 배치도 가능. */
2
2
  export declare function SLoadingViewport(): import("react").JSX.Element;
3
3
  export declare const loading: {
4
- /** 로딩 오버레이 표시 (메시지 갱신도 동일 호출) */
4
+ /**
5
+ * 로딩 오버레이 표시. 겹쳐 부르면 그만큼 쌓이고 **마지막 하나가 걷힐 때** 닫힌다.
6
+ * 반환값은 이 호출 하나만 걷는 함수다(두 번 불러도 한 번만 걷힌다) — `hide()` 대신 이것을
7
+ * 쓰면 짝이 어긋나지 않는다.
8
+ *
9
+ * ⚠️ 메시지만 바꾸려면 `update()` 를 쓴다. `show()` 를 다시 부르면 하나 더 쌓여
10
+ * `hide()` 한 번으로는 닫히지 않는다.
11
+ */
5
12
  show(options?: {
6
13
  message?: string;
14
+ }): () => void;
15
+ /** 표시 중인 메시지 갱신 — 쌓인 수는 그대로다 */
16
+ update(options: {
17
+ message?: string;
7
18
  }): void;
8
- /** 로딩 오버레이 숨김 */
19
+ /** 가장 나중의 show 하나를 걷는다. 남은 것이 없을 때만 오버레이가 닫힌다 */
9
20
  hide(): void;
21
+ /**
22
+ * 쌓인 것을 모두 걷고 즉시 닫는다. 화면 전환·에러 복구처럼 진행 중이던 작업의 짝을 더는
23
+ * 맞출 수 없을 때만 쓴다 — 평소에는 `hide()` 나 `show()` 가 준 함수로 하나씩 걷는다.
24
+ */
25
+ hideAll(): void;
10
26
  };
@@ -10,10 +10,10 @@
10
10
  |------|------|---------|-------------|
11
11
  | `open?` | `boolean` | — | |
12
12
  | `persistent?` | `boolean` | — | 백드롭·ESC로 안 닫히고 흔들림 (sd-modal-container persistent). **기본값 true** |
13
- | `state?` | `LoadingModalState` | `'loading'` | 상태 (loading: 스피너, error: 경고 아이콘) |
13
+ | `state?` | `SLoadingModalState` | `'loading'` | 상태 (loading: 스피너, error: 경고 아이콘) |
14
14
  | `progress?` | `number` | — | 진행률 (0–100) — 지정 시 determinate 스피너 |
15
15
  | `message?` | `string \| string[]` | — | 메시지 (없으면 state 기본값) |
16
- | `useButton?` | `boolean` | `false` | 하단 버튼 표시 |
16
+ | `showButton?` | `boolean` | `false` | 하단 버튼 표시 |
17
17
  | `buttonLabel?` | `string` | — | 버튼 레이블 (없으면 state 기본값) |
18
18
  | `width?` | `number \| string` | `520` | |
19
19
  | `height?` | `number \| string` | `320` | |
@@ -26,6 +26,14 @@
26
26
  | `onClose` | `() => void` | 닫기(X) 버튼 클릭 (sdClose) — error 상태에서만 노출 |
27
27
  | `onButtonClick` | `() => void` | 버튼 클릭 (sdClick) |
28
28
 
29
+ ## Types
30
+
31
+ ### SLoadingModalState
32
+
33
+ ```ts
34
+ export type SLoadingModalState = 'loading' | 'error';
35
+ ```
36
+
29
37
  ## Dependencies
30
38
 
31
39
  ### Used by
@@ -1,4 +1,4 @@
1
- export type LoadingModalState = 'loading' | 'error';
1
+ export type SLoadingModalState = 'loading' | 'error';
2
2
  export interface SLoadingModalProps {
3
3
  open?: boolean;
4
4
  onOpenChange?: (open: boolean) => void;
@@ -7,13 +7,13 @@ export interface SLoadingModalProps {
7
7
  /** 백드롭·ESC로 안 닫히고 흔들림 (sd-modal-container persistent). **기본값 true** */
8
8
  persistent?: boolean;
9
9
  /** 상태 (loading: 스피너, error: 경고 아이콘) */
10
- state?: LoadingModalState;
10
+ state?: SLoadingModalState;
11
11
  /** 진행률 (0–100) — 지정 시 determinate 스피너 */
12
12
  progress?: number;
13
13
  /** 메시지 (없으면 state 기본값) */
14
14
  message?: string | string[];
15
15
  /** 하단 버튼 표시 */
16
- useButton?: boolean;
16
+ showButton?: boolean;
17
17
  /** 버튼 레이블 (없으면 state 기본값) */
18
18
  buttonLabel?: string;
19
19
  /** 버튼 클릭 (sdClick) */
@@ -22,4 +22,4 @@ export interface SLoadingModalProps {
22
22
  height?: number | string;
23
23
  }
24
24
  /** SLoadingModal — sd-loading-modal 포팅. state(loading/error) + progress + 옵션 버튼. */
25
- export declare function SLoadingModal({ open, onOpenChange, onClose, persistent, state, progress, message, useButton, buttonLabel, onButtonClick, width, height, }: SLoadingModalProps): import("react").JSX.Element;
25
+ export declare function SLoadingModal({ open, onOpenChange, onClose, persistent, state, progress, message, showButton, buttonLabel, onButtonClick, width, height, }: SLoadingModalProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- export { SLoadingModal, type SLoadingModalProps } from './SLoadingModal';
1
+ export { SLoadingModal, type SLoadingModalProps, type SLoadingModalState } from './SLoadingModal';
@@ -61,7 +61,7 @@ SModal.confirm({
61
61
  .onCancel(() => {});
62
62
  ```
63
63
 
64
- **옵션 (`SConfirmOptions`)** — 선언형 `SConfirmModalProps` 에서 제어 흐름 props(`open`/`onOpenChange`/`onOk`/`onCancel`/`onClose`)를 제외한 전부. 주요 키: `type`, `modalTitle`, `topMessage`/`bottomMessage`, `mainButtonLabel`/`mainButtonName`, `subButtonLabel`, `tagSlot`/`optionSlot`/`contentSlot`, `persistent`.
64
+ **옵션 (`SConfirmOptions`)** — 선언형 `SConfirmModalProps` 에서 제어 흐름 props(`open`/`onOpenChange`/`onOk`/`onCancel`/`onClose`)를 제외한 전부. 주요 키: `type`, `modalTitle`, `topMessage`/`bottomMessage`, `mainButtonLabel`/`mainButtonOutline`, `subButtonLabel`, `tagSlot`/`optionSlot`/`contentSlot`, `persistent`.
65
65
 
66
66
  ---
67
67