sellmate-design-system-react 9.0.0-beta.0 → 9.0.0-beta.2

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.
@@ -40,7 +40,7 @@
40
40
  | **표·목록** | `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SListItem` `SExpansionList` `SDraggableList` `SDraggableItem` `STree` |
41
41
  | **레이아웃** | `SLayout` `SGnb` `SPage`(제목 영역은 `header` prop) `SSectionHeaderCard` `SCard` `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
42
42
  | **내비게이션** | `STabs` `SPagination` `SStepper` |
43
- | **표시·상태** | `STag` `SBadge` `SIcon` `SCallout` `SGuide` |
43
+ | **표시·상태** | `STag` `SBadge` `SIcon` `SImage` `SCallout` `SGuide` |
44
44
  | **진행·로딩** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
45
45
  | **오버레이** | `STooltip` `SPopover` `SPopup` `SDrawer` `SPortal` |
46
46
  | **모달** | `SModal.confirm()` `SModal.create()` + `SActionModal` `SConfirmModal` `SModalOutlet`(앱 루트 1회) |
@@ -146,7 +146,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
146
146
  | --- | --- | --- |
147
147
  | **셸** | 앱 전체 뼈대. 페이지가 바뀌어도 남는다 | `SLayout` `SGnb` `SPage`(제목 영역은 `header` prop) |
148
148
  | **블록** | `SPage` 의 직계 자식. 페이지를 세로로 쌓는 단위 | `SSectionHeaderCard` `SCard` `SForm` `SSplitter` `SScrollArea` `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SExpansionList` `SDraggableList` `STree` `SCallout` `STabs` `SStepper` `SPagination` `SDivider` |
149
- | **요소** | 블록 **안에** 놓이는 컨트롤. 혼자 페이지에 서지 않는다 | `SButton` `SGhostButton` `SDropdownButton` `SField` `SInput` `SNumberInput` `STextarea` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SSwitch` `SToggle` `SChipInput` `SBarcodeInput` `SFilePicker` `SDatePicker` `SDateRangePicker` `STimePicker` `STimeRangePicker` `SCalendar` `SListItem` `SExpansionItem` `SDraggableItem` `SLinearProgress` `SCircleProgress` |
149
+ | **요소** | 블록 **안에** 놓이는 컨트롤. 혼자 페이지에 서지 않는다 | `SButton` `SGhostButton` `SDropdownButton` `SField` `SInput` `SNumberInput` `STextarea` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SSwitch` `SToggle` `SChipInput` `SBarcodeInput` `SFilePicker` `SDatePicker` `SDateRangePicker` `STimePicker` `STimeRangePicker` `SCalendar` `SListItem` `SExpansionItem` `SDraggableItem` `SImage` `SLinearProgress` `SCircleProgress` |
150
150
  | **인라인** | 텍스트 흐름·셀·라벨 안에 섞인다. 혼자 블록이 되지 않는다 | `STag` `SBadge` `SIcon` `STextLink` `SChip` |
151
151
  | **레이어** | 문서 흐름 **밖**에 떠서 그려진다. 어느 층에서 띄우든 레이아웃에 영향이 없다 | `SModal` `SActionModal` `SConfirmModal` `SPopup` `SDrawer` `SPopover` `STooltip` `SPortal` `SToast` `SLoadingModal` `SLoadingContainer` `SGuide` |
152
152
 
@@ -450,6 +450,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
450
450
  | 상태·분류를 라벨로 찍는다 | `STag` | §3-1 |
451
451
  | 색 점만으로 상태를 찍는다 | `SBadge` | §3-1 |
452
452
  | 아이콘을 넣는다 | `SIcon` | |
453
+ | 사진·썸네일을 보여준다 (로딩·실패 상태 포함) | `SImage` | §3-7-12 |
453
454
  | 문장 안에서 다른 화면으로 보낸다 | `STextLink` | §3-5-6 |
454
455
 
455
456
  #### C. 동작을 실행시킨다
@@ -1093,6 +1094,23 @@ const columns: STableColumn[] = [
1093
1094
  - 검색 실행 시점이 다르다 — `SKeyValueTable` 필터는 앱이 검색 버튼을 직접 놓지만, `SChipFilter` 는 편집 팝오버가 닫히거나 "검색" 을 누를 때 `onSearch` 가 값 맵과 함께 호출된다. 값이 바뀌지 않았으면 호출되지 않는다.
1094
1095
  - 함께 걸어야 하는 조건(예: 기간 중 하나는 필수)이 있으면 `fields` 를 그룹으로 넘긴다. 규칙을 못 채운 동안 경고 툴팁이 떠 있고 `onSearch` 가 막힌다.
1095
1096
 
1097
+ #### 3-7-12. 이미지 — SImage
1098
+
1099
+ 사진·썸네일은 `<img>` 를 직접 쓰지 않고 `SImage` 를 쓴다. **로딩·실패 상태를 컴포넌트가 이미 처리하기 때문이다.**
1100
+
1101
+ - **로딩 스피너와 실패 표시를 앱이 만들지 않는다.** `src` 가 없거나 로드에 실패하면 빈 이미지 아이콘이, 로딩 중에는 스피너가 자동으로 놓인다. 크기는 상자 높이에 비례하므로 썸네일이든 큰 미리보기든 따로 맞출 것이 없다.
1102
+ - **크기는 `ratio` 와 너비로 준다.** `ratio` 기본값이 `1`(정사각형)이라 너비만 주면 정사각형이 된다. `className`/`style` 로 높이를 직접 주면 그쪽이 이기고 `ratio` 는 무시된다.
1103
+ - 상자를 채우는 방식은 `fit`(기본 `cover`), 붙는 위치는 `position` 이다. 안쪽 `<img>` 에 네이티브 속성이 필요하면 `imgProps` 로 넘긴다 — 목록에서 고스트 드래그를 막는 `imgProps={{ draggable: false }}` 가 대표적이다.
1104
+ - 썸네일이 많은 목록에서는 `loadingShowDelay` 를 준다. 캐시된 이미지가 즉시 로드될 때 스피너가 한 프레임 번쩍이는 것을 막는다.
1105
+
1106
+ ```tsx
1107
+ ✅ <SImage src={item.thumbnailUrl} alt={item.name} style={{ width: 64 }} /> {/* 정사각 썸네일 */}
1108
+ ✅ <SImage src={banner} ratio={16 / 9} className="w-full" /> {/* 가로형 배너 */}
1109
+
1110
+ ❌ <img src={item.thumbnailUrl} /> {/* 로딩·실패 상태가 없다 */}
1111
+ ❌ {loading ? <SCircleProgress indeterminate /> : <SImage src={url} />} {/* SImage 가 이미 한다 */}
1112
+ ```
1113
+
1096
1114
  ---
1097
1115
 
1098
1116
  ## 4. 페이지 레시피 — 표준 골격
@@ -1575,7 +1593,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
1575
1593
  - oceanblue: 15 25 50 60 65 70 75 80 85 90 95 99
1576
1594
  - brilliantblue: 10 20 25 40 50 60 70 75 80 85 90 95 99 05
1577
1595
  - bg: screen frame brand subtle accent accentLight accentBright accentFaint deep danger dangerLight warning caution progress success successLight neutralLight neutralBright tableHeader
1578
- - fg: primary secondary tertiary quaternary brand subtleWarm subtleCool deep success dangerLight accent accentLight danger warning inverse
1596
+ - fg: primary secondary tertiary quaternary brand subtleWarm subtleCool deep success successLight dangerLight accent accentLight danger warning inverse
1579
1597
  - border: default strong bold accent accentLight danger warning success
1580
1598
  - disabled: bg text icon border
1581
1599
  - link: accent
@@ -1701,6 +1719,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
1701
1719
  --sys-color-fg-subtleCool
1702
1720
  --sys-color-fg-subtleWarm
1703
1721
  --sys-color-fg-success
1722
+ --sys-color-fg-successLight
1704
1723
  --sys-color-fg-tertiary
1705
1724
  --sys-color-fg-warning
1706
1725
  --sys-color-field-bg-default
@@ -2194,6 +2213,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
2194
2213
  | `value?` | `number` | `0` | 진행률 (0–100) |
2195
2214
  | `type?` | `SCircleProgressType` | `'primary'` | 색상 테마 |
2196
2215
  | `indeterminate?` | `boolean` | `false` | 불확정(스피너) 모드 — value 무시 |
2216
+ | `size?` | `number \| string` | `DEFAULT_SIZE` | 링의 지름. 숫자는 px 로 해석한다. 부모 크기에 비례시키려면 컨테이너 쿼리 단위(`'45cqh'`)를 쓴다 — 퍼센트는 부모가 inline-flex 라 기준 폭이 정해지지 않아 해석되지 않는다. |
2197
2217
  | `label?` | `string` | — | 하단 레이블 |
2198
2218
  | `innerValue?` | `boolean` | `false` | true면 퍼센트를 원 아래가 아닌 원 가운데에 표시 |
2199
2219
  | `className?` | `string` | — | |
@@ -2203,6 +2223,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
2203
2223
 
2204
2224
  ### Used by
2205
2225
 
2226
+ - [SImage](../SImage)
2206
2227
  - [SLoadingContainer](../SLoadingContainer)
2207
2228
  - [SLoadingModal](../SLoadingModal)
2208
2229
  - [STable](../STable)
@@ -3063,6 +3084,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
3063
3084
  - [SGhostButton](../SGhostButton)
3064
3085
  - [SGnb](../SGnb)
3065
3086
  - [SGuide](../SGuide)
3087
+ - [SImage](../SImage)
3066
3088
  - [SKeyValueTable](../SKeyValueTable)
3067
3089
  - [SListItem](../SListItem)
3068
3090
  - [SLoadingModal](../SLoadingModal)
@@ -3084,6 +3106,46 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
3084
3106
 
3085
3107
  ---
3086
3108
 
3109
+ # SImage
3110
+
3111
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
3112
+
3113
+ ### SImage
3114
+
3115
+ #### Props
3116
+
3117
+ | Prop | Type | Default | Description |
3118
+ |------|------|---------|-------------|
3119
+ | `src?` | `string` | — | 이미지 경로. 없으면 빈 이미지 아이콘이 나온다 |
3120
+ | `alt?` | `string` | `''` | 대체 텍스트 |
3121
+ | `ratio?` | `number` | `1` | 가로세로 비율. 소비자가 높이를 직접 주면 그쪽이 이긴다 |
3122
+ | `fit?` | `SImageFit` | `'cover'` | 이미지가 상자를 채우는 방식 (object-fit) |
3123
+ | `position?` | `string` | `'50% 50%'` | 이미지 정렬 위치 (object-position) |
3124
+ | `loading?` | `'lazy' \| 'eager'` | `'lazy'` | 브라우저 로딩 방식 |
3125
+ | `loadingShowDelay?` | `number` | `0` | 스피너를 띄우기까지 기다리는 시간(ms). 이 시간 안에 로드되면 스피너를 아예 그리지 않는다 — 캐시된 이미지에서 스피너가 한 프레임 번쩍이는 것을 막는다. |
3126
+ | `noSpinner?` | `boolean` | `false` | 로딩 중에도 스피너를 그리지 않는다 |
3127
+ | `loadingSlot?` | `ReactNode` | — | 로딩 중 표시를 직접 지정한다 (기본: 스피너) |
3128
+ | `errorSlot?` | `ReactNode` | — | 실패·빈 상태 표시를 직접 지정한다 (기본: 빈 이미지 아이콘) |
3129
+ | `imgProps?` | `ImgHTMLAttributes<HTMLImageElement>` | — | 안쪽 `<img>` 로 넘길 네이티브 속성 (srcSet · sizes · crossOrigin · draggable 등) |
3130
+
3131
+ #### Events
3132
+
3133
+ | Event | Type | Description |
3134
+ |-------|------|-------------|
3135
+ | `onLoad` | `(src: string) => void` | 로드 완료. 로드된 src 를 넘긴다 |
3136
+ | `onError` | `(event: SyntheticEvent<HTMLImageElement>) => void` | 로드 실패 |
3137
+
3138
+ ## Dependencies
3139
+
3140
+ ### Depends on
3141
+
3142
+ - [SCircleProgress](../SCircleProgress)
3143
+ - [SIcon](../SIcon)
3144
+
3145
+ ### Graph
3146
+
3147
+ ---
3148
+
3087
3149
  # SInput
3088
3150
 
3089
3151
  > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
@@ -4758,6 +4820,7 @@ function OrderModal({ open, onOpenChange, onClose, modalRef, orderId }: OrderMod
4758
4820
  | `value?` | `boolean` | `false` | 선택(on/off) 상태 |
4759
4821
  | `label?` | `string` | `''` | 라벨 |
4760
4822
  | `disabled?` | `boolean` | `false` | 비활성 |
4823
+ | `size?` | `SToggleSize` | `'sm'` | 크기 |
4761
4824
  | `className?` | `string` | — | |
4762
4825
  | `style?` | `CSSProperties` | — | |
4763
4826
 
package/dist/llms.txt CHANGED
@@ -41,7 +41,7 @@
41
41
  | **표·목록** | `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SListItem` `SExpansionList` `SDraggableList` `SDraggableItem` `STree` |
42
42
  | **레이아웃** | `SLayout` `SGnb` `SPage`(제목 영역은 `header` prop) `SSectionHeaderCard` `SCard` `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
43
43
  | **내비게이션** | `STabs` `SPagination` `SStepper` |
44
- | **표시·상태** | `STag` `SBadge` `SIcon` `SCallout` `SGuide` |
44
+ | **표시·상태** | `STag` `SBadge` `SIcon` `SImage` `SCallout` `SGuide` |
45
45
  | **진행·로딩** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
46
46
  | **오버레이** | `STooltip` `SPopover` `SPopup` `SDrawer` `SPortal` |
47
47
  | **모달** | `SModal.confirm()` `SModal.create()` + `SActionModal` `SConfirmModal` `SModalOutlet`(앱 루트 1회) |
@@ -147,7 +147,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
147
147
  | --- | --- | --- |
148
148
  | **셸** | 앱 전체 뼈대. 페이지가 바뀌어도 남는다 | `SLayout` `SGnb` `SPage`(제목 영역은 `header` prop) |
149
149
  | **블록** | `SPage` 의 직계 자식. 페이지를 세로로 쌓는 단위 | `SSectionHeaderCard` `SCard` `SForm` `SSplitter` `SScrollArea` `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SExpansionList` `SDraggableList` `STree` `SCallout` `STabs` `SStepper` `SPagination` `SDivider` |
150
- | **요소** | 블록 **안에** 놓이는 컨트롤. 혼자 페이지에 서지 않는다 | `SButton` `SGhostButton` `SDropdownButton` `SField` `SInput` `SNumberInput` `STextarea` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SSwitch` `SToggle` `SChipInput` `SBarcodeInput` `SFilePicker` `SDatePicker` `SDateRangePicker` `STimePicker` `STimeRangePicker` `SCalendar` `SListItem` `SExpansionItem` `SDraggableItem` `SLinearProgress` `SCircleProgress` |
150
+ | **요소** | 블록 **안에** 놓이는 컨트롤. 혼자 페이지에 서지 않는다 | `SButton` `SGhostButton` `SDropdownButton` `SField` `SInput` `SNumberInput` `STextarea` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SSwitch` `SToggle` `SChipInput` `SBarcodeInput` `SFilePicker` `SDatePicker` `SDateRangePicker` `STimePicker` `STimeRangePicker` `SCalendar` `SListItem` `SExpansionItem` `SDraggableItem` `SImage` `SLinearProgress` `SCircleProgress` |
151
151
  | **인라인** | 텍스트 흐름·셀·라벨 안에 섞인다. 혼자 블록이 되지 않는다 | `STag` `SBadge` `SIcon` `STextLink` `SChip` |
152
152
  | **레이어** | 문서 흐름 **밖**에 떠서 그려진다. 어느 층에서 띄우든 레이아웃에 영향이 없다 | `SModal` `SActionModal` `SConfirmModal` `SPopup` `SDrawer` `SPopover` `STooltip` `SPortal` `SToast` `SLoadingModal` `SLoadingContainer` `SGuide` |
153
153
 
@@ -451,6 +451,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
451
451
  | 상태·분류를 라벨로 찍는다 | `STag` | §3-1 |
452
452
  | 색 점만으로 상태를 찍는다 | `SBadge` | §3-1 |
453
453
  | 아이콘을 넣는다 | `SIcon` | |
454
+ | 사진·썸네일을 보여준다 (로딩·실패 상태 포함) | `SImage` | §3-7-12 |
454
455
  | 문장 안에서 다른 화면으로 보낸다 | `STextLink` | §3-5-6 |
455
456
 
456
457
  #### C. 동작을 실행시킨다
@@ -1094,6 +1095,23 @@ const columns: STableColumn[] = [
1094
1095
  - 검색 실행 시점이 다르다 — `SKeyValueTable` 필터는 앱이 검색 버튼을 직접 놓지만, `SChipFilter` 는 편집 팝오버가 닫히거나 "검색" 을 누를 때 `onSearch` 가 값 맵과 함께 호출된다. 값이 바뀌지 않았으면 호출되지 않는다.
1095
1096
  - 함께 걸어야 하는 조건(예: 기간 중 하나는 필수)이 있으면 `fields` 를 그룹으로 넘긴다. 규칙을 못 채운 동안 경고 툴팁이 떠 있고 `onSearch` 가 막힌다.
1096
1097
 
1098
+ #### 3-7-12. 이미지 — SImage
1099
+
1100
+ 사진·썸네일은 `<img>` 를 직접 쓰지 않고 `SImage` 를 쓴다. **로딩·실패 상태를 컴포넌트가 이미 처리하기 때문이다.**
1101
+
1102
+ - **로딩 스피너와 실패 표시를 앱이 만들지 않는다.** `src` 가 없거나 로드에 실패하면 빈 이미지 아이콘이, 로딩 중에는 스피너가 자동으로 놓인다. 크기는 상자 높이에 비례하므로 썸네일이든 큰 미리보기든 따로 맞출 것이 없다.
1103
+ - **크기는 `ratio` 와 너비로 준다.** `ratio` 기본값이 `1`(정사각형)이라 너비만 주면 정사각형이 된다. `className`/`style` 로 높이를 직접 주면 그쪽이 이기고 `ratio` 는 무시된다.
1104
+ - 상자를 채우는 방식은 `fit`(기본 `cover`), 붙는 위치는 `position` 이다. 안쪽 `<img>` 에 네이티브 속성이 필요하면 `imgProps` 로 넘긴다 — 목록에서 고스트 드래그를 막는 `imgProps={{ draggable: false }}` 가 대표적이다.
1105
+ - 썸네일이 많은 목록에서는 `loadingShowDelay` 를 준다. 캐시된 이미지가 즉시 로드될 때 스피너가 한 프레임 번쩍이는 것을 막는다.
1106
+
1107
+ ```tsx
1108
+ ✅ <SImage src={item.thumbnailUrl} alt={item.name} style={{ width: 64 }} /> {/* 정사각 썸네일 */}
1109
+ ✅ <SImage src={banner} ratio={16 / 9} className="w-full" /> {/* 가로형 배너 */}
1110
+
1111
+ ❌ <img src={item.thumbnailUrl} /> {/* 로딩·실패 상태가 없다 */}
1112
+ ❌ {loading ? <SCircleProgress indeterminate /> : <SImage src={url} />} {/* SImage 가 이미 한다 */}
1113
+ ```
1114
+
1097
1115
  ---
1098
1116
 
1099
1117
  ## 4. 페이지 레시피 — 표준 골격
@@ -1576,7 +1594,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
1576
1594
  - oceanblue: 15 25 50 60 65 70 75 80 85 90 95 99
1577
1595
  - brilliantblue: 10 20 25 40 50 60 70 75 80 85 90 95 99 05
1578
1596
  - bg: screen frame brand subtle accent accentLight accentBright accentFaint deep danger dangerLight warning caution progress success successLight neutralLight neutralBright tableHeader
1579
- - fg: primary secondary tertiary quaternary brand subtleWarm subtleCool deep success dangerLight accent accentLight danger warning inverse
1597
+ - fg: primary secondary tertiary quaternary brand subtleWarm subtleCool deep success successLight dangerLight accent accentLight danger warning inverse
1580
1598
  - border: default strong bold accent accentLight danger warning success
1581
1599
  - disabled: bg text icon border
1582
1600
  - link: accent
@@ -1702,6 +1720,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
1702
1720
  --sys-color-fg-subtleCool
1703
1721
  --sys-color-fg-subtleWarm
1704
1722
  --sys-color-fg-success
1723
+ --sys-color-fg-successLight
1705
1724
  --sys-color-fg-tertiary
1706
1725
  --sys-color-fg-warning
1707
1726
  --sys-color-field-bg-default
@@ -1723,7 +1742,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
1723
1742
  --sys-color-link-accent
1724
1743
  --sys-color-navigation-gnb-bg-dark
1725
1744
 
1726
- ## 3. 컴포넌트 인덱스 (64종)
1745
+ ## 3. 컴포넌트 인덱스 (65종)
1727
1746
 
1728
1747
  **Props 는 이 문서에 없다.** 쓸 컴포넌트를 정했으면 그 컴포넌트의 README 를 읽는다.
1729
1748
 
@@ -1732,4 +1751,4 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
1732
1751
  예) SButton 을 쓴다면 `dist/components/SButton/README.md`.
1733
1752
  prop 을 추측해서 쓰지 말고 반드시 README 로 확인한다 (분류별 용도는 §1 의 "전체 컴포넌트 인덱스" 참조).
1734
1753
 
1735
- SActionModal · SBadge · SBarcodeInput · SButton · SCalendar · SCallout · SCard · SCheckbox · SChip · SChipFilter · SChipInput · SCircleProgress · SConfirmModal · SDatePicker · SDateRangePicker · SDivider · SDraggableItem · SDraggableList · SDrawer · SDropdownButton · SExpansionItem · SExpansionList · SField · SFilePicker · SForm · SGhostButton · SGnb · SGuide · SIcon · SInput · SKeyValueTable · SLayout · SLinearProgress · SList · SListItem · SLoadingContainer · SLoadingModal · SModal · SNumberInput · SPage · SPagination · SPopover · SPopup · SPortal · SRadio · SRadioButton · SScrollArea · SSectionHeaderCard · SSelect · SSplitter · SStepper · SSwitch · STable · STableBar · STabs · STag · STextLink · STextarea · STimePicker · STimeRangePicker · SToast · SToggle · STooltip · STree
1754
+ SActionModal · SBadge · SBarcodeInput · SButton · SCalendar · SCallout · SCard · SCheckbox · SChip · SChipFilter · SChipInput · SCircleProgress · SConfirmModal · SDatePicker · SDateRangePicker · SDivider · SDraggableItem · SDraggableList · SDrawer · SDropdownButton · SExpansionItem · SExpansionList · SField · SFilePicker · SForm · SGhostButton · SGnb · SGuide · SIcon · SImage · SInput · SKeyValueTable · SLayout · SLinearProgress · SList · SListItem · SLoadingContainer · SLoadingModal · SModal · SNumberInput · SPage · SPagination · SPopover · SPopup · SPortal · SRadio · SRadioButton · SScrollArea · SSectionHeaderCard · SSelect · SSplitter · SStepper · SSwitch · STable · STableBar · STabs · STag · STextLink · STextarea · STimePicker · STimeRangePicker · SToast · SToggle · STooltip · STree
package/dist/styles.css CHANGED
@@ -194,6 +194,7 @@
194
194
  --color-fg-subtleCool: #025497;
195
195
  --color-fg-deep: #004290;
196
196
  --color-fg-success: #00973C;
197
+ --color-fg-successLight: #12B553;
197
198
  --color-fg-dangerLight: #FB4444;
198
199
  --color-fg-accent: #0075FF;
199
200
  --color-fg-accentLight: #64ABFF;
@@ -926,9 +927,6 @@
926
927
  .h-\[56px\] {
927
928
  height: 56px;
928
929
  }
929
- .h-\[80px\] {
930
- height: 80px;
931
- }
932
930
  .h-\[80vh\] {
933
931
  height: 80vh;
934
932
  }
@@ -1133,9 +1131,6 @@
1133
1131
  .w-\[61px\] {
1134
1132
  width: 61px;
1135
1133
  }
1136
- .w-\[80px\] {
1137
- width: 80px;
1138
- }
1139
1134
  .w-\[200px\] {
1140
1135
  width: 200px;
1141
1136
  }
@@ -2118,6 +2113,9 @@
2118
2113
  .border-transparent {
2119
2114
  border-color: transparent;
2120
2115
  }
2116
+ .bg-\(--cmp-image-bg\) {
2117
+ background-color: var(--cmp-image-bg);
2118
+ }
2121
2119
  .bg-\(--cmp-listBox-bg\) {
2122
2120
  background-color: var(--cmp-listBox-bg);
2123
2121
  }
@@ -2406,6 +2404,9 @@
2406
2404
  .p-4 {
2407
2405
  padding: calc(var(--spacing) * 4);
2408
2406
  }
2407
+ .p-10 {
2408
+ padding: calc(var(--spacing) * 10);
2409
+ }
2409
2410
  .p-16 {
2410
2411
  padding: calc(var(--spacing) * 16);
2411
2412
  }
@@ -3256,6 +3257,9 @@
3256
3257
  .opacity-40 {
3257
3258
  opacity: 40%;
3258
3259
  }
3260
+ .opacity-50 {
3261
+ opacity: 50%;
3262
+ }
3259
3263
  .opacity-60 {
3260
3264
  opacity: 60%;
3261
3265
  }
@@ -4555,6 +4559,7 @@
4555
4559
  --sys-color-fg-subtleCool: #025497;
4556
4560
  --sys-color-fg-deep: #004290;
4557
4561
  --sys-color-fg-success: #00973C;
4562
+ --sys-color-fg-successLight: #12B553;
4558
4563
  --sys-color-fg-dangerLight: #FB4444;
4559
4564
  --sys-color-fg-accent: #0075FF;
4560
4565
  --sys-color-fg-accentLight: #64ABFF;
@@ -4708,8 +4713,10 @@
4708
4713
  --cmp-switch-bg-disabled-on: #BBDAFF;
4709
4714
  --cmp-switch-bg-disabled-off: #E1E1E1;
4710
4715
  --cmp-switch-gap: 6px;
4711
- --cmp-toggle-height: 28px;
4712
- --cmp-toggle-paddingX: 12px;
4716
+ --cmp-toggle-xs-height: 24px;
4717
+ --cmp-toggle-xs-paddingX: 8px;
4718
+ --cmp-toggle-sm-height: 28px;
4719
+ --cmp-toggle-sm-paddingX: 12px;
4713
4720
  --cmp-toggle-radius: 9999px;
4714
4721
  --cmp-toggle-border-width: 1px;
4715
4722
  --cmp-toggle-border-default: #CCCCCC;
@@ -5239,9 +5246,10 @@
5239
5246
  --cmp-progress-circular-gap: 8px;
5240
5247
  --cmp-progress-color-track: #EEEEEE;
5241
5248
  --cmp-progress-color-label: #555555;
5242
- --cmp-progress-active-color: #2D8DFF;
5243
- --cmp-progress-success-color: #12B553;
5244
- --cmp-progress-error-color: #FB4444;
5249
+ --cmp-progress-color-active: #2D8DFF;
5250
+ --cmp-progress-color-success: #12B553;
5251
+ --cmp-progress-color-error: #FB4444;
5252
+ --cmp-progress-color-neutral: #D8D8D8;
5245
5253
  --cmp-progress-bar-text: #FFFFFF;
5246
5254
  --cmp-progress-inverse-color: #FFFFFF;
5247
5255
  --cmp-progress-inverse-opacity: 40%;
@@ -5550,6 +5558,8 @@
5550
5558
  --cmp-splitter-border-width: 4px;
5551
5559
  --cmp-splitter-border-padding: 4px;
5552
5560
  --cmp-splitter-border-color: #64ABFF;
5561
+ --cmp-image-bg: #F9F9F9;
5562
+ --cmp-image-icon: #D8D8D8;
5553
5563
  }
5554
5564
  @layer base {
5555
5565
  body {
package/dist/theme.css CHANGED
@@ -154,6 +154,7 @@
154
154
  --color-fg-subtleCool: #025497;
155
155
  --color-fg-deep: #004290;
156
156
  --color-fg-success: #00973C;
157
+ --color-fg-successLight: #12B553;
157
158
  --color-fg-dangerLight: #FB4444;
158
159
  --color-fg-accent: #0075FF;
159
160
  --color-fg-accentLight: #64ABFF;
@@ -453,6 +454,7 @@
453
454
  --sys-color-fg-subtleCool: #025497;
454
455
  --sys-color-fg-deep: #004290;
455
456
  --sys-color-fg-success: #00973C;
457
+ --sys-color-fg-successLight: #12B553;
456
458
  --sys-color-fg-dangerLight: #FB4444;
457
459
  --sys-color-fg-accent: #0075FF;
458
460
  --sys-color-fg-accentLight: #64ABFF;
@@ -608,8 +610,10 @@
608
610
  --cmp-switch-bg-disabled-on: #BBDAFF;
609
611
  --cmp-switch-bg-disabled-off: #E1E1E1;
610
612
  --cmp-switch-gap: 6px;
611
- --cmp-toggle-height: 28px;
612
- --cmp-toggle-paddingX: 12px;
613
+ --cmp-toggle-xs-height: 24px;
614
+ --cmp-toggle-xs-paddingX: 8px;
615
+ --cmp-toggle-sm-height: 28px;
616
+ --cmp-toggle-sm-paddingX: 12px;
613
617
  --cmp-toggle-radius: 9999px;
614
618
  --cmp-toggle-border-width: 1px;
615
619
  --cmp-toggle-border-default: #CCCCCC;
@@ -1139,9 +1143,10 @@
1139
1143
  --cmp-progress-circular-gap: 8px;
1140
1144
  --cmp-progress-color-track: #EEEEEE;
1141
1145
  --cmp-progress-color-label: #555555;
1142
- --cmp-progress-active-color: #2D8DFF;
1143
- --cmp-progress-success-color: #12B553;
1144
- --cmp-progress-error-color: #FB4444;
1146
+ --cmp-progress-color-active: #2D8DFF;
1147
+ --cmp-progress-color-success: #12B553;
1148
+ --cmp-progress-color-error: #FB4444;
1149
+ --cmp-progress-color-neutral: #D8D8D8;
1145
1150
  --cmp-progress-bar-text: #FFFFFF;
1146
1151
  --cmp-progress-inverse-color: #FFFFFF;
1147
1152
  --cmp-progress-inverse-opacity: 40%;
@@ -1450,6 +1455,8 @@
1450
1455
  --cmp-splitter-border-width: 4px;
1451
1456
  --cmp-splitter-border-padding: 4px;
1452
1457
  --cmp-splitter-border-color: #64ABFF;
1458
+ --cmp-image-bg: #F9F9F9;
1459
+ --cmp-image-icon: #D8D8D8;
1453
1460
  }
1454
1461
 
1455
1462
  /* 전역 스크롤바 — overflow(auto/scroll)로 스크롤이 생기는 모든 요소에 SScrollArea 기본 스크롤바를 자동 적용.
@@ -13,4 +13,4 @@ export const RADIUS = ["2","4","6","8","full","control-sm","control-md","feedbac
13
13
  export const TYPO_PRESETS = ["typo-body-lg-bold","typo-body-lg-default","typo-body-lg-medium","typo-body-md-bold","typo-body-md-default","typo-body-md-medium","typo-body-sm-bold","typo-body-sm-default","typo-body-sm-medium","typo-body-xs-default","typo-control-lg","typo-control-md-default","typo-control-md-underline","typo-control-sm-default","typo-control-sm-underline","typo-control-xs-bold","typo-control-xs-default","typo-control-xs-medium","typo-control-xs-underline","typo-feedback-md-bold","typo-feedback-md-medium","typo-feedback-md-underline","typo-feedback-sm-bold","typo-feedback-sm-medium","typo-feedback-sm-regular","typo-feedback-sm-underline","typo-feedback-xs","typo-field-lg-bold","typo-field-lg-default","typo-field-lg-medium","typo-field-md-bold","typo-field-md-default","typo-field-md-medium","typo-field-sm-bold","typo-field-sm-default","typo-field-sm-medium","typo-field-xs-default","typo-heading-lg","typo-heading-md","typo-heading-sm","typo-heading-xs","typo-heading-xxs","typo-item-md-default","typo-item-md-selected","typo-item-sm-default","typo-item-sm-selected","typo-navigation-lg-medium","typo-navigation-lg-semibold","typo-navigation-md-bold","typo-navigation-sm-bold","typo-navigation-sm-default","typo-navigation-sm-medium","typo-navigation-xs-bold","typo-navigation-xs-medium","typo-table-accent","typo-table-body","typo-table-header"];
14
14
 
15
15
  /** 색상 유틸리티 키 (text-*, bg-*, border-* 공통) */
16
- export const COLORS = ["bg-accent","bg-accentBright","bg-accentFaint","bg-accentLight","bg-brand","bg-caution","bg-danger","bg-dangerLight","bg-deep","bg-frame","bg-neutralBright","bg-neutralLight","bg-progress","bg-screen","bg-subtle","bg-success","bg-successLight","bg-tableHeader","bg-warning","black","blue-strong","blue-subtle","border-accent","border-accentLight","border-bold","border-danger","border-default","border-strong","border-success","border-warning","brilliantblue-05","brilliantblue-10","brilliantblue-20","brilliantblue-25","brilliantblue-40","brilliantblue-50","brilliantblue-60","brilliantblue-70","brilliantblue-75","brilliantblue-80","brilliantblue-85","brilliantblue-90","brilliantblue-95","brilliantblue-99","control-bg-inverseHover","danger-15","danger-20","danger-30","danger-45","danger-60","danger-70","danger-75","danger-80","danger-85","danger-90","danger-95","danger-99","danger-strong","danger-subtle","darkblue-strong","darkblue-subtle","disabled-bg","disabled-border","disabled-icon","disabled-text","divider-default","fg-accent","fg-accentLight","fg-brand","fg-danger","fg-dangerLight","fg-deep","fg-inverse","fg-primary","fg-quaternary","fg-secondary","fg-subtleCool","fg-subtleWarm","fg-success","fg-tertiary","fg-warning","field-bg-default","field-bg-hover","field-bg-readOnly","field-border-danger","field-border-default","field-border-focus","field-border-hover","field-border-success","field-icon-default","field-text-default","field-text-placeholder","field-text-readOnly","green-15","green-25","green-45","green-55","green-65","green-70","green-75","green-80","green-85","green-90","green-95","green-99","green-strong","green-subtle","grey-05","grey-10","grey-20","grey-25","grey-30","grey-35","grey-45","grey-50","grey-55","grey-60","grey-65","grey-70","grey-80","grey-85","grey-90","grey-95","grey-strong","grey-subtle","indigo-strong","indigo-subtle","lightblue-strong","lightblue-subtle","link-accent","navigation-gnb-bg-dark","oceanblue-15","oceanblue-25","oceanblue-50","oceanblue-60","oceanblue-65","oceanblue-70","oceanblue-75","oceanblue-80","oceanblue-85","oceanblue-90","oceanblue-95","oceanblue-99","olive-05","olive-10","olive-15","olive-20","olive-30","olive-45","olive-55","olive-65","olive-70","olive-80","olive-90","olive-95","orange-10","orange-20","orange-35","orange-45","orange-55","orange-60","orange-65","orange-75","orange-85","orange-90","orange-95","orange-99","orange-strong","orange-subtle","primary-05","primary-10","primary-20","primary-25","primary-40","primary-50","primary-60","primary-70","primary-75","primary-80","primary-85","primary-90","primary-95","primary-99","red-15","red-20","red-30","red-45","red-60","red-70","red-75","red-80","red-85","red-90","red-95","red-99","red-strong","red-subtle","steelblue-10","steelblue-25","steelblue-45","steelblue-60","steelblue-65","steelblue-70","steelblue-75","steelblue-80","steelblue-85","steelblue-90","steelblue-95","steelblue-99","success-15","success-25","success-45","success-55","success-65","success-70","success-75","success-80","success-85","success-90","success-95","success-99","success-strong","success-subtle","warning-10","warning-20","warning-35","warning-45","warning-55","warning-60","warning-65","warning-75","warning-85","warning-90","warning-95","warning-99","warning-strong","warning-subtle","white","yellow-10","yellow-20","yellow-25","yellow-30","yellow-40","yellow-45","yellow-50","yellow-60","yellow-70","yellow-80","yellow-90","yellow-95","yellow-moderate","yellow-strong","yellow-subtle"];
16
+ export const COLORS = ["bg-accent","bg-accentBright","bg-accentFaint","bg-accentLight","bg-brand","bg-caution","bg-danger","bg-dangerLight","bg-deep","bg-frame","bg-neutralBright","bg-neutralLight","bg-progress","bg-screen","bg-subtle","bg-success","bg-successLight","bg-tableHeader","bg-warning","black","blue-strong","blue-subtle","border-accent","border-accentLight","border-bold","border-danger","border-default","border-strong","border-success","border-warning","brilliantblue-05","brilliantblue-10","brilliantblue-20","brilliantblue-25","brilliantblue-40","brilliantblue-50","brilliantblue-60","brilliantblue-70","brilliantblue-75","brilliantblue-80","brilliantblue-85","brilliantblue-90","brilliantblue-95","brilliantblue-99","control-bg-inverseHover","danger-15","danger-20","danger-30","danger-45","danger-60","danger-70","danger-75","danger-80","danger-85","danger-90","danger-95","danger-99","danger-strong","danger-subtle","darkblue-strong","darkblue-subtle","disabled-bg","disabled-border","disabled-icon","disabled-text","divider-default","fg-accent","fg-accentLight","fg-brand","fg-danger","fg-dangerLight","fg-deep","fg-inverse","fg-primary","fg-quaternary","fg-secondary","fg-subtleCool","fg-subtleWarm","fg-success","fg-successLight","fg-tertiary","fg-warning","field-bg-default","field-bg-hover","field-bg-readOnly","field-border-danger","field-border-default","field-border-focus","field-border-hover","field-border-success","field-icon-default","field-text-default","field-text-placeholder","field-text-readOnly","green-15","green-25","green-45","green-55","green-65","green-70","green-75","green-80","green-85","green-90","green-95","green-99","green-strong","green-subtle","grey-05","grey-10","grey-20","grey-25","grey-30","grey-35","grey-45","grey-50","grey-55","grey-60","grey-65","grey-70","grey-80","grey-85","grey-90","grey-95","grey-strong","grey-subtle","indigo-strong","indigo-subtle","lightblue-strong","lightblue-subtle","link-accent","navigation-gnb-bg-dark","oceanblue-15","oceanblue-25","oceanblue-50","oceanblue-60","oceanblue-65","oceanblue-70","oceanblue-75","oceanblue-80","oceanblue-85","oceanblue-90","oceanblue-95","oceanblue-99","olive-05","olive-10","olive-15","olive-20","olive-30","olive-45","olive-55","olive-65","olive-70","olive-80","olive-90","olive-95","orange-10","orange-20","orange-35","orange-45","orange-55","orange-60","orange-65","orange-75","orange-85","orange-90","orange-95","orange-99","orange-strong","orange-subtle","primary-05","primary-10","primary-20","primary-25","primary-40","primary-50","primary-60","primary-70","primary-75","primary-80","primary-85","primary-90","primary-95","primary-99","red-15","red-20","red-30","red-45","red-60","red-70","red-75","red-80","red-85","red-90","red-95","red-99","red-strong","red-subtle","steelblue-10","steelblue-25","steelblue-45","steelblue-60","steelblue-65","steelblue-70","steelblue-75","steelblue-80","steelblue-85","steelblue-90","steelblue-95","steelblue-99","success-15","success-25","success-45","success-55","success-65","success-70","success-75","success-80","success-85","success-90","success-95","success-99","success-strong","success-subtle","warning-10","warning-20","warning-35","warning-45","warning-55","warning-60","warning-65","warning-75","warning-85","warning-90","warning-95","warning-99","warning-strong","warning-subtle","white","yellow-10","yellow-20","yellow-25","yellow-30","yellow-40","yellow-45","yellow-50","yellow-60","yellow-70","yellow-80","yellow-90","yellow-95","yellow-moderate","yellow-strong","yellow-subtle"];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sellmate-design-system-react",
3
- "version": "9.0.0-beta.0",
3
+ "version": "9.0.0-beta.2",
4
4
  "description": "Sellmate Design System — React (TypeScript + Tailwind v4) port",
5
5
  "license": "UNLICENSED",
6
6
  "keywords": [