sellmate-design-system-react 3.0.0 → 3.2.0

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 (78) hide show
  1. package/AGENTS.md +695 -0
  2. package/README.md +106 -0
  3. package/bin/sellmate-ds.mjs +337 -0
  4. package/dist/components/SActionModal/README.md +41 -0
  5. package/dist/components/SBadge/README.md +25 -0
  6. package/dist/components/SBarcodeInput/README.md +64 -0
  7. package/dist/components/SButton/README.md +49 -0
  8. package/dist/components/SCalendar/README.md +42 -0
  9. package/dist/components/SCallout/README.md +29 -0
  10. package/dist/components/SCard/README.md +12 -0
  11. package/dist/components/SCheckbox/README.md +44 -0
  12. package/dist/components/SChip/README.md +57 -0
  13. package/dist/components/SChipInput/README.md +77 -0
  14. package/dist/components/SCircleProgress/README.md +35 -0
  15. package/dist/components/SConfirmModal/README.md +61 -0
  16. package/dist/components/SDatePicker/README.md +62 -0
  17. package/dist/components/SDateRangePicker/README.md +64 -0
  18. package/dist/components/SDivider/README.md +25 -0
  19. package/dist/components/SDraggableItem/README.md +40 -0
  20. package/dist/components/SDropdownButton/README.md +50 -0
  21. package/dist/components/SExpansionItem/README.md +40 -0
  22. package/dist/components/SField/README.md +91 -0
  23. package/dist/components/SFilePicker/README.md +72 -0
  24. package/dist/components/SForm/README.md +31 -0
  25. package/dist/components/SGhostButton/README.md +76 -0
  26. package/dist/components/SGnb/README.md +56 -0
  27. package/dist/components/SGuide/README.md +34 -0
  28. package/dist/components/SIcon/README.md +91 -0
  29. package/dist/components/SInput/README.md +66 -0
  30. package/dist/components/SKeyValueTable/README.md +59 -0
  31. package/dist/components/SLayout/README.md +42 -0
  32. package/dist/components/SLinearProgress/README.md +17 -0
  33. package/dist/components/SList/README.md +14 -0
  34. package/dist/components/SListItem/README.md +19 -0
  35. package/dist/components/SLoadingContainer/README.md +29 -0
  36. package/dist/components/SLoadingModal/README.md +52 -0
  37. package/dist/components/SModal/README.md +192 -0
  38. package/dist/components/SModalContainer/README.md +49 -0
  39. package/dist/components/SNumberInput/README.md +74 -0
  40. package/dist/components/SPage/README.md +25 -0
  41. package/dist/components/SPagination/README.md +40 -0
  42. package/dist/components/SPopover/README.md +54 -0
  43. package/dist/components/SPopup/README.md +38 -0
  44. package/dist/components/SPortal/README.md +51 -0
  45. package/dist/components/SRadio/README.md +57 -0
  46. package/dist/components/SRadioButton/README.md +24 -0
  47. package/dist/components/SScrollArea/README.md +16 -0
  48. package/dist/components/SSectionHeaderCard/README.md +51 -0
  49. package/dist/components/SSelect/README.md +79 -0
  50. package/dist/components/SStepper/README.md +30 -0
  51. package/dist/components/SSwitch/README.md +24 -0
  52. package/dist/components/STable/README.md +82 -0
  53. package/dist/components/STableBar/README.md +28 -0
  54. package/dist/components/STabs/README.md +37 -0
  55. package/dist/components/STag/README.md +44 -0
  56. package/dist/components/STextLink/README.md +48 -0
  57. package/dist/components/STextarea/README.md +60 -0
  58. package/dist/components/STimePicker/README.md +65 -0
  59. package/dist/components/STimeRangePicker/README.md +63 -0
  60. package/dist/components/SToast/README.md +70 -0
  61. package/dist/components/SToggle/README.md +22 -0
  62. package/dist/components/STooltip/README.md +57 -0
  63. package/dist/llms-full.txt +3530 -0
  64. package/dist/llms.txt +882 -0
  65. package/dist/styles.css +221 -0
  66. package/dist/theme.css +8 -0
  67. package/eslint/index.mjs +69 -0
  68. package/eslint/lib/class-names.mjs +119 -0
  69. package/eslint/lib/table-column.mjs +53 -0
  70. package/eslint/rules/component-group-gap.mjs +186 -0
  71. package/eslint/rules/no-arbitrary-class.mjs +91 -0
  72. package/eslint/rules/no-off-scale-spacing.mjs +67 -0
  73. package/eslint/rules/no-raw-html-control.mjs +117 -0
  74. package/eslint/rules/prefer-typo-preset.mjs +73 -0
  75. package/eslint/rules/require-locale-number.mjs +78 -0
  76. package/eslint/rules/table-numeric-align.mjs +93 -0
  77. package/eslint/scale.gen.mjs +16 -0
  78. package/package.json +15 -4
@@ -0,0 +1,24 @@
1
+ # SRadioButton
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SRadioButton
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `options?` | `SRadioButtonOption[]` | `[]` | 옵션 목록 |
12
+ | `value?` | `string \| number \| null` | — | 현재 선택 값 |
13
+ | `size?` | `SRadioButtonSize` | `'sm'` | 크기 |
14
+ | `disabled?` | `boolean` | `false` | 전체 비활성 |
15
+ | `name?` | `string` | — | input name 속성 |
16
+ | `className?` | `string` | — | |
17
+ | `style?` | `CSSProperties` | — | |
18
+
19
+ #### Events
20
+
21
+ | Event | Type | Description |
22
+ |-------|------|-------------|
23
+ | `onValueChange` | `(value: string \| number) => void` | 변경 (sdUpdate) |
24
+
@@ -0,0 +1,16 @@
1
+ # SScrollArea
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SScrollArea
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `axis?` | `SScrollAreaAxis` | `'both'` | 스크롤 방향. vertical=세로만, horizontal=가로만, both=양방향 |
12
+ | `background?` | `boolean` | `false` | true면 스크롤바 트랙 배경을 채운다. 콘텐츠 영역 배경은 바뀌지 않는다. |
13
+ | `bordered?` | `boolean` | `false` | true면 스크롤바와 콘텐츠 사이에 1px 구분선을 그린다. 컨테이너 테두리가 아니다. |
14
+ | `maxHeight?` | `string` | — | viewport 최대 높이 (예: '400px'). 비우면 부모 크기를 따른다. |
15
+ | `maxWidth?` | `string` | — | viewport 최대 너비 (예: '480px'). 비우면 부모 크기를 따른다. |
16
+
@@ -0,0 +1,51 @@
1
+ # SSectionHeaderCard
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SSectionHeaderCardBody
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `children?` | `SSectionHeaderCardBodyChildren` | — | 바디 슬롯. 특정 컴포넌트 타입으로 제한하지 않습니다. |
12
+
13
+ ### SSectionHeaderCardHeader
14
+
15
+ #### Props
16
+
17
+ | Prop | Type | Default | Description |
18
+ |------|------|---------|-------------|
19
+ | `title` | `ReactNode` | — | 헤더 제목 |
20
+ | `marker?` | `boolean` | `false` | 제목 앞 점 표시 여부 |
21
+ | `required?` | `boolean` | `false` | 제목 뒤 필수 별 표시 여부 |
22
+ | `helpText?` | `string[]` | — | 도움말 툴팁 메시지 |
23
+ | `subtitle?` | `ReactNode` | — | 부제 |
24
+ | `slot?` | `ReactNode` | — | 헤더 우측 슬롯 |
25
+ | `thickness?` | `SSectionHeaderCardThickness` | `false` | 상단 border 색상 타입. false면 표시하지 않습니다. |
26
+
27
+ ### SSectionHeaderCard
28
+
29
+ #### Props
30
+
31
+ | Prop | Type | Default | Description |
32
+ |------|------|---------|-------------|
33
+ | `children?` | `SSectionHeaderCardChildren` | — | SSectionHeaderCard 슬롯. 특정 컴포넌트 타입으로 제한하지 않습니다. |
34
+
35
+ ## Dependencies
36
+
37
+ ### Depends on
38
+
39
+ - [SBadge](../SBadge)
40
+ - [SIcon](../SIcon)
41
+ - [STooltip](../STooltip)
42
+
43
+ ### Graph
44
+
45
+ ```mermaid
46
+ graph TD;
47
+ SSectionHeaderCard --> SBadge
48
+ SSectionHeaderCard --> SIcon
49
+ SSectionHeaderCard --> STooltip
50
+ style SSectionHeaderCard fill:#f9f,stroke:#333,stroke-width:4px
51
+ ```
@@ -0,0 +1,79 @@
1
+ # SSelect
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SSelect
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `value?` | `(string \| number \| SSelectOption) \| (string \| number \| SSelectOption)[] \| null` | — | 선택 값. multi 타입이면 배열. emitValue=false(기본) 라운드트립을 위해 SSelectOption 객체도 허용 |
12
+ | `emitValue?` | `boolean` | `false` | true면 SSelectOption 대신 원시값(string|number) 방출 |
13
+ | `name?` | `string` | — | 폼 연동용 name 속성 |
14
+ | `options?` | `SSelectOption[]` | `[]` | 옵션 목록 (children으로 계층 표현) |
15
+ | `type?` | `SSelectType` | `'default'` | 타입: default | multi | default_depth | multi_depth |
16
+ | `useSearch?` | `boolean` | `false` | 검색 입력 사용 |
17
+ | `useSelectAll?` | `boolean` | `false` | 전체선택 옵션 사용 (multi 전용) |
18
+ | `allSelectedLabel?` | `string` | `'전체'` | 전체선택 레이블 |
19
+ | `placeholder?` | `string` | `'선택'` | placeholder |
20
+ | `disabled?` | `boolean` | `false` | 비활성 |
21
+ | `error?` | `boolean` | `false` | 에러 상태 |
22
+ | `rules?` | `Rule[]` | — | 유효성 규칙 — 닫힐 때 자동 검증 |
23
+ | `labelTooltipProps?` | `Partial<STooltipProps>` | — | 레이블 툴팁 상세 옵션 |
24
+ | `dropdownHeight?` | `string` | `'260px'` | 드롭다운 최대 높이 |
25
+ | `dropdownWidth?` | `string` | — | 드롭다운 너비 (없으면 트리거 너비) |
26
+ | `maxDropdownWidth?` | `string` | `'640px'` | 드롭다운 최대 너비 |
27
+ | `label?` | `string` | — | |
28
+ | `labelWidth?` | `number \| string` | — | |
29
+ | `icon?` | `SIconName` | — | 레이블 영역 아이콘 |
30
+ | `iconColor?` | `SColor` | — | |
31
+ | `labelTooltip?` | `string` | — | 레이블 툴팁 텍스트 |
32
+ | `addonLabel?` | `string` | — | 우측 어드온 레이블 |
33
+ | `addonAlign?` | `SFieldAddonAlign` | — | 어드온 정렬 |
34
+ | `hint?` | `string` | — | |
35
+ | `errorMessage?` | `string` | — | |
36
+ | `width?` | `number \| string` | — | |
37
+ | `className?` | `string` | — | |
38
+ | `style?` | `CSSProperties` | — | |
39
+
40
+ #### Events
41
+
42
+ | Event | Type | Description |
43
+ |-------|------|-------------|
44
+ | `onValueChange` | `(value: any) => void` | 값 변경 (sdUpdate). emitValue=false(기본)면 SSelectOption(들), true면 원시값 |
45
+ | `onOpenChange` | `(open: boolean) => void` | 열림/닫힘 변경 (sdDropDownShow) |
46
+
47
+ #### Methods (ref)
48
+
49
+ | Method | Type | Description |
50
+ |--------|------|-------------|
51
+ | `focus` | `() => void` | 트리거 버튼에 포커스 (sdFocus) |
52
+ | `open` | `() => void` | 드롭다운 열기 (sdOpen) |
53
+
54
+ ## Dependencies
55
+
56
+ ### Used by
57
+
58
+ - [SKeyValueTable](../SKeyValueTable)
59
+ - [STable](../STable)
60
+
61
+ ### Depends on
62
+
63
+ - [SField](../SField)
64
+ - [SGhostButton](../SGhostButton)
65
+ - [SIcon](../SIcon)
66
+ - [SPortal](../SPortal)
67
+
68
+ ### Graph
69
+
70
+ ```mermaid
71
+ graph TD;
72
+ SSelect --> SField
73
+ SSelect --> SGhostButton
74
+ SSelect --> SIcon
75
+ SSelect --> SPortal
76
+ SKeyValueTable --> SSelect
77
+ STable --> SSelect
78
+ style SSelect fill:#f9f,stroke:#333,stroke-width:4px
79
+ ```
@@ -0,0 +1,30 @@
1
+ # SStepper
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SStepper
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `items` | `SStepperItem[]` | — | 단계 목록 |
12
+ | `value?` | `string` | — | 현재 활성 단계 value |
13
+ | `size?` | `SStepperSize` | `'sm'` | 크기 |
14
+ | `ariaLabel?` | `string` | `'진행 단계'` | 접근성 레이블 |
15
+ | `className?` | `string` | — | |
16
+ | `style?` | `CSSProperties` | — | |
17
+
18
+ ## Dependencies
19
+
20
+ ### Depends on
21
+
22
+ - [SIcon](../SIcon)
23
+
24
+ ### Graph
25
+
26
+ ```mermaid
27
+ graph TD;
28
+ SStepper --> SIcon
29
+ style SStepper fill:#f9f,stroke:#333,stroke-width:4px
30
+ ```
@@ -0,0 +1,24 @@
1
+ # SSwitch
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SSwitch
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `value?` | `boolean` | `false` | on/off 상태 |
12
+ | `leftLabel?` | `string` | — | 스위치 좌측 라벨 |
13
+ | `rightLabel?` | `string` | — | 스위치 우측 라벨 |
14
+ | `label?` | `string` | — | |
15
+ | `disabled?` | `boolean` | `false` | 비활성 |
16
+ | `className?` | `string` | — | |
17
+ | `style?` | `CSSProperties` | — | |
18
+
19
+ #### Events
20
+
21
+ | Event | Type | Description |
22
+ |-------|------|-------------|
23
+ | `onValueChange` | `(value: boolean) => void` | 변경 (sdUpdate) |
24
+
@@ -0,0 +1,82 @@
1
+ # STable
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### STable
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `columns?` | `STableColumn[]` | `[]` | |
12
+ | `rows?` | `SRow[]` | `[]` | |
13
+ | `rowKey?` | `string` | `'id'` | 행 식별 필드 |
14
+ | `selectable?` | `boolean` | `false` | 행 선택 체크박스 |
15
+ | `selected?` | `SRow[]` | `[]` | |
16
+ | `resizable?` | `boolean` | `false` | 컬럼 너비 조절 |
17
+ | `width?` | `string` | — | |
18
+ | `height?` | `string` | — | |
19
+ | `stickyHeader?` | `boolean` | — | |
20
+ | `stickyColumn?` | `STableStickyColumn` | — | 고정할 좌/우 컬럼 수 |
21
+ | `radius?` | `'default' \| 'useTop' \| 'full'` | `'default'` | border-radius 제어 |
22
+ | `noDataLabel?` | `string` | `'데이터가 없습니다.'` | |
23
+ | `noDataSlot?` | `ReactNode` | — | 데이터가 없을 때 body 영역 전체를 대체하는 슬롯. 지정하면 `noDataLabel` 대신 이 콘텐츠가 헤더 아래 영역을 채우며, 버튼 등 인터랙션도 동작한다. |
24
+ | `isLoading?` | `boolean` | `false` | |
25
+ | `dense?` | `boolean` | `false` | |
26
+ | `noHover?` | `boolean` | `false` | true면 행에 마우스를 올려도 hover 배경(grey_05)을 표시하지 않는다 |
27
+ | `pagination?` | `STablePagination` | — | 페이지네이션 (있으면 하단 표시) |
28
+ | `useInternalPagination?` | `boolean` | `false` | 테이블 내부에서 페이지네이션을 직접 관리 (rows를 내부 슬라이싱) |
29
+ | `useRowsPerPageSelect?` | `boolean` | `false` | 페이지당 행 수 셀렉트 표시 |
30
+ | `rowsPerPageOption?` | `SSelectOption[]` | `DEFAULT_ROWS_PER_PAGE_OPTION` | |
31
+ | `useVirtualScroll?` | `boolean` | `false` | 가상 스크롤 |
32
+ | `rowHeight?` | `number` | — | |
33
+ | `virtualBuffer?` | `number` | `5` | |
34
+ | `virtualEndThreshold?` | `number` | `10` | |
35
+ | `tableId?` | `string` | — | 테이블 식별자 (없으면 자동 생성) |
36
+ | `className?` | `string` | — | |
37
+ | `style?` | `CSSProperties` | — | |
38
+
39
+ #### Events
40
+
41
+ | Event | Type | Description |
42
+ |-------|------|-------------|
43
+ | `onSelectedChange` | `(rows: SRow[]) => void` | |
44
+ | `onPageChange` | `(page: number) => void` | |
45
+ | `onRowsPerPageChange` | `(perPage: number) => void` | |
46
+ | `onVirtualUpdate` | `(range: { from: number; to: number }) => void` | |
47
+ | `onVirtualReachEnd` | `(info: { from: number; to: number; rowCount: number; threshold: number; }) =>…` | |
48
+ | `onRowClick` | `(row: SRow) => void` | 행 클릭 |
49
+
50
+ #### Methods (ref)
51
+
52
+ | Method | Type | Description |
53
+ |--------|------|-------------|
54
+ | `isRowSelected` | `(row: SRow) => boolean` | 행 선택 여부 |
55
+ | `getIsAllChecked` | `(rows: SRow[]) => boolean \| null` | 주어진 행들의 전체 선택 상태 (true/false/null=indeterminate) |
56
+ | `getPaginationInfo` | `<union 2종>` | 내부 페이지네이션 정보 (useInternalPagination 아니면 null) |
57
+ | `getStickyStyle` | `(colIdx: number) => CSSProperties` | 컬럼 sticky 스타일 (CSS 변수 + 고정폭) |
58
+ | `setRowCount` | `(count: number) => void` | 가상 스크롤 총 행 수 설정 |
59
+ | `updateRowSelect` | `(row: SRow) => void` | 단일 행 선택 토글 (sd-table updateRowSelect) — onSelectedChange 발생 |
60
+ | `toggleSelectAll` | `(checked: boolean, rows: SRow[]) => void` | 주어진 행들 전체 선택/해제 (sd-table toggleSelectAll) — onSelectedChange 발생 |
61
+
62
+ ## Dependencies
63
+
64
+ ### Depends on
65
+
66
+ - [SCheckbox](../SCheckbox)
67
+ - [SCircleProgress](../SCircleProgress)
68
+ - [SIcon](../SIcon)
69
+ - [SPagination](../SPagination)
70
+ - [SSelect](../SSelect)
71
+
72
+ ### Graph
73
+
74
+ ```mermaid
75
+ graph TD;
76
+ STable --> SCheckbox
77
+ STable --> SCircleProgress
78
+ STable --> SIcon
79
+ STable --> SPagination
80
+ STable --> SSelect
81
+ style STable fill:#f9f,stroke:#333,stroke-width:4px
82
+ ```
@@ -0,0 +1,28 @@
1
+ # STableBar
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### STableBar
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `total?` | `number` | — | 전체 건수. 지정하면 "총 N 건" 을 표시한다 (천단위 구분 자동) |
12
+ | `selected?` | `number` | — | 선택 건수. 지정하면 "N건 선택" 을 표시한다 |
13
+ | `actions?` | `ReactNode` | — | 구분선 오른쪽 좌측 액션 영역 |
14
+ | `rightActions?` | `ReactNode` | — | 우측 정렬 액션 영역 |
15
+
16
+ ## Dependencies
17
+
18
+ ### Depends on
19
+
20
+ - [SDivider](../SDivider)
21
+
22
+ ### Graph
23
+
24
+ ```mermaid
25
+ graph TD;
26
+ STableBar --> SDivider
27
+ style STableBar fill:#f9f,stroke:#333,stroke-width:4px
28
+ ```
@@ -0,0 +1,37 @@
1
+ # STabs
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### STabs
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `value` | `string` | — | 현재 선택된 탭 value |
12
+ | `tabs` | `STabOption[]` | — | 탭 옵션 목록 |
13
+ | `size?` | `STabSize` | `'md'` | 탭 크기 (main 전용) |
14
+ | `isSub?` | `boolean` | `false` | 서브 탭(밑줄형) 스타일 |
15
+ | `vertical?` | `boolean` | `false` | 세로 배치 (sub 전용 — main 폴더형은 항상 가로) |
16
+ | `className?` | `string` | — | |
17
+ | `style?` | `CSSProperties` | — | |
18
+
19
+ #### Events
20
+
21
+ | Event | Type | Description |
22
+ |-------|------|-------------|
23
+ | `onValueChange` | `(value: string) => void` | 탭 변경 (sdUpdate) |
24
+
25
+ ## Dependencies
26
+
27
+ ### Depends on
28
+
29
+ - [STag](../STag)
30
+
31
+ ### Graph
32
+
33
+ ```mermaid
34
+ graph TD;
35
+ STabs --> STag
36
+ style STabs fill:#f9f,stroke:#333,stroke-width:4px
37
+ ```
@@ -0,0 +1,44 @@
1
+ # STag
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### STag
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `shape?` | `STagShape` | `'square'` | 모양 |
12
+ | `size?` | `STagSize` | `'sm'` | 크기 |
13
+ | `color?` | `STagColor` | `'grey'` | 색상 |
14
+ | `label?` | `string` | `''` | 레이블 텍스트 |
15
+ | `icon?` | `SIconName` | — | 아이콘명 |
16
+ | `iconLeft?` | `boolean` | `true` | 아이콘을 레이블 왼쪽에 배치 |
17
+ | `width?` | `string \| number` | — | 태그 너비 (숫자면 px, 문자열이면 그대로 적용). 미지정 시 콘텐츠 크기 |
18
+
19
+ ## Dependencies
20
+
21
+ ### Used by
22
+
23
+ - [SConfirmModal](../SConfirmModal)
24
+ - [SGhostButton](../SGhostButton)
25
+ - [SGnb](../SGnb)
26
+ - [STabs](../STabs)
27
+ - [STextLink](../STextLink)
28
+
29
+ ### Depends on
30
+
31
+ - [SIcon](../SIcon)
32
+
33
+ ### Graph
34
+
35
+ ```mermaid
36
+ graph TD;
37
+ STag --> SIcon
38
+ SConfirmModal --> STag
39
+ SGhostButton --> STag
40
+ SGnb --> STag
41
+ STabs --> STag
42
+ STextLink --> STag
43
+ style STag fill:#f9f,stroke:#333,stroke-width:4px
44
+ ```
@@ -0,0 +1,48 @@
1
+ # STextLink
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### STextLink
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `label?` | `string` | `''` | 레이블 |
12
+ | `icon?` | `SIconName` | — | 좌측 아이콘 |
13
+ | `iconColor?` | `SColor` | — | 좌측 아이콘 색상. 팔레트 키(`grey_65`, `red_95` …) 또는 임의 CSS 색상 |
14
+ | `labelClass?` | `string` | — | 레이블 span에 추가할 클래스 |
15
+ | `rightArrow?` | `STextLinkArrow` | `'none'` | 우측 화살표 |
16
+ | `underline?` | `boolean` | `false` | 밑줄 여부 |
17
+ | `disabled?` | `boolean` | `false` | 비활성 |
18
+ | `size?` | `STextLinkSize` | `'sm'` | 크기 |
19
+ | `tooltipText?` | `string` | — | 호버 시 표시할 툴팁 텍스트 (회색 STag 스타일) |
20
+
21
+ #### Events
22
+
23
+ | Event | Type | Description |
24
+ |-------|------|-------------|
25
+ | `onClick` | `() => void` | |
26
+
27
+ ## Dependencies
28
+
29
+ ### Used by
30
+
31
+ - [SChipInput](../SChipInput)
32
+ - [SPopover](../SPopover)
33
+
34
+ ### Depends on
35
+
36
+ - [SIcon](../SIcon)
37
+ - [STag](../STag)
38
+
39
+ ### Graph
40
+
41
+ ```mermaid
42
+ graph TD;
43
+ STextLink --> SIcon
44
+ STextLink --> STag
45
+ SChipInput --> STextLink
46
+ SPopover --> STextLink
47
+ style STextLink fill:#f9f,stroke:#333,stroke-width:4px
48
+ ```
@@ -0,0 +1,60 @@
1
+ # STextarea
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### STextarea
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `value?` | `string` | — | 값 (제어) |
12
+ | `rows?` | `number` | `3` | 행 수 |
13
+ | `rules?` | `Rule[]` | — | 유효성 규칙 — blur 시 자동 검증 |
14
+ | `status?` | `SFieldStatus` | — | 필드 상태 ('default' | 'pass' | 'error') |
15
+ | `focused?` | `boolean` | — | 포커스 상태 (제어/반영) |
16
+ | `hovered?` | `boolean` | — | 호버 상태 (제어/반영) |
17
+ | `textareaClass?` | `string` | — | 내부 textarea 요소 className |
18
+ | `textareaStyle?` | `CSSProperties` | — | 내부 textarea 요소 style |
19
+ | `label?` | `string` | — | |
20
+ | `labelWidth?` | `number \| string` | — | |
21
+ | `icon?` | `SIconName` | — | 레이블 영역 아이콘 |
22
+ | `iconColor?` | `SColor` | — | |
23
+ | `labelTooltip?` | `string` | — | 레이블 툴팁 텍스트 |
24
+ | `labelTooltipProps?` | `Partial<STooltipProps>` | — | 레이블 툴팁 상세 옵션 |
25
+ | `addonLabel?` | `string` | — | 우측 어드온 레이블 |
26
+ | `addonAlign?` | `SFieldAddonAlign` | — | 어드온 정렬 |
27
+ | `hint?` | `string` | — | |
28
+ | `error?` | `boolean` | — | |
29
+ | `errorMessage?` | `string` | — | |
30
+ | `width?` | `number \| string` | — | |
31
+ | `disabled?` | `boolean` | `false` | |
32
+ | `readOnly?` | `boolean` | `false` | |
33
+ | `className?` | `string` | — | |
34
+ | `style?` | `CSSProperties` | — | |
35
+
36
+ #### Events
37
+
38
+ | Event | Type | Description |
39
+ |-------|------|-------------|
40
+ | `onValueChange` | `(value: string) => void` | 값 변경 (sdUpdate) |
41
+ | `onChange` | `TextareaHTMLAttributes<HTMLTextAreaElement>['onChange']` | 네이티브 onChange (form-agnostic) |
42
+
43
+ ## Dependencies
44
+
45
+ ### Used by
46
+
47
+ - [SKeyValueTable](../SKeyValueTable)
48
+
49
+ ### Depends on
50
+
51
+ - [SField](../SField)
52
+
53
+ ### Graph
54
+
55
+ ```mermaid
56
+ graph TD;
57
+ STextarea --> SField
58
+ SKeyValueTable --> STextarea
59
+ style STextarea fill:#f9f,stroke:#333,stroke-width:4px
60
+ ```
@@ -0,0 +1,65 @@
1
+ # STimePicker
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### STimePicker
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `value?` | `string \| null` | — | 선택 시간 (HH:mm) |
12
+ | `type?` | `STimePickerType` | `'default'` | 표시 타입: default(24시간) / midday(오전·오후) |
13
+ | `size?` | `STimePickerSize` | `'sm'` | |
14
+ | `placeholder?` | `string` | `'00:00'` | |
15
+ | `disabled?` | `boolean` | `false` | |
16
+ | `clearable?` | `boolean` | `false` | |
17
+ | `useMeridiem?` | `boolean` | — | 오전/오후 선택 표시 여부. 지정하지 않으면 type="midday"일 때만 켜집니다. |
18
+ | `minuteStep?` | `number` | `1` | |
19
+ | `width?` | `number \| string` | — | |
20
+ | `name?` | `string` | — | |
21
+ | `rules?` | `Rule[]` | — | |
22
+ | `status?` | `SFieldStatus` | — | |
23
+ | `label?` | `string` | — | |
24
+ | `labelWidth?` | `number \| string` | — | |
25
+ | `icon?` | `SIconName` | — | |
26
+ | `iconColor?` | `SColor` | — | |
27
+ | `labelTooltip?` | `string` | — | |
28
+ | `labelTooltipProps?` | `Partial<STooltipProps>` | — | |
29
+ | `addonLabel?` | `string` | — | |
30
+ | `addonAlign?` | `SFieldAddonAlign` | — | |
31
+ | `hint?` | `string` | — | |
32
+ | `error?` | `boolean` | — | |
33
+ | `errorMessage?` | `string` | — | |
34
+ | `className?` | `string` | — | |
35
+ | `style?` | `CSSProperties` | — | |
36
+
37
+ #### Events
38
+
39
+ | Event | Type | Description |
40
+ |-------|------|-------------|
41
+ | `onValueChange` | `(time: string \| null) => void` | 선택 변경 (sdUpdate) |
42
+ | `onOpenChange` | `(open: boolean) => void` | 열림/닫힘 변경 (sdDropDownShow) |
43
+
44
+ ## Dependencies
45
+
46
+ ### Used by
47
+
48
+ - [STimeRangePicker](../STimeRangePicker)
49
+
50
+ ### Depends on
51
+
52
+ - [SField](../SField)
53
+ - [SGhostButton](../SGhostButton)
54
+ - [SIcon](../SIcon)
55
+
56
+ ### Graph
57
+
58
+ ```mermaid
59
+ graph TD;
60
+ STimePicker --> SField
61
+ STimePicker --> SGhostButton
62
+ STimePicker --> SIcon
63
+ STimeRangePicker --> STimePicker
64
+ style STimePicker fill:#f9f,stroke:#333,stroke-width:4px
65
+ ```
@@ -0,0 +1,63 @@
1
+ # STimeRangePicker
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### STimeRangePicker
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `value?` | `STimeRangeValue` | — | 선택 시간 범위 [시작, 종료] (HH:mm) |
12
+ | `type?` | `STimeRangePickerType` | `'default'` | 표시 타입: default(24시간) / midday(오전·오후) |
13
+ | `size?` | `STimeRangePickerSize` | `'sm'` | |
14
+ | `placeholder?` | `string` | `'00:00 ~ 23:59'` | |
15
+ | `disabled?` | `boolean` | `false` | |
16
+ | `clearable?` | `boolean` | `false` | |
17
+ | `useMeridiem?` | `boolean` | — | 오전/오후 선택 표시 여부. 지정하지 않으면 type="midday"일 때만 켜집니다. |
18
+ | `minuteStep?` | `number` | `1` | |
19
+ | `rangeOrder?` | `STimeRangePickerRangeOrder` | `'strict'` | 범위 순서 정책. strict는 시작 시간이 종료 시간보다 늦어지지 않도록 보정합니다. |
20
+ | `width?` | `number \| string` | — | |
21
+ | `name?` | `string` | — | |
22
+ | `rules?` | `Rule[]` | — | |
23
+ | `status?` | `SFieldStatus` | — | |
24
+ | `label?` | `string` | — | |
25
+ | `labelWidth?` | `number \| string` | — | |
26
+ | `icon?` | `SIconName` | — | |
27
+ | `iconColor?` | `SColor` | — | |
28
+ | `labelTooltip?` | `string` | — | |
29
+ | `labelTooltipProps?` | `Partial<STooltipProps>` | — | |
30
+ | `addonLabel?` | `string` | — | |
31
+ | `addonAlign?` | `SFieldAddonAlign` | — | |
32
+ | `hint?` | `string` | — | |
33
+ | `error?` | `boolean` | — | |
34
+ | `errorMessage?` | `string` | — | |
35
+ | `className?` | `string` | — | |
36
+ | `style?` | `CSSProperties` | — | |
37
+
38
+ #### Events
39
+
40
+ | Event | Type | Description |
41
+ |-------|------|-------------|
42
+ | `onValueChange` | `(range: STimeRangeValue) => void` | 선택 변경 (sdUpdate) |
43
+ | `onOpenChange` | `(open: boolean) => void` | 열림/닫힘 변경 (sdDropDownShow) |
44
+
45
+ ## Dependencies
46
+
47
+ ### Depends on
48
+
49
+ - [SField](../SField)
50
+ - [SGhostButton](../SGhostButton)
51
+ - [SIcon](../SIcon)
52
+ - [STimePicker](../STimePicker)
53
+
54
+ ### Graph
55
+
56
+ ```mermaid
57
+ graph TD;
58
+ STimeRangePicker --> SField
59
+ STimeRangePicker --> SGhostButton
60
+ STimeRangePicker --> SIcon
61
+ STimeRangePicker --> STimePicker
62
+ style STimeRangePicker fill:#f9f,stroke:#333,stroke-width:4px
63
+ ```