sellmate-design-system-react 9.0.0-beta.72 → 9.0.0-beta.74
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.
- package/AGENTS.md +24 -10
- package/dist/components/SBarcodeInput/README.md +1 -0
- package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +7 -0
- package/dist/components/SChipInput/README.md +1 -0
- package/dist/components/SChipInput/SChipInput.d.ts +7 -0
- package/dist/components/SDatePicker/README.md +1 -0
- package/dist/components/SDatePicker/SDatePicker.d.ts +8 -1
- package/dist/components/SDateRangePicker/README.md +1 -0
- package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +8 -1
- package/dist/components/SEditor/README.md +1 -0
- package/dist/components/SEditor/SEditor.d.ts +7 -0
- package/dist/components/SField/README.md +1 -0
- package/dist/components/SField/SField.d.ts +7 -0
- package/dist/components/SFilePicker/README.md +1 -0
- package/dist/components/SFilePicker/SFilePicker.d.ts +8 -1
- package/dist/components/SGnb/README.md +1 -1
- package/dist/components/SGnb/SGnb.d.ts +7 -1
- package/dist/components/SInput/README.md +1 -0
- package/dist/components/SInput/SInput.d.ts +4 -0
- package/dist/components/SLoginCard/README.md +1 -1
- package/dist/components/SLoginCard/SLoginCard.d.ts +8 -4
- package/dist/components/SLogo/README.md +18 -1
- package/dist/components/SLogo/SLogo.d.ts +16 -2
- package/dist/components/SLogo/index.d.ts +1 -1
- package/dist/components/SLogo/logo.config.d.ts +6 -0
- package/dist/components/SLogo/logos.d.ts +3 -2
- package/dist/components/SNumberInput/README.md +1 -0
- package/dist/components/SNumberInput/SNumberInput.d.ts +7 -0
- package/dist/components/SRadioButton/README.md +8 -0
- package/dist/components/SRadioButton/SRadioButton.d.ts +8 -1
- package/dist/components/SSelect/README.md +1 -0
- package/dist/components/SSelect/SSelect.d.ts +7 -0
- package/dist/components/STextarea/README.md +1 -0
- package/dist/components/STextarea/STextarea.d.ts +7 -0
- package/dist/components/STimePicker/README.md +1 -0
- package/dist/components/STimePicker/STimePicker.d.ts +8 -1
- package/dist/components/STimeRangePicker/README.md +1 -0
- package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +8 -1
- package/dist/index.cjs +263 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +263 -21
- package/dist/index.js.map +1 -1
- package/dist/llms-full.txt +64 -13
- package/dist/llms.txt +24 -10
- package/dist/styles.css +34 -3
- package/package.json +1 -1
package/dist/llms-full.txt
CHANGED
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
| **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SSystemActionButton`(GNB system 패널에 한 줄씩 쌓는 액션 행 — 버튼 고르기는 §3-5) `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SLauncherListBox`(런처 버튼을 눌러 뜨는 서비스 목록) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SLoginCard`(통합 계정 로그인 화면의 카드) `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
|
|
55
55
|
| **내비게이션** | `STabs` `SPagination` `SStepper` |
|
|
56
56
|
| **차트** | `SBarChart`(막대 그래프 — 항목끼리 크기를 견준다. `stacked` 로 항목 안의 구성까지) `SLineChart`(꺾은선 그래프 — 순서가 있는 항목의 추이를 본다. `area` 로 크기까지, `stacked` 로 구성까지) `SPieChart`(원그래프 — 한 시점의 전체를 몇 개의 몫으로 나눈다) `SDonutChart`(도넛 그래프 — 가운데가 빈 원그래프. 구멍에 글자를 두지 않는다) |
|
|
57
|
-
| **표시·상태** | `STag` `SBadge` `SIcon` `SLogo`(셀메이트·서비스 로고를 아이콘처럼 — name 으로 서비스, mode 로 배경, size 는 높이다) `SImage` `SCallout` `SContextAlert`(한 줄짜리 맥락 알림 — 오른쪽에 후속 동작 버튼) `SGuide` |
|
|
57
|
+
| **표시·상태** | `STag` `SBadge` `SIcon` `SLogo`(셀메이트·서비스 로고를 아이콘처럼 — name 으로 서비스, mode 로 배경, direction 으로 가로·세로, size 는 높이다 — `"auto"` 면 부모 폭을 채운다) `SImage` `SCallout` `SContextAlert`(한 줄짜리 맥락 알림 — 오른쪽에 후속 동작 버튼) `SGuide` |
|
|
58
58
|
| **진행·로딩** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
|
|
59
59
|
| **오버레이** | `STooltip` `SPopover` `SPopup` `SDrawer` `SPortal` |
|
|
60
60
|
| **모달** | `SModal.confirm()` `SModal.create()` + `SActionModal` `SConfirmModal` `SModalOutlet`(앱 루트 1회) |
|
|
@@ -585,7 +585,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
585
585
|
| 상태·분류를 라벨로 찍는다 | `STag` | §3-1 |
|
|
586
586
|
| 색 점만으로 상태를 찍는다 | `SBadge` | §3-1 |
|
|
587
587
|
| 아이콘을 넣는다 | `SIcon` | |
|
|
588
|
-
| 셀메이트·서비스 로고를 넣는다 | `SLogo` (`name` 에 서비스, 어두운 면이면 `mode="dark"`. `size` 는
|
|
588
|
+
| 셀메이트·서비스 로고를 넣는다 | `SLogo` (`name` 에 서비스, 어두운 면이면 `mode="dark"`, 표기를 아래에 두려면 `direction="vertical"`. `size` 는 **높이**이고(`"auto"` 면 부모 폭을 채운다), 색을 주지 않으면 브랜드 색이다) | §3-7-14 |
|
|
589
589
|
| 사진·썸네일을 보여준다 (로딩·실패 상태 포함) | `SImage` | §3-7-12 |
|
|
590
590
|
| 작은 썸네일을 호버해서 크게 확인하게 한다 | `SImage previewOnHover` | 툴팁·팝오버로 직접 만들지 않는다 — 미리보기는 마우스를 통과시키고 원본의 로딩·실패도 스스로 표현한다. §3-7-12 |
|
|
591
591
|
| 문장 안에서 다른 화면으로 보낸다 | `STextLink` | §3-5-6 |
|
|
@@ -2056,7 +2056,9 @@ const [selectedId, setSelectedId] = useState<string>();
|
|
|
2056
2056
|
|
|
2057
2057
|
- **`name` 에 서비스를 넣으면 그 서비스 로고가 나온다**(`sellmate` · `wms` · `chat` · `plm` · `account` · `people` · `crm` · `work` · `pos` · `console` — `SLogoName`). [셀메이트 워드마크 + 서비스 표기]가 한 덩어리다. **워드마크 옆에 표기를 앱이 따로 잇지 않는다** — 표기의 서체·자간·색이 원본과 어긋난다.
|
|
2058
2058
|
- **배경에 맞춰 `mode` 를 준다.** 밝은 면은 `light`(기본), 어두운 면(dark GNB 등)은 `dark`. 워드마크 색과 서비스 표기 색을 모드가 정하므로 색을 직접 주지 않는다.
|
|
2059
|
-
-
|
|
2059
|
+
- **표기를 워드마크 아래에 두려면 `direction="vertical"` 을 준다**(로그인 카드처럼 폭이 좁고 로고가 가운데 서는 자리). 워드마크 아래에 표기를 앱이 따로 쌓지 않는다. 모든 서비스 로고가 세로를 가진다(`sellmate` 는 표기가 없어 어느 쪽이든 같다). 세로의 표기 색도 원본이 정하므로 색을 직접 맞추지 않는다.
|
|
2060
|
+
- **`size` 는 높이다.** 로고는 가로로 길어 정사각으로 그리면 찌그러진다 — 폭은 비율에서 저절로 나오므로 주지 않는다. `vertical` 에서는 두 줄 전체의 높이라, 같은 `size` 면 워드마크가 가로보다 작다.
|
|
2061
|
+
- **로고 자리의 폭이 정해져 있으면 `size="auto"` 로 그 폭을 채운다**(`SGnb` `header="fix"` 의 로고 칸). 높이는 비율에서 나온다. 폭을 채우려고 `className`·`style` 로 svg 를 덮지 않는다. **부모에 폭이 없는 자리에는 쓰지 않는다** — 기준을 잃어 브라우저 기본 크기(300px)로 그려진다. `header="full"` 의 로고 칸(140px 고정)에서도 쓰지 않는다 — 거기서는 높이로 주고 칸 안에 들어가는 크기를 고른다.
|
|
2060
2062
|
- **색을 주지 않으면 브랜드 색이다.** `SIcon` 과 달리 currentColor 를 상속하지 않는다 — 로고가 주변 글자색을 따라 물들면 브랜드 색이 화면마다 달라진다. **비활성처럼 물러나야 하는 자리에서만** `color` 를 준다. 주면 워드마크와 서비스 표기가 모두 그 한 색이 된다(`mode` 보다 우선한다).
|
|
2061
2063
|
- **`label` 은 로고가 그 자리의 유일한 이름일 때만 준다**(로그인 화면·상단바). 옆이나 아래에 서비스 이름이 이미 적혀 있으면(런처 목록의 한 줄) 주지 않는다 — 같은 이름이 두 번 읽힌다.
|
|
2062
2064
|
|
|
@@ -2064,13 +2066,18 @@ const [selectedId, setSelectedId] = useState<string>();
|
|
|
2064
2066
|
✅ <SLogo size={20} /> {/* 상단바 로고 — 브랜드 색 */}
|
|
2065
2067
|
✅ <SLogo name="wms" size={20} /> {/* 서비스 로고 */}
|
|
2066
2068
|
✅ <SLogo name="wms" mode="dark" size={20} /> {/* 어두운 면 위 */}
|
|
2069
|
+
✅ <SLogo name="wms" direction="vertical" size={48} /> {/* 워드마크 아래에 표기 — 로그인 카드 */}
|
|
2067
2070
|
✅ <SLogo size={32} label="Sellmate" /> {/* 로고가 그 자리의 유일한 이름일 때 */}
|
|
2071
|
+
✅ <SGnb header="fix" logo={<SLogo name="account" mode="dark" size="auto" />} … /> {/* fix 로고 칸을 채운다 */}
|
|
2068
2072
|
✅ <SLogo name="crm" size={12} color="grey_45" /> {/* 아직 못 쓰는 서비스 — 로고 전체가 한 색 */}
|
|
2069
2073
|
|
|
2070
2074
|
❌ <span><SLogo /><span>WMS</span></span> {/* 표기를 잇지 않는다 — name="wms" */}
|
|
2075
|
+
❌ <div><SLogo /><div>WMS</div></div> {/* 아래로 쌓지도 않는다 — direction="vertical" */}
|
|
2071
2076
|
❌ <SLogo name="wms" color="white" /> {/* 어두운 면이면 mode="dark" — 표기 색까지 흰색이 된다 */}
|
|
2072
2077
|
❌ <svg viewBox="0 0 347 50">…</svg> {/* 로고를 손으로 붙이지 않는다 */}
|
|
2073
2078
|
❌ <SLogo size={24} style={{ width: 120 }} /> {/* 폭은 비율이 정한다 — 찌그러진다 */}
|
|
2079
|
+
❌ <SLogo className="w-full [&>svg]:w-full!" /> {/* 폭을 채우려면 size="auto" */}
|
|
2080
|
+
❌ <SGnb header="full" logo={<SLogo size="auto" />} … /> {/* full 로고 칸(140px)에서는 높이로 준다 */}
|
|
2074
2081
|
❌ <SLogo color="grey_45" /> {/* 물러날 이유가 없으면 브랜드 색 그대로 둔다 */}
|
|
2075
2082
|
```
|
|
2076
2083
|
|
|
@@ -2256,13 +2263,14 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
2256
2263
|
|
|
2257
2264
|
| `header` | 상단바 배치 | 로고 폭 | `topContent` |
|
|
2258
2265
|
| --- | --- | --- | --- |
|
|
2259
|
-
| `"fix"` (기본) | `[런처 · 로고 … 폴드]` — 상단바가 GNB 컬럼 안에 있고 폴드가 컬럼 오른쪽 끝 |
|
|
2266
|
+
| `"fix"` (기본) | `[런처 · 로고 … 폴드]` — 상단바가 GNB 컬럼 안에 있고 폴드가 컬럼 오른쪽 끝 | 런처와 폴드 사이 남은 폭 (메뉴 폭을 따른다) | **렌더되지 않는다** (놓을 자리가 없다) |
|
|
2260
2267
|
| `"full"` | `[런처 · 폴드 · 로고 · topContent … system]` — 상단바가 화면 전폭이고 `system` 은 오른쪽 끝 | **140px 고정** (런처 없으면 172px) | 로고 오른쪽 남는 폭 전체 |
|
|
2261
2268
|
|
|
2262
2269
|
- `topContent` 는 상단바 로고 오른쪽 슬롯이다. 전역 검색처럼 **모든 페이지에 공통인 것만** 넣는다. 페이지별 액션은 여기가 아니라 §4-2 의 `STableBar` 로 간다.
|
|
2263
2270
|
- **계정·알림·설정·도메인·서비스 전환은 `topContent` 에 손으로 만들지 않는다.** `header="full"` 이면 `system` 슬롯의 조각들이 상단바 오른쪽 끝으로 올라오므로, 그것들은 전부 `SGnbSystem` 이 그린다 (바로 아래 절).
|
|
2264
2271
|
- 슬롯이 남는 폭을 통째로 받으므로 **정렬은 안에서 직접 잡는다** (좌측 정렬 + 우측은 `ml-auto`).
|
|
2265
|
-
- `header="
|
|
2272
|
+
- `header="fix"` 에서 로고 자리는 런처와 폴드 버튼 사이의 남은 폭이다. **`SLogo size="auto"` 를 넣으면 그 폭을 채운다** — 메뉴 폭을 바꾸거나 로고 종류가 바뀌어도 폭에 맞춰진다. 높이(`size`)로 준 로고가 그보다 넓으면 잘린다.
|
|
2273
|
+
- `header="full"` 에서 로고 자리는 140px 로 고정된다 — 로고 내용이 바뀌어도 `topContent` 시작점이 흔들리지 않게 하기 위함이다. 로고가 그보다 넓으면 잘리므로 이 폭에 맞춰 준비한다. **여기서는 `SLogo size="auto"` 를 쓰지 않는다** — 높이(`size`)로 주고 140px 안에 들어가는 크기를 고른다.
|
|
2266
2274
|
- `launcher` 를 주지 않으면 런처가 렌더되지 않고, 그 자리(버튼 + 간격)를 로고 슬롯이 이어받아 172px 가 된다. `topContent` 시작점은 런처 유무와 관계없이 같은 자리다.
|
|
2267
2275
|
- **런처 버튼은 서비스 목록의 트리거다.** `launcher.items` 에 옮겨 갈 서비스를 **키와 주소로** 넘기면 버튼 아래로 목록이 뜨고, 고른 서비스가 새 탭에서 열린다. 셀메이트 콘솔로 가는 줄은 `launcher.consoleHref` 로 붙는다 — 팝오버도 이동도 손으로 만들지 않는다 (§3-5-9).
|
|
2268
2276
|
|
|
@@ -2958,9 +2966,10 @@ export default function LoginPage() {
|
|
|
2958
2966
|
// 여백은 카드가 최소 폭을 지킬 수 있는 값으로 둔다 — 카드 폭은 className 으로 박지 않는다
|
|
2959
2967
|
<div className="flex h-screen items-stretch justify-center bg-bg-neutralLight p-sd-24">
|
|
2960
2968
|
<SLoginCard
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2969
|
+
// 제품은 서비스 키로 고른다 — 카드가 그 서비스의 세로 로고를 그린다. 제품명을 글자로 넘기지 않는다
|
|
2970
|
+
service="account"
|
|
2971
|
+
title="쇼핑몰 대표님을 위한 정부·세무 도우미입니다."
|
|
2972
|
+
description="(세금 신고 일정과 지원사업 소식을 한곳에서 챙겨 드립니다.)"
|
|
2964
2973
|
// 로그인 버튼은 카드가 그린다 — 동작만 넘긴다
|
|
2965
2974
|
onLogin={() => navigate('/auth/sso')}
|
|
2966
2975
|
footerNote="계정이 없다면 담당자에게 문의를 요청해 주세요."
|
|
@@ -2988,7 +2997,7 @@ export default function LoginPage() {
|
|
|
2988
2997
|
|
|
2989
2998
|
| Prop | 용도 |
|
|
2990
2999
|
| --- | --- |
|
|
2991
|
-
| `
|
|
3000
|
+
| `service` | 제품 — `SLogo` 의 로고명(`account` · `wms` · `chat` …, `SLogoName`). 카드 맨 위에 그 서비스의 세로 로고가 선다 |
|
|
2992
3001
|
| `title` | 제품을 한 줄로 소개하는 문장 |
|
|
2993
3002
|
| `description` | 소개 바로 아래 붙는 보조 설명. 소개와 한 문단으로 읽힌다 — 없으면 생략한다 |
|
|
2994
3003
|
| `onLogin` | 로그인 버튼을 눌렀을 때. **버튼은 카드가 그리므로 동작만 넘긴다** — 문구·색·크기는 세 제품에서 같아야 한다 |
|
|
@@ -3001,7 +3010,12 @@ export default function LoginPage() {
|
|
|
3001
3010
|
|
|
3002
3011
|
**크기는 부모가 정한다 — `className` 으로 폭을 박지 않는다.** 카드는 폭을 368~640px 사이에서 부모에 맞추고 높이도 부모가 준 만큼 채운다. 밖에서 고정하면 상하한이 무의미해져, 좁은 화면에서 함께 좁아져야 할 카드가 그대로 남아 넘친다. 좁게 세워야 하면 카드가 아니라 바깥 한 겹을 좁힌다.
|
|
3003
3012
|
|
|
3004
|
-
|
|
3013
|
+
**로고와 로그인 버튼은 카드가 직접 그린다.** 로고는 `service` 키로 고르면 카드가 그 서비스의 세로 로고(`SLogo direction="vertical"`)를 크기·접근성 이름까지 정해 세운다 — **제품명을 글자로 넘기거나 로고를 따로 얹지 않는다.** 표기의 서체·자간·색은 원본 로고가 정한다. 버튼은 모든 제품이 같은 문구(`통합 계정으로 로그인`)로 서므로 넘길 것이 없다. 앱이 주는 것은 서비스 키·문구·`onLogin` 동작뿐이다.
|
|
3014
|
+
|
|
3015
|
+
```tsx
|
|
3016
|
+
✅ <SLoginCard service="account" title="…" onLogin={login} />
|
|
3017
|
+
❌ <SLoginCard service="sellmate" title={<><b>Account</b> …</>} /> {/* 제품명을 글자로 잇지 않는다 — service="account" */}
|
|
3018
|
+
```
|
|
3005
3019
|
|
|
3006
3020
|
**로그인 카드 옆에 다른 블록을 두지 않는다.** 이 화면에서 할 일은 로그인 하나이고, 옆에 공지·배너가 붙는 순간 그 뜻이 깨진다. 안내가 필요하면 `description` 이나 `footerNote` 로 넣는다.
|
|
3007
3021
|
|
|
@@ -3808,6 +3822,7 @@ export interface SBarChartTooltipCategory {
|
|
|
3808
3822
|
| `inputStyle?` | `CSSProperties` | — | |
|
|
3809
3823
|
| `label?` | `string` | — | |
|
|
3810
3824
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
3825
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
3811
3826
|
| `labelWidth?` | `number \| string` | — | |
|
|
3812
3827
|
| `icon?` | `SIconName` | — | |
|
|
3813
3828
|
| `iconColor?` | `SColor` | — | |
|
|
@@ -4948,6 +4963,7 @@ export interface SChipFilterDatePreset {
|
|
|
4948
4963
|
| `dropdownMinWidth?` | `number \| string` | `200` | 드롭다운 최소 너비 (숫자=px) |
|
|
4949
4964
|
| `label?` | `string` | — | |
|
|
4950
4965
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
4966
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
4951
4967
|
| `labelWidth?` | `number \| string` | — | |
|
|
4952
4968
|
| `hint?` | `string` | — | |
|
|
4953
4969
|
| `errorMessage?` | `string` | — | |
|
|
@@ -5199,6 +5215,7 @@ export const CONTEXT_ALERT_INTENTS = [
|
|
|
5199
5215
|
| `status?` | `SFieldStatus` | — | |
|
|
5200
5216
|
| `label?` | `string` | — | |
|
|
5201
5217
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
5218
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
5202
5219
|
| `labelWidth?` | `number \| string` | — | |
|
|
5203
5220
|
| `icon?` | `SIconName` | — | |
|
|
5204
5221
|
| `iconColor?` | `SColor` | — | |
|
|
@@ -5294,6 +5311,7 @@ export type SDatePickerSize = SFieldSize;
|
|
|
5294
5311
|
| `status?` | `SFieldStatus` | — | |
|
|
5295
5312
|
| `label?` | `string` | — | |
|
|
5296
5313
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
5314
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
5297
5315
|
| `labelWidth?` | `number \| string` | — | |
|
|
5298
5316
|
| `icon?` | `SIconName` | — | |
|
|
5299
5317
|
| `iconColor?` | `SColor` | — | |
|
|
@@ -5853,6 +5871,7 @@ export interface SDropdownButtonItem {
|
|
|
5853
5871
|
| `editorStyle?` | `CSSProperties` | — | 편집 영역 style |
|
|
5854
5872
|
| `label?` | `string` | — | |
|
|
5855
5873
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
5874
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
5856
5875
|
| `labelWidth?` | `number \| string` | — | |
|
|
5857
5876
|
| `icon?` | `SIconName` | — | 레이블 영역 아이콘 |
|
|
5858
5877
|
| `iconColor?` | `SColor` | — | |
|
|
@@ -6086,6 +6105,7 @@ export interface SExpansionItemRenderState {
|
|
|
6086
6105
|
|------|------|---------|-------------|
|
|
6087
6106
|
| `name?` | `string` | — | 폼 연동용 name 속성 |
|
|
6088
6107
|
| `label?` | `string` | `''` | 레이블 텍스트 |
|
|
6108
|
+
| `subLabel?` | `string` | `''` | 보조 레이블. 레이블 오른쪽 같은 줄에 붙는다 (예: `(선택)`, `최대 50자`). 레이블보다 한 단계 약하게 보이도록 기본 타이포(body/sm/medium)·`fg.secondary` 색을 쓴다. 레이블 폭이 모자라면 레이블이 먼저 말줄임되고 보조 레이블은 그대로 남는다. `label` 이 없으면(`addonLabel` 만 있을 때 포함) 그려지지 않는다. |
|
|
6089
6109
|
| `icon?` | `SIconName` | — | 레이블 영역 아이콘명 (크기는 size 토큰 16px 고정) |
|
|
6090
6110
|
| `iconColor?` | `SColor` | — | 레이블 영역 아이콘 색상. 미지정 시 currentColor 상속 |
|
|
6091
6111
|
| `labelTooltip?` | `string` | `''` | 레이블 툴팁 텍스트 |
|
|
@@ -6208,6 +6228,7 @@ export type SFieldStatus = 'default' | 'pass' | 'error';
|
|
|
6208
6228
|
| `size?` | `SFieldSize` | `'sm'` | |
|
|
6209
6229
|
| `label?` | `string` | — | |
|
|
6210
6230
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
6231
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
6211
6232
|
| `labelWidth?` | `number \| string` | — | |
|
|
6212
6233
|
| `icon?` | `SIconName` | — | |
|
|
6213
6234
|
| `iconColor?` | `SColor` | — | |
|
|
@@ -6479,7 +6500,7 @@ export type SGhostButtonIntent = 'default' | 'danger' | 'action' | 'subAction' |
|
|
|
6479
6500
|
| `value?` | `string` | `''` | 현재 선택된 아이템 value |
|
|
6480
6501
|
| `folded?` | `boolean` | — | 접힘(레일) 상태. 미지정 시 SLayout 의 folded 를 따른다. |
|
|
6481
6502
|
| `launcher?` | `SGnbLauncher` | — | 앱런처(그리드) 버튼. 미지정 시 런처 버튼을 렌더하지 않는다. 접힘 레일(fix)에는 폴드 버튼만 남으므로 표시되지 않는다. |
|
|
6482
|
-
| `logo?` | `ReactNode` | — | 상단바 로고 영역 (slot). header="full"
|
|
6503
|
+
| `logo?` | `ReactNode` | — | 상단바 로고 영역 (slot). - `header="fix"` : 런처와 폴드 버튼 사이의 남은 폭이 로고 칸이다. `SLogo size="auto"` 를 넣으면 그 폭을 채운다(메뉴 폭을 바꿔도 따라온다). 넘치는 로고는 잘린다. - `header="full"` : 폭이 140px 로 고정된다. 여기서는 `size="auto"` 를 쓰지 않는다 — 높이(`size`)로 주고 140px 안에 들어가는 크기를 고른다. |
|
|
6483
6504
|
| `topContent?` | `ReactNode` | — | 상단바 로고 오른쪽 슬롯 (검색·액션 등). 로고와 16px 띄고 남는 폭을 모두 차지하므로 안에서 자유롭게 정렬한다. 상단바가 전폭인 header="full" 에서만 렌더된다 (fix 는 상단바가 좁은 GNB 컬럼 안이라 놓을 자리가 없다). |
|
|
6484
6505
|
| `railTop?` | `ReactNode` | — | 레일 상단 고정 슬롯. 레일 아이템이 많아 넘치면 아이템 목록(ul)만 스크롤되고 이 슬롯은 레일 상단(상단바 바로 아래)에 붙어 고정된다. showRail 일 때만 렌더된다. |
|
|
6485
6506
|
| `railFooter?` | `ReactNode` | — | 레일 하단 고정 슬롯. 레일 아이템이 많아 넘치면 아이템 목록(ul)만 스크롤되고 이 슬롯은 레일 하단에 붙어 고정된다. showRail 일 때만 렌더된다. |
|
|
@@ -6992,6 +7013,7 @@ export const IMAGE_FITS = ['cover', 'contain', 'fill', 'none', 'scale-down'] as
|
|
|
6992
7013
|
| `inputStyle?` | `CSSProperties` | — | 내부 input 요소 style |
|
|
6993
7014
|
| `label?` | `string` | — | |
|
|
6994
7015
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다) |
|
|
7016
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
6995
7017
|
| `labelWidth?` | `number \| string` | — | |
|
|
6996
7018
|
| `labelTooltip?` | `string` | — | 레이블 툴팁 텍스트 |
|
|
6997
7019
|
| `labelTooltipProps?` | `Partial<STooltipProps>` | — | 레이블 툴팁 상세 옵션 |
|
|
@@ -7663,7 +7685,7 @@ export type SLoadingModalState = 'loading' | 'error';
|
|
|
7663
7685
|
|
|
7664
7686
|
| Prop | Type | Default | Description |
|
|
7665
7687
|
|------|------|---------|-------------|
|
|
7666
|
-
| `
|
|
7688
|
+
| `service` | `SLogoName` | — | 제품 — 그 서비스의 **세로 로고**([셀메이트 워드마크 + 서비스 표기])가 카드 맨 위에 선다. 제품명을 글자로 넘기지 않는다 — 표기의 서체·자간·색은 원본 로고가 정한다. |
|
|
7667
7689
|
| `title` | `ReactNode` | — | 제품을 한 줄로 소개하는 문장 |
|
|
7668
7690
|
| `description?` | `ReactNode` | — | 소개 문장 바로 아래 붙는 보조 설명. 소개와 한 덩어리로 읽힌다 |
|
|
7669
7691
|
| `footerNote?` | `ReactNode` | — | 버튼 아래 안내 문구 (예: 계정 발급 문의 안내) |
|
|
@@ -7698,7 +7720,8 @@ export type SLoadingModalState = 'loading' | 'error';
|
|
|
7698
7720
|
|------|------|---------|-------------|
|
|
7699
7721
|
| `name?` | `SLogoName` | `'sellmate'` | 로고명 — 셀메이트 본체(`sellmate`) 또는 서비스(`wms` · `account` · `crm` …). 서비스 로고는 [셀메이트 워드마크 + 서비스 표기]가 한 덩어리로 나온다 — 앱이 표기를 잇지 않는다. |
|
|
7700
7722
|
| `mode?` | `SLogoMode` | `'light'` | 로고가 서는 배경. 밝은 면에는 `light`(남색 워드마크), 어두운 면에는 `dark`(흰 워드마크). 서비스 표기 색도 원본이 모드마다 정한 값으로 바뀐다. |
|
|
7701
|
-
| `
|
|
7723
|
+
| `direction?` | `SLogoDirection` | `'horizontal'` | 배치. `horizontal` 은 워드마크 오른쪽에 서비스 표기, `vertical` 은 워드마크 아래 가운데에 표기 (로그인 카드처럼 폭이 좁고 로고가 가운데 서는 자리). `sellmate` 는 표기가 없어 어느 쪽이든 같다. 표기 색이 가로와 다른 로고도 있다(POS 세로는 light 에서도 `#4886FF`) — 원본을 따른다. |
|
|
7724
|
+
| `size?` | `number \| 'auto' \| (string & {})` | `LOGO_DEFAULT_SIZE` | **높이**(px 또는 CSS 길이). 폭은 주지 않는다 — 로고 비율에서 저절로 나온다. `SIcon` 의 `size` 와 달리 정사각이 아니다(로고는 가로로 길다). `vertical` 은 두 줄 전체의 높이다 — 같은 `size` 면 워드마크가 가로보다 작게 선다. `'auto'` 면 높이를 정하지 않는다 — **부모 폭을 꽉 채우고 높이는 비율로 따라온다.** 로고 자리의 폭이 정해진 곳(`SGnb` `header="fix"` 의 로고 칸)에서 쓴다. 부모에 폭이 없으면 기준을 잃어 브라우저 기본 크기(300px)로 그려진다. |
|
|
7702
7725
|
| `color?` | `SColor` | — | 색. 팔레트 키(`grey_45`, `red_95` …) 또는 임의 CSS 색상. **워드마크와 서비스 표기가 모두 이 한 색이 된다.** 미지정 시 **브랜드 색**(`mode` 가 정한 워드마크 색 + 서비스 색)이다 — `SIcon` 과 달리 currentColor 를 상속하지 않는다. 로고가 주변 글자색을 따라 물들면 브랜드 색이 화면마다 달라지기 때문이다. 비활성처럼 물러나야 하는 자리에서만 색을 준다. |
|
|
7703
7726
|
| `label?` | `string` | — | 접근성 라벨. 없으면 `aria-hidden` 이다 — 로고 옆에 서비스 이름이 이미 적혀 있는 자리 (런처 목록의 한 줄 등)에서는 이름이 두 번 읽히지 않도록 그대로 둔다. 로고가 그 자리의 유일한 이름이면(로그인 화면·상단바) 브랜드명을 넘긴다. |
|
|
7704
7727
|
| `className?` | `string` | — | |
|
|
@@ -7718,6 +7741,12 @@ export type SLogoName = (typeof LOGO_NAMES)[number];
|
|
|
7718
7741
|
export type SLogoMode = (typeof LOGO_MODES)[number];
|
|
7719
7742
|
```
|
|
7720
7743
|
|
|
7744
|
+
### SLogoDirection
|
|
7745
|
+
|
|
7746
|
+
```ts
|
|
7747
|
+
export type SLogoDirection = (typeof LOGO_DIRECTIONS)[number];
|
|
7748
|
+
```
|
|
7749
|
+
|
|
7721
7750
|
### LOGO_NAMES
|
|
7722
7751
|
|
|
7723
7752
|
```ts
|
|
@@ -7756,6 +7785,16 @@ export const LOGO_NAMES = [
|
|
|
7756
7785
|
export const LOGO_MODES = ['light', 'dark'] as const;
|
|
7757
7786
|
```
|
|
7758
7787
|
|
|
7788
|
+
### LOGO_DIRECTIONS
|
|
7789
|
+
|
|
7790
|
+
```ts
|
|
7791
|
+
/**
|
|
7792
|
+
* 로고의 배치. `horizontal` 은 워드마크 오른쪽에 서비스 표기, `vertical` 은 워드마크 아래 가운데에 표기.
|
|
7793
|
+
* 모든 서비스 로고가 세로 원본을 갖는다. 셀메이트 본체는 표기가 없어 세로여도 모양이 같다.
|
|
7794
|
+
*/
|
|
7795
|
+
export const LOGO_DIRECTIONS = ['horizontal', 'vertical'] as const;
|
|
7796
|
+
```
|
|
7797
|
+
|
|
7759
7798
|
## Dependencies
|
|
7760
7799
|
|
|
7761
7800
|
### Used by
|
|
@@ -8148,6 +8187,7 @@ function OrderModal({ open, onOpenChange, onClose, modalRef, orderId }: OrderMod
|
|
|
8148
8187
|
| `hovered?` | `boolean` | — | 호버 상태를 밖에서 지정한다 — 강조는 `focused` 와 같다 (SField 로 그대로 넘어간다) |
|
|
8149
8188
|
| `label?` | `string` | — | |
|
|
8150
8189
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
8190
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
8151
8191
|
| `labelWidth?` | `number \| string` | — | |
|
|
8152
8192
|
| `icon?` | `SIconName` | — | |
|
|
8153
8193
|
| `iconColor?` | `SColor` | — | |
|
|
@@ -8785,6 +8825,7 @@ export type SRadioValue = string | number | boolean;
|
|
|
8785
8825
|
| `size?` | `SRadioButtonSize` | `'sm'` | 크기 |
|
|
8786
8826
|
| `disabled?` | `boolean` | `false` | 전체 비활성 |
|
|
8787
8827
|
| `name?` | `string` | — | input name 속성 |
|
|
8828
|
+
| `showTooltip?` | `boolean` | `false` | 옵션 호버 시 툴팁 노출. 문구는 옵션별 `tooltip` 으로 주며, 문구가 없는 옵션은 툴팁을 띄우지 않는다. 툴팁 타입은 `accent` 고정이다. |
|
|
8788
8829
|
| `className?` | `string` | — | |
|
|
8789
8830
|
| `style?` | `CSSProperties` | — | |
|
|
8790
8831
|
|
|
@@ -8803,6 +8844,8 @@ export interface SRadioButtonOption {
|
|
|
8803
8844
|
value: string | number;
|
|
8804
8845
|
label: string;
|
|
8805
8846
|
disabled?: boolean;
|
|
8847
|
+
/** 호버 시 툴팁 문구. `showTooltip` 이 켜져 있을 때만 노출된다 */
|
|
8848
|
+
tooltip?: string;
|
|
8806
8849
|
}
|
|
8807
8850
|
```
|
|
8808
8851
|
|
|
@@ -8818,6 +8861,10 @@ export type SRadioButtonSize = 'xs' | 'sm' | 'md';
|
|
|
8818
8861
|
|
|
8819
8862
|
- [SChipFilter](../SChipFilter)
|
|
8820
8863
|
|
|
8864
|
+
### Depends on
|
|
8865
|
+
|
|
8866
|
+
- [STooltip](../STooltip)
|
|
8867
|
+
|
|
8821
8868
|
### Graph
|
|
8822
8869
|
|
|
8823
8870
|
---
|
|
@@ -9101,6 +9148,7 @@ export type SSectionHeaderCardChildren = ReactNode;
|
|
|
9101
9148
|
| `searchDebounce?` | `number` | `DEFAULT_SEARCH_DEBOUNCE` | `serverSearch` 에서 검색어를 서버로 넘기기 전 기다리는 시간(ms) |
|
|
9102
9149
|
| `label?` | `string` | — | |
|
|
9103
9150
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
9151
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
9104
9152
|
| `labelWidth?` | `number \| string` | — | |
|
|
9105
9153
|
| `icon?` | `SIconName` | — | 레이블 영역 아이콘 |
|
|
9106
9154
|
| `iconColor?` | `SColor` | — | |
|
|
@@ -9973,6 +10021,7 @@ export type STextLinkSize = 'sm' | 'md' | 'lg';
|
|
|
9973
10021
|
| `textareaStyle?` | `CSSProperties` | — | 내부 textarea 요소 style |
|
|
9974
10022
|
| `label?` | `string` | — | |
|
|
9975
10023
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
10024
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
9976
10025
|
| `labelWidth?` | `number \| string` | — | |
|
|
9977
10026
|
| `icon?` | `SIconName` | — | 레이블 영역 아이콘 |
|
|
9978
10027
|
| `iconColor?` | `SColor` | — | |
|
|
@@ -10036,6 +10085,7 @@ export type STextLinkSize = 'sm' | 'md' | 'lg';
|
|
|
10036
10085
|
| `status?` | `SFieldStatus` | — | |
|
|
10037
10086
|
| `label?` | `string` | — | |
|
|
10038
10087
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
10088
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
10039
10089
|
| `labelWidth?` | `number \| string` | — | |
|
|
10040
10090
|
| `icon?` | `SIconName` | — | |
|
|
10041
10091
|
| `iconColor?` | `SColor` | — | |
|
|
@@ -10112,6 +10162,7 @@ export type STimePickerSize = 'sm' | 'md';
|
|
|
10112
10162
|
| `status?` | `SFieldStatus` | — | |
|
|
10113
10163
|
| `label?` | `string` | — | |
|
|
10114
10164
|
| `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
|
|
10165
|
+
| `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
|
|
10115
10166
|
| `labelWidth?` | `number \| string` | — | |
|
|
10116
10167
|
| `icon?` | `SIconName` | — | |
|
|
10117
10168
|
| `iconColor?` | `SColor` | — | |
|
package/dist/llms.txt
CHANGED
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
| **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SSystemActionButton`(GNB system 패널에 한 줄씩 쌓는 액션 행 — 버튼 고르기는 §3-5) `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SLauncherListBox`(런처 버튼을 눌러 뜨는 서비스 목록) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SLoginCard`(통합 계정 로그인 화면의 카드) `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
|
|
56
56
|
| **내비게이션** | `STabs` `SPagination` `SStepper` |
|
|
57
57
|
| **차트** | `SBarChart`(막대 그래프 — 항목끼리 크기를 견준다. `stacked` 로 항목 안의 구성까지) `SLineChart`(꺾은선 그래프 — 순서가 있는 항목의 추이를 본다. `area` 로 크기까지, `stacked` 로 구성까지) `SPieChart`(원그래프 — 한 시점의 전체를 몇 개의 몫으로 나눈다) `SDonutChart`(도넛 그래프 — 가운데가 빈 원그래프. 구멍에 글자를 두지 않는다) |
|
|
58
|
-
| **표시·상태** | `STag` `SBadge` `SIcon` `SLogo`(셀메이트·서비스 로고를 아이콘처럼 — name 으로 서비스, mode 로 배경, size 는 높이다) `SImage` `SCallout` `SContextAlert`(한 줄짜리 맥락 알림 — 오른쪽에 후속 동작 버튼) `SGuide` |
|
|
58
|
+
| **표시·상태** | `STag` `SBadge` `SIcon` `SLogo`(셀메이트·서비스 로고를 아이콘처럼 — name 으로 서비스, mode 로 배경, direction 으로 가로·세로, size 는 높이다 — `"auto"` 면 부모 폭을 채운다) `SImage` `SCallout` `SContextAlert`(한 줄짜리 맥락 알림 — 오른쪽에 후속 동작 버튼) `SGuide` |
|
|
59
59
|
| **진행·로딩** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
|
|
60
60
|
| **오버레이** | `STooltip` `SPopover` `SPopup` `SDrawer` `SPortal` |
|
|
61
61
|
| **모달** | `SModal.confirm()` `SModal.create()` + `SActionModal` `SConfirmModal` `SModalOutlet`(앱 루트 1회) |
|
|
@@ -586,7 +586,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
586
586
|
| 상태·분류를 라벨로 찍는다 | `STag` | §3-1 |
|
|
587
587
|
| 색 점만으로 상태를 찍는다 | `SBadge` | §3-1 |
|
|
588
588
|
| 아이콘을 넣는다 | `SIcon` | |
|
|
589
|
-
| 셀메이트·서비스 로고를 넣는다 | `SLogo` (`name` 에 서비스, 어두운 면이면 `mode="dark"`. `size` 는
|
|
589
|
+
| 셀메이트·서비스 로고를 넣는다 | `SLogo` (`name` 에 서비스, 어두운 면이면 `mode="dark"`, 표기를 아래에 두려면 `direction="vertical"`. `size` 는 **높이**이고(`"auto"` 면 부모 폭을 채운다), 색을 주지 않으면 브랜드 색이다) | §3-7-14 |
|
|
590
590
|
| 사진·썸네일을 보여준다 (로딩·실패 상태 포함) | `SImage` | §3-7-12 |
|
|
591
591
|
| 작은 썸네일을 호버해서 크게 확인하게 한다 | `SImage previewOnHover` | 툴팁·팝오버로 직접 만들지 않는다 — 미리보기는 마우스를 통과시키고 원본의 로딩·실패도 스스로 표현한다. §3-7-12 |
|
|
592
592
|
| 문장 안에서 다른 화면으로 보낸다 | `STextLink` | §3-5-6 |
|
|
@@ -2057,7 +2057,9 @@ const [selectedId, setSelectedId] = useState<string>();
|
|
|
2057
2057
|
|
|
2058
2058
|
- **`name` 에 서비스를 넣으면 그 서비스 로고가 나온다**(`sellmate` · `wms` · `chat` · `plm` · `account` · `people` · `crm` · `work` · `pos` · `console` — `SLogoName`). [셀메이트 워드마크 + 서비스 표기]가 한 덩어리다. **워드마크 옆에 표기를 앱이 따로 잇지 않는다** — 표기의 서체·자간·색이 원본과 어긋난다.
|
|
2059
2059
|
- **배경에 맞춰 `mode` 를 준다.** 밝은 면은 `light`(기본), 어두운 면(dark GNB 등)은 `dark`. 워드마크 색과 서비스 표기 색을 모드가 정하므로 색을 직접 주지 않는다.
|
|
2060
|
-
-
|
|
2060
|
+
- **표기를 워드마크 아래에 두려면 `direction="vertical"` 을 준다**(로그인 카드처럼 폭이 좁고 로고가 가운데 서는 자리). 워드마크 아래에 표기를 앱이 따로 쌓지 않는다. 모든 서비스 로고가 세로를 가진다(`sellmate` 는 표기가 없어 어느 쪽이든 같다). 세로의 표기 색도 원본이 정하므로 색을 직접 맞추지 않는다.
|
|
2061
|
+
- **`size` 는 높이다.** 로고는 가로로 길어 정사각으로 그리면 찌그러진다 — 폭은 비율에서 저절로 나오므로 주지 않는다. `vertical` 에서는 두 줄 전체의 높이라, 같은 `size` 면 워드마크가 가로보다 작다.
|
|
2062
|
+
- **로고 자리의 폭이 정해져 있으면 `size="auto"` 로 그 폭을 채운다**(`SGnb` `header="fix"` 의 로고 칸). 높이는 비율에서 나온다. 폭을 채우려고 `className`·`style` 로 svg 를 덮지 않는다. **부모에 폭이 없는 자리에는 쓰지 않는다** — 기준을 잃어 브라우저 기본 크기(300px)로 그려진다. `header="full"` 의 로고 칸(140px 고정)에서도 쓰지 않는다 — 거기서는 높이로 주고 칸 안에 들어가는 크기를 고른다.
|
|
2061
2063
|
- **색을 주지 않으면 브랜드 색이다.** `SIcon` 과 달리 currentColor 를 상속하지 않는다 — 로고가 주변 글자색을 따라 물들면 브랜드 색이 화면마다 달라진다. **비활성처럼 물러나야 하는 자리에서만** `color` 를 준다. 주면 워드마크와 서비스 표기가 모두 그 한 색이 된다(`mode` 보다 우선한다).
|
|
2062
2064
|
- **`label` 은 로고가 그 자리의 유일한 이름일 때만 준다**(로그인 화면·상단바). 옆이나 아래에 서비스 이름이 이미 적혀 있으면(런처 목록의 한 줄) 주지 않는다 — 같은 이름이 두 번 읽힌다.
|
|
2063
2065
|
|
|
@@ -2065,13 +2067,18 @@ const [selectedId, setSelectedId] = useState<string>();
|
|
|
2065
2067
|
✅ <SLogo size={20} /> {/* 상단바 로고 — 브랜드 색 */}
|
|
2066
2068
|
✅ <SLogo name="wms" size={20} /> {/* 서비스 로고 */}
|
|
2067
2069
|
✅ <SLogo name="wms" mode="dark" size={20} /> {/* 어두운 면 위 */}
|
|
2070
|
+
✅ <SLogo name="wms" direction="vertical" size={48} /> {/* 워드마크 아래에 표기 — 로그인 카드 */}
|
|
2068
2071
|
✅ <SLogo size={32} label="Sellmate" /> {/* 로고가 그 자리의 유일한 이름일 때 */}
|
|
2072
|
+
✅ <SGnb header="fix" logo={<SLogo name="account" mode="dark" size="auto" />} … /> {/* fix 로고 칸을 채운다 */}
|
|
2069
2073
|
✅ <SLogo name="crm" size={12} color="grey_45" /> {/* 아직 못 쓰는 서비스 — 로고 전체가 한 색 */}
|
|
2070
2074
|
|
|
2071
2075
|
❌ <span><SLogo /><span>WMS</span></span> {/* 표기를 잇지 않는다 — name="wms" */}
|
|
2076
|
+
❌ <div><SLogo /><div>WMS</div></div> {/* 아래로 쌓지도 않는다 — direction="vertical" */}
|
|
2072
2077
|
❌ <SLogo name="wms" color="white" /> {/* 어두운 면이면 mode="dark" — 표기 색까지 흰색이 된다 */}
|
|
2073
2078
|
❌ <svg viewBox="0 0 347 50">…</svg> {/* 로고를 손으로 붙이지 않는다 */}
|
|
2074
2079
|
❌ <SLogo size={24} style={{ width: 120 }} /> {/* 폭은 비율이 정한다 — 찌그러진다 */}
|
|
2080
|
+
❌ <SLogo className="w-full [&>svg]:w-full!" /> {/* 폭을 채우려면 size="auto" */}
|
|
2081
|
+
❌ <SGnb header="full" logo={<SLogo size="auto" />} … /> {/* full 로고 칸(140px)에서는 높이로 준다 */}
|
|
2075
2082
|
❌ <SLogo color="grey_45" /> {/* 물러날 이유가 없으면 브랜드 색 그대로 둔다 */}
|
|
2076
2083
|
```
|
|
2077
2084
|
|
|
@@ -2257,13 +2264,14 @@ import { SModalOutlet } from 'sellmate-design-system-react';
|
|
|
2257
2264
|
|
|
2258
2265
|
| `header` | 상단바 배치 | 로고 폭 | `topContent` |
|
|
2259
2266
|
| --- | --- | --- | --- |
|
|
2260
|
-
| `"fix"` (기본) | `[런처 · 로고 … 폴드]` — 상단바가 GNB 컬럼 안에 있고 폴드가 컬럼 오른쪽 끝 |
|
|
2267
|
+
| `"fix"` (기본) | `[런처 · 로고 … 폴드]` — 상단바가 GNB 컬럼 안에 있고 폴드가 컬럼 오른쪽 끝 | 런처와 폴드 사이 남은 폭 (메뉴 폭을 따른다) | **렌더되지 않는다** (놓을 자리가 없다) |
|
|
2261
2268
|
| `"full"` | `[런처 · 폴드 · 로고 · topContent … system]` — 상단바가 화면 전폭이고 `system` 은 오른쪽 끝 | **140px 고정** (런처 없으면 172px) | 로고 오른쪽 남는 폭 전체 |
|
|
2262
2269
|
|
|
2263
2270
|
- `topContent` 는 상단바 로고 오른쪽 슬롯이다. 전역 검색처럼 **모든 페이지에 공통인 것만** 넣는다. 페이지별 액션은 여기가 아니라 §4-2 의 `STableBar` 로 간다.
|
|
2264
2271
|
- **계정·알림·설정·도메인·서비스 전환은 `topContent` 에 손으로 만들지 않는다.** `header="full"` 이면 `system` 슬롯의 조각들이 상단바 오른쪽 끝으로 올라오므로, 그것들은 전부 `SGnbSystem` 이 그린다 (바로 아래 절).
|
|
2265
2272
|
- 슬롯이 남는 폭을 통째로 받으므로 **정렬은 안에서 직접 잡는다** (좌측 정렬 + 우측은 `ml-auto`).
|
|
2266
|
-
- `header="
|
|
2273
|
+
- `header="fix"` 에서 로고 자리는 런처와 폴드 버튼 사이의 남은 폭이다. **`SLogo size="auto"` 를 넣으면 그 폭을 채운다** — 메뉴 폭을 바꾸거나 로고 종류가 바뀌어도 폭에 맞춰진다. 높이(`size`)로 준 로고가 그보다 넓으면 잘린다.
|
|
2274
|
+
- `header="full"` 에서 로고 자리는 140px 로 고정된다 — 로고 내용이 바뀌어도 `topContent` 시작점이 흔들리지 않게 하기 위함이다. 로고가 그보다 넓으면 잘리므로 이 폭에 맞춰 준비한다. **여기서는 `SLogo size="auto"` 를 쓰지 않는다** — 높이(`size`)로 주고 140px 안에 들어가는 크기를 고른다.
|
|
2267
2275
|
- `launcher` 를 주지 않으면 런처가 렌더되지 않고, 그 자리(버튼 + 간격)를 로고 슬롯이 이어받아 172px 가 된다. `topContent` 시작점은 런처 유무와 관계없이 같은 자리다.
|
|
2268
2276
|
- **런처 버튼은 서비스 목록의 트리거다.** `launcher.items` 에 옮겨 갈 서비스를 **키와 주소로** 넘기면 버튼 아래로 목록이 뜨고, 고른 서비스가 새 탭에서 열린다. 셀메이트 콘솔로 가는 줄은 `launcher.consoleHref` 로 붙는다 — 팝오버도 이동도 손으로 만들지 않는다 (§3-5-9).
|
|
2269
2277
|
|
|
@@ -2959,9 +2967,10 @@ export default function LoginPage() {
|
|
|
2959
2967
|
// 여백은 카드가 최소 폭을 지킬 수 있는 값으로 둔다 — 카드 폭은 className 으로 박지 않는다
|
|
2960
2968
|
<div className="flex h-screen items-stretch justify-center bg-bg-neutralLight p-sd-24">
|
|
2961
2969
|
<SLoginCard
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2970
|
+
// 제품은 서비스 키로 고른다 — 카드가 그 서비스의 세로 로고를 그린다. 제품명을 글자로 넘기지 않는다
|
|
2971
|
+
service="account"
|
|
2972
|
+
title="쇼핑몰 대표님을 위한 정부·세무 도우미입니다."
|
|
2973
|
+
description="(세금 신고 일정과 지원사업 소식을 한곳에서 챙겨 드립니다.)"
|
|
2965
2974
|
// 로그인 버튼은 카드가 그린다 — 동작만 넘긴다
|
|
2966
2975
|
onLogin={() => navigate('/auth/sso')}
|
|
2967
2976
|
footerNote="계정이 없다면 담당자에게 문의를 요청해 주세요."
|
|
@@ -2989,7 +2998,7 @@ export default function LoginPage() {
|
|
|
2989
2998
|
|
|
2990
2999
|
| Prop | 용도 |
|
|
2991
3000
|
| --- | --- |
|
|
2992
|
-
| `
|
|
3001
|
+
| `service` | 제품 — `SLogo` 의 로고명(`account` · `wms` · `chat` …, `SLogoName`). 카드 맨 위에 그 서비스의 세로 로고가 선다 |
|
|
2993
3002
|
| `title` | 제품을 한 줄로 소개하는 문장 |
|
|
2994
3003
|
| `description` | 소개 바로 아래 붙는 보조 설명. 소개와 한 문단으로 읽힌다 — 없으면 생략한다 |
|
|
2995
3004
|
| `onLogin` | 로그인 버튼을 눌렀을 때. **버튼은 카드가 그리므로 동작만 넘긴다** — 문구·색·크기는 세 제품에서 같아야 한다 |
|
|
@@ -3002,7 +3011,12 @@ export default function LoginPage() {
|
|
|
3002
3011
|
|
|
3003
3012
|
**크기는 부모가 정한다 — `className` 으로 폭을 박지 않는다.** 카드는 폭을 368~640px 사이에서 부모에 맞추고 높이도 부모가 준 만큼 채운다. 밖에서 고정하면 상하한이 무의미해져, 좁은 화면에서 함께 좁아져야 할 카드가 그대로 남아 넘친다. 좁게 세워야 하면 카드가 아니라 바깥 한 겹을 좁힌다.
|
|
3004
3013
|
|
|
3005
|
-
|
|
3014
|
+
**로고와 로그인 버튼은 카드가 직접 그린다.** 로고는 `service` 키로 고르면 카드가 그 서비스의 세로 로고(`SLogo direction="vertical"`)를 크기·접근성 이름까지 정해 세운다 — **제품명을 글자로 넘기거나 로고를 따로 얹지 않는다.** 표기의 서체·자간·색은 원본 로고가 정한다. 버튼은 모든 제품이 같은 문구(`통합 계정으로 로그인`)로 서므로 넘길 것이 없다. 앱이 주는 것은 서비스 키·문구·`onLogin` 동작뿐이다.
|
|
3015
|
+
|
|
3016
|
+
```tsx
|
|
3017
|
+
✅ <SLoginCard service="account" title="…" onLogin={login} />
|
|
3018
|
+
❌ <SLoginCard service="sellmate" title={<><b>Account</b> …</>} /> {/* 제품명을 글자로 잇지 않는다 — service="account" */}
|
|
3019
|
+
```
|
|
3006
3020
|
|
|
3007
3021
|
**로그인 카드 옆에 다른 블록을 두지 않는다.** 이 화면에서 할 일은 로그인 하나이고, 옆에 공지·배너가 붙는 순간 그 뜻이 깨진다. 안내가 필요하면 `description` 이나 `footerNote` 로 넣는다.
|
|
3008
3022
|
|
package/dist/styles.css
CHANGED
|
@@ -1350,6 +1350,9 @@
|
|
|
1350
1350
|
.w-\[72px\] {
|
|
1351
1351
|
width: 72px;
|
|
1352
1352
|
}
|
|
1353
|
+
.w-\[140px\] {
|
|
1354
|
+
width: 140px;
|
|
1355
|
+
}
|
|
1353
1356
|
.w-\[160px\] {
|
|
1354
1357
|
width: 160px;
|
|
1355
1358
|
}
|
|
@@ -1359,6 +1362,9 @@
|
|
|
1359
1362
|
.w-\[180px\] {
|
|
1360
1363
|
width: 180px;
|
|
1361
1364
|
}
|
|
1365
|
+
.w-\[196px\] {
|
|
1366
|
+
width: 196px;
|
|
1367
|
+
}
|
|
1362
1368
|
.w-\[200px\] {
|
|
1363
1369
|
width: 200px;
|
|
1364
1370
|
}
|
|
@@ -3782,9 +3788,6 @@
|
|
|
3782
3788
|
.text-\[18px\] {
|
|
3783
3789
|
font-size: 18px;
|
|
3784
3790
|
}
|
|
3785
|
-
.text-\[24px\] {
|
|
3786
|
-
font-size: 24px;
|
|
3787
|
-
}
|
|
3788
3791
|
.leading-5 {
|
|
3789
3792
|
--tw-leading: calc(var(--spacing) * 5);
|
|
3790
3793
|
line-height: calc(var(--spacing) * 5);
|
|
@@ -4465,13 +4468,32 @@
|
|
|
4465
4468
|
outline-style: var(--tw-outline-style);
|
|
4466
4469
|
outline-width: 1px;
|
|
4467
4470
|
}
|
|
4471
|
+
.outline-1 {
|
|
4472
|
+
outline-style: var(--tw-outline-style);
|
|
4473
|
+
outline-width: 1px;
|
|
4474
|
+
}
|
|
4468
4475
|
.outline-2 {
|
|
4469
4476
|
outline-style: var(--tw-outline-style);
|
|
4470
4477
|
outline-width: 2px;
|
|
4471
4478
|
}
|
|
4479
|
+
.outline-\(--sys-color-border-default\) {
|
|
4480
|
+
outline-color: var(--sys-color-border-default);
|
|
4481
|
+
}
|
|
4472
4482
|
.outline-\[var\(--color-border-accent\)\] {
|
|
4473
4483
|
outline-color: var(--color-border-accent);
|
|
4474
4484
|
}
|
|
4485
|
+
.outline-white\/20 {
|
|
4486
|
+
outline-color: color-mix(in srgb, #FFFFFF 20%, transparent);
|
|
4487
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4488
|
+
outline-color: color-mix(in oklab, var(--color-white) 20%, transparent);
|
|
4489
|
+
}
|
|
4490
|
+
}
|
|
4491
|
+
.outline-white\/40 {
|
|
4492
|
+
outline-color: color-mix(in srgb, #FFFFFF 40%, transparent);
|
|
4493
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4494
|
+
outline-color: color-mix(in oklab, var(--color-white) 40%, transparent);
|
|
4495
|
+
}
|
|
4496
|
+
}
|
|
4475
4497
|
.blur {
|
|
4476
4498
|
--tw-blur: blur(8px);
|
|
4477
4499
|
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
|
|
@@ -4556,6 +4578,10 @@
|
|
|
4556
4578
|
--tw-ease: var(--ease-out);
|
|
4557
4579
|
transition-timing-function: var(--ease-out);
|
|
4558
4580
|
}
|
|
4581
|
+
.outline-dashed {
|
|
4582
|
+
--tw-outline-style: dashed;
|
|
4583
|
+
outline-style: dashed;
|
|
4584
|
+
}
|
|
4559
4585
|
.outline-none {
|
|
4560
4586
|
--tw-outline-style: none;
|
|
4561
4587
|
outline-style: none;
|
|
@@ -6381,6 +6407,11 @@
|
|
|
6381
6407
|
flex: 1;
|
|
6382
6408
|
}
|
|
6383
6409
|
}
|
|
6410
|
+
.\[\&\>svg\]\:w-full\! {
|
|
6411
|
+
&>svg {
|
|
6412
|
+
width: 100% !important;
|
|
6413
|
+
}
|
|
6414
|
+
}
|
|
6384
6415
|
.\[\[data-drag-active\]_\&\]\:hover\:border-\(--cmp-listDraggableItem-border-default\) {
|
|
6385
6416
|
[data-drag-active] & {
|
|
6386
6417
|
&:hover {
|