sellmate-design-system-react 9.0.0-beta.60 → 9.0.0-beta.61
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 +8 -5
- package/dist/components/SBadge/README.md +1 -0
- package/dist/components/SBadge/SBadge.d.ts +1 -1
- package/dist/components/SCalendarBoard/README.md +2 -1
- package/dist/components/SCalendarBoard/calendarBoard.config.d.ts +2 -2
- package/dist/components/SCalendarBoard/types.d.ts +1 -1
- package/dist/components/SChip/README.md +25 -0
- package/dist/components/SChip/SChip.d.ts +8 -0
- package/dist/components/SChip/index.d.ts +1 -1
- package/dist/components/SDonutChart/README.md +93 -0
- package/dist/components/SDonutChart/SDonutChart.d.ts +71 -0
- package/dist/components/SDonutChart/index.d.ts +1 -0
- package/dist/components/SLineChart/lineChart.config.d.ts +3 -2
- package/dist/components/SPieChart/README.md +90 -0
- package/dist/components/SPieChart/SPieChart.d.ts +64 -0
- package/dist/components/SPieChart/index.d.ts +1 -0
- package/dist/index.cjs +439 -143
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +437 -144
- package/dist/index.js.map +1 -1
- package/dist/lib/chart/cartesian.d.ts +2 -2
- package/dist/lib/chart/radial.d.ts +78 -0
- package/dist/llms-full.txt +241 -17
- package/dist/llms.txt +28 -18
- package/dist/styles.css +82 -0
- package/dist/theme.css +62 -0
- package/eslint/scale.gen.mjs +2 -2
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
| **표·목록** | `SChatMessage`(대화의 메시지 한 건) `SChatAttachedFile`(입력창 위, 아직 보내지 않은 첨부 한 칸) `SChatFile`(대화 흐름에 선, 보낸 파일 한 칸) `SChatSystemMessage`(대화 흐름 가운데 서는 시스템 안내) `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SListItem` `SExpansionList` `SDraggableList` `SDraggableItem` `STree` |
|
|
46
46
|
| **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SSystemActionButton`(GNB system 패널에 한 줄씩 쌓는 액션 행 — 버튼 고르기는 §3-5) `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SLauncherListBox`(런처 버튼을 눌러 뜨는 서비스 목록) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SLoginCard`(통합 계정 로그인 화면의 카드) `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
|
|
47
47
|
| **내비게이션** | `STabs` `SPagination` `SStepper` |
|
|
48
|
-
| **차트** | `SBarChart`(막대 그래프 — 항목끼리 크기를 견준다. `stacked` 로 항목 안의 구성까지) `SLineChart`(꺾은선 그래프 — 순서가 있는 항목의 추이를 본다. `area` 로 크기까지, `stacked` 로 구성까지) |
|
|
48
|
+
| **차트** | `SBarChart`(막대 그래프 — 항목끼리 크기를 견준다. `stacked` 로 항목 안의 구성까지) `SLineChart`(꺾은선 그래프 — 순서가 있는 항목의 추이를 본다. `area` 로 크기까지, `stacked` 로 구성까지) `SPieChart`(원그래프 — 한 시점의 전체를 몇 개의 몫으로 나눈다) `SDonutChart`(도넛 그래프 — 몫과 함께 가운데에 합계를 적는다) |
|
|
49
49
|
| **표시·상태** | `STag` `SBadge` `SIcon` `SLogo`(브랜드 로고를 아이콘처럼 — size 는 높이다) `SImage` `SCallout` `SGuide` |
|
|
50
50
|
| **진행·로딩** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
|
|
51
51
|
| **오버레이** | `STooltip` `SPopover` `SPopup` `SDrawer` `SPortal` |
|
|
@@ -167,7 +167,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
167
167
|
| 층 | 무엇인가 | 컴포넌트 |
|
|
168
168
|
| --- | --- | --- |
|
|
169
169
|
| **셸** | 앱 전체 뼈대. 페이지가 바뀌어도 남는다 | `SLayout` `SGnb` `SGnbSystem`(GNB 맨 아래 판 · 전폭 상단바 오른쪽 끝) `SPage` `SPageHeader`(`SLayout` 안에서 `SPage` 앞에 둔다) |
|
|
170
|
-
| **블록** | `SPage` 의 직계 자식. 페이지를 세로로 쌓는 단위 | `SSectionHeaderCard` `SCard` `SChatMessage` `SChatSystemMessage` `SChatInput` `SLoginCard`(유일하게 `SPage` 밖에 선다 — 로그인 화면 자체가 자기 자리다, §4-6) `SForm` `SSplitter` `SScrollArea` `SCalendarBoard` `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SExpansionList` `SDraggableList` `STree` `SCallout` `SBarChart` `SLineChart` `STabs` `SStepper` `SPagination` `SDivider` |
|
|
170
|
+
| **블록** | `SPage` 의 직계 자식. 페이지를 세로로 쌓는 단위 | `SSectionHeaderCard` `SCard` `SChatMessage` `SChatSystemMessage` `SChatInput` `SLoginCard`(유일하게 `SPage` 밖에 선다 — 로그인 화면 자체가 자기 자리다, §4-6) `SForm` `SSplitter` `SScrollArea` `SCalendarBoard` `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SExpansionList` `SDraggableList` `STree` `SCallout` `SBarChart` `SLineChart` `SPieChart` `SDonutChart` `STabs` `SStepper` `SPagination` `SDivider` |
|
|
171
171
|
| **요소** | 블록 **안에** 놓이는 컨트롤. 혼자 페이지에 서지 않는다 | `SButton` `SGhostButton` `SDropdownButton` `SSystemActionButton` `SField` `SInput` `SSearchInput` `SNumberInput` `STextarea` `SEditor` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SRadioCard` `SRadioCardGroup` `SSwitch` `SToggle` `SChipInput` `SBarcodeInput` `SFilePicker` `SDatePicker` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` `SCalendar` `SListItem` `SExpansionItem` `SDraggableItem` `SChatAttachedFile` `SChatFile` `SImage` `SLinearProgress` `SCircleProgress` |
|
|
172
172
|
| **인라인** | 텍스트 흐름·셀·라벨 안에 섞인다. 혼자 블록이 되지 않는다 | `STag` `SBadge` `SIcon` `SLogo` `STextLink` `SChip` |
|
|
173
173
|
| **레이어** | 문서 흐름 **밖**에 떠서 그려진다. 어느 층에서 띄우든 레이아웃에 영향이 없다 | `SModal` `SActionModal` `SConfirmModal` `SPopup` `SDrawer` `SPopover` `STooltip` `SPortal` `SAccountListBox`(계정 행에 붙어 뜬다 — 직접 띄우지 않는다) `SLauncherListBox`(런처 버튼에 붙어 뜬다 — 직접 띄우지 않는다) `SToast` `SLoadingModal` `SLoadingContainer` `SGuide` |
|
|
@@ -254,7 +254,8 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
254
254
|
| 용도 | 클래스 |
|
|
255
255
|
| --- | --- |
|
|
256
256
|
| 페이지/섹션 제목 | `typo-heading-lg`(18px) · `typo-heading-md`(16px) · `typo-heading-sm`(14px) · `typo-heading-xs`(12px) |
|
|
257
|
-
|
|
|
257
|
+
| 카드·아이템 안의 메인 수치 데이터 | `typo-heading-xl`(24px) — 제목에 쓰지 않는다 |
|
|
258
|
+
| 본문 | `typo-body-lg-*` (16px) · `typo-body-md-*`(14px) · `typo-body-sm-*`(12px) · `typo-body-xs-default`(11px) — `*` = `default`/`medium`/`semibold`/`bold` |
|
|
258
259
|
| 테이블 | `typo-table-header` · `typo-table-body` · `typo-table-accent` |
|
|
259
260
|
| 컨트롤·필드·피드백·내비 | `typo-control-*` `typo-field-*` `typo-feedback-*` `typo-navigation-*` (컴포넌트 내부용 — 직접 쓸 일은 드묾) |
|
|
260
261
|
|
|
@@ -565,10 +566,12 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
565
566
|
| 부모-자식 계층을 들여쓰기로 보여준다 | `STree` | §3-7-7 |
|
|
566
567
|
| 사용자가 순서를 드래그로 바꾸게 한다 | `SDraggableList` + `SDraggableItem` | §3-7-6 |
|
|
567
568
|
| 날짜별 일정을 한 달치 격자로 펼쳐 보여준다 | `SCalendarBoard` | §3-7-4 |
|
|
568
|
-
| 항목끼리 크기를 눈으로 견주게 한다 (
|
|
569
|
+
| 항목끼리 크기를 눈으로 견주게 한다 (채널별 매출·상품별 판매량) | `SBarChart` | 정확한 값을 읽어야 하면 `STable` — 그래프는 "어느 쪽이 큰가" 를 답하지 "얼마인가" 를 답하지 않는다 |
|
|
569
570
|
| 순서가 있는 항목의 **추이**를 보여준다 (일·월별 매출 흐름, 기간별 방문 수) | `SLineChart` | 항목 순서에 뜻이 없으면(채널별·상품별) `SBarChart` — 선은 "이어진다" 는 뜻을 덤으로 얹어, 순서 없는 항목을 이으면 없는 흐름을 만든다. 항목이 대여섯 개 안쪽이고 크기를 견주는 것이 목적이면 막대가 낫다 |
|
|
570
571
|
| 여러 항목의 추이를 **합계와 함께** 보여준다 (채널별 매출이 쌓여 전체가 되는 흐름) | `SLineChart stacked area` | 합계가 뜻을 갖는 값일 때만 쌓는다. 음수가 섞이거나 더해서 뜻이 없는 값(비율·평균)은 쌓지 말고 겹쳐 그린다 |
|
|
571
572
|
| 항목의 크기와 **그 안의 구성**을 함께 보여준다 (주문 상태별 내역, 유입 경로별 몫) | `SBarChart stacked` | 계열끼리 견주는 것이 목적이면 `stacked` 없이 나란히 세운다. 더해서 뜻이 없는 값(비율·평균)은 쌓지 않는다 — 합계 라벨이 거짓말이 된다 |
|
|
573
|
+
| 한 시점의 **전체를 몇 개의 몫으로** 나눠 보여준다 (채널별 매출 비중, 회원 등급 구성) | `SPieChart` | 조각이 대여섯 개를 넘거나 몫끼리 크기를 견주는 것이 목적이면 `SBarChart` — 사람은 각도보다 길이를 정확히 견준다. 순서가 있는 추이(월별)는 몫이 아니라 흐름이라 `SLineChart`. 0·음수는 그려지지 않으므로 증감은 원으로 나타내지 않는다. 조각은 큰 순으로 넘긴다. 폭은 부모를 따르고 그림은 그 폭의 정사각형이다 — 폭이 필요하면 `className` 으로 폭만 주고 높이는 주지 않는다 (`SDonutChart` 도 같다) |
|
|
574
|
+
| 몫과 함께 **전체의 크기(합계)** 를 먼저 읽게 한다 (주문 상태별 구성 + 총 주문 수, 목표 달성률) | `SDonutChart` | 합계가 필요 없으면 `SPieChart`. 가운데 값은 기본이 그려진 조각의 합계이고, 합계가 아닌 대표값(달성률 등)은 `centerValue` 로 준다. 여러 기간에 걸친 구성 변화는 원을 여러 개 늘어놓지 말고 `SBarChart stacked` |
|
|
572
575
|
| 표 위에 건수 요약과 액션을 얹는다 | `STableBar` | 표의 이름도 여기 `title` 슬롯에 넣는다 — 제목만으로 블록을 따로 세우지 않는다. §4-2 |
|
|
573
576
|
| 상태·분류를 라벨로 찍는다 | `STag` | §3-1 |
|
|
574
577
|
| 색 점만으로 상태를 찍는다 | `SBadge` | §3-1 |
|
|
@@ -1683,7 +1686,7 @@ useEffect(() => {
|
|
|
1683
1686
|
- **`SCalendar` 와 `SCalendarBoard` 는 방향이 반대다.** `SCalendar` 는 날짜를 **고르는** 달력(칸에는 점만 찍힌다)이고, `SCalendarBoard` 는 일정을 **읽는** 달력이다 — 칸마다 일정이 줄로 쌓이고, 칸 높이에 담기는 줄 수를 넘으면 "N개 더보기" 로 접히고, **"더보기" 또는 일정이 있는 칸 아무 데나** 누르면 **그 칸을 덮으며 뜨는 판**에 그 날짜의 일정이 전부 펼쳐진다. 폭도 다르다: `SCalendar` 는 제 폭을 갖는 요소, `SCalendarBoard` 는 페이지 폭을 채우는 블록이다.
|
|
1684
1687
|
- **`SCalendarBoard` 는 기본이 읽기 전용 판이다.** 날짜 칸을 눌러 **고르게** 하려면 `selectable` 을 켠다 — 켜야 `onValueChange(date, events)` 로 고른 날짜와 **그 날짜의 일정**이 함께 온다. 다만 **일정이 있는 칸은 `selectable` 과 무관하게 눌린다** — 그때는 목록 판이 열린다. 둘 다 켜져 있으면 고르기와 열기가 함께 일어난다. 일정 버튼과 "N개 더보기" 도 항상 눌린다.
|
|
1685
1688
|
- **칸 배경과 일정 색은 다른 층이다.** 그날의 성격(마감·완료·휴무 등)은 `dayColors` 로 **칸 전체**에 칠하고(`default` `danger` `accent` `complete` `dim`), 일정 하나의 색은 `events[].color` 로 준다. 둘을 섞어 쓰면 서로를 가리지 않고 함께 읽힌다.
|
|
1686
|
-
- 일정 왼쪽의 색 점은 `SBadge` 다 — `events[].color` 프리셋이 점 색까지 정하고, 따로 주려면 `dotColor` 에 `SBadge`
|
|
1689
|
+
- 일정 왼쪽의 색 점은 `SBadge` 다 — `events[].color` 프리셋이 점 색까지 정하고, 따로 주려면 `dotColor` 에 `SBadge` 색(`SBadgeColor`) 중 하나를 넣는다 (§3-1).
|
|
1687
1690
|
- **칸 본문을 통째로 바꾸려면 `dayContent` 다.** 일정으로 표현되지 않는 그날치 요약(재고·매출 같은)을 칸에 얹을 때 쓴다. **슬롯을 준 날짜는 그 날짜의 `events` 를 그리지 않고 목록 판도 열지 않는다** — 한 칸에 둘을 겹쳐 담지 않는다. 일정과 요약을 함께 보여야 하면 요약을 일정 한 건(`events[]`)으로 넣는다.
|
|
1688
1691
|
- **`SCalendarBoard` 는 높이를 부모에게서 받는다.** 행이 그 높이를 균등하게 나눠 갖고, 칸 높이가 다시 "한 칸에 몇 줄이 보일지" 를 정한다. 그래서 **놓는 자리에 높이를 준다** — 페이지 본문의 남은 높이를 채우려면 `SPage` 안에서 스택을 `flex-1 min-h-0` 으로 두고 판에 `h-full` 을 준다. 높이를 주지 않으면 칸이 최소 높이로 주저앉아 한두 줄만 보인다.
|
|
1689
1692
|
- **한 칸에 몇 줄을 펼칠지는 컴포넌트가 잰다.** 조절하는 prop 이 없다 — 칸 높이에서 나오는 값이라 따로 정할 것이 아니다. 줄이 넘치면 마지막 한 줄을 "N개 더보기" 에 내주므로 **접히든 아니든 칸 높이가 같다.** **소비 앱이 `events` 를 미리 잘라 넘기지 않는다.** 잘라 넘기면 "N개 더보기" 의 수가 실제 건수와 어긋나고, 눌러도 나머지가 나오지 않는다.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type HTMLAttributes } from 'react';
|
|
2
|
-
export declare const BADGE_COLORS: readonly ["red", "orange", "yellow", "green", "lightblue", "blue", "darkblue", "indigo", "grey"];
|
|
2
|
+
export declare const BADGE_COLORS: readonly ["red", "orange", "yellow", "green", "lightblue", "blue", "darkblue", "indigo", "purple", "grey"];
|
|
3
3
|
export type SBadgeColor = (typeof BADGE_COLORS)[number];
|
|
4
4
|
export interface SBadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
5
5
|
/** 뱃지 색상 */
|
|
@@ -62,7 +62,7 @@ export interface SCalendarBoardEvent {
|
|
|
62
62
|
label: string;
|
|
63
63
|
/** 색상 프리셋 — 배경과 점 색이 함께 정해진다 */
|
|
64
64
|
color?: SCalendarBoardEventColor;
|
|
65
|
-
/** 왼쪽 점 색만 따로 지정 (프리셋 기본값을 덮어쓴다). 점은 `SBadge` 라 그
|
|
65
|
+
/** 왼쪽 점 색만 따로 지정 (프리셋 기본값을 덮어쓴다). 점은 `SBadge` 라 그 색(`SBadgeColor`)을 쓴다 */
|
|
66
66
|
dotColor?: SBadgeColor;
|
|
67
67
|
/** 본문 텍스트 — 예: `"RV20260728-000006"`. 평문만 받는다 */
|
|
68
68
|
description?: string;
|
|
@@ -110,6 +110,7 @@ export const CALENDAR_BOARD_EVENT_COLORS = [
|
|
|
110
110
|
'yellow',
|
|
111
111
|
'orange',
|
|
112
112
|
'red',
|
|
113
|
+
'purple',
|
|
113
114
|
'white',
|
|
114
115
|
] as const;
|
|
115
116
|
```
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 배경은 `--cmp-calendarBoard-eventButton-bg-*` 로 전부 토큰화돼 있다.
|
|
5
5
|
* 점(dot)은 `SBadge` 가 그리므로 색도 `--cmp-badge-*` 를 그대로 따른다 —
|
|
6
|
-
*
|
|
6
|
+
* badge 색이 디자인 mock 의 점 hex 와 1:1 로 맞아떨어져 따로 매핑을 두지 않는다.
|
|
7
7
|
*/
|
|
8
8
|
import type { SBadgeColor } from '../SBadge';
|
|
9
|
-
export declare const CALENDAR_BOARD_EVENT_COLORS: readonly ["default", "blue", "oceanBlue", "lightBlue", "green", "yellow", "orange", "red", "white"];
|
|
9
|
+
export declare const CALENDAR_BOARD_EVENT_COLORS: readonly ["default", "blue", "oceanBlue", "lightBlue", "green", "yellow", "orange", "red", "purple", "white"];
|
|
10
10
|
export type SCalendarBoardEventColor = (typeof CALENDAR_BOARD_EVENT_COLORS)[number];
|
|
11
11
|
export interface CalendarBoardEventPreset {
|
|
12
12
|
/** 이벤트 버튼 배경 */
|
|
@@ -14,7 +14,7 @@ export interface SCalendarBoardEvent {
|
|
|
14
14
|
label: string;
|
|
15
15
|
/** 색상 프리셋 — 배경과 점 색이 함께 정해진다 */
|
|
16
16
|
color?: SCalendarBoardEventColor;
|
|
17
|
-
/** 왼쪽 점 색만 따로 지정 (프리셋 기본값을 덮어쓴다). 점은 `SBadge` 라 그
|
|
17
|
+
/** 왼쪽 점 색만 따로 지정 (프리셋 기본값을 덮어쓴다). 점은 `SBadge` 라 그 색(`SBadgeColor`)을 쓴다 */
|
|
18
18
|
dotColor?: SBadgeColor;
|
|
19
19
|
/** 본문 텍스트 — 예: `"RV20260728-000006"`. 평문만 받는다 */
|
|
20
20
|
description?: string;
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
| Prop | Type | Default | Description |
|
|
10
10
|
|------|------|---------|-------------|
|
|
11
|
+
| `color?` | `SChipColor` | — | 색상. 주지 않으면 기본 회색 칩이다. 색은 기본 상태에만 입힌다 — error·편집 중·disabled 는 상태 토큰이 우선한다. 색상은 컴포넌트 토큰 `--cmp-chip-chip-<color>-{bg,content,border}` 를 참조한다. |
|
|
11
12
|
| `name?` | `string` | — | 폼 연동용 name |
|
|
12
13
|
| `value?` | `string` | `''` | 칩 텍스트 값 |
|
|
13
14
|
| `error?` | `boolean` | — | 에러 상태 |
|
|
@@ -35,6 +36,30 @@
|
|
|
35
36
|
| `focus` | `() => void` | 편집 input에 포커스합니다. |
|
|
36
37
|
| `getNativeElement` | `() => HTMLElement \| null` | 네이티브 편집 엘리먼트를 반환합니다. |
|
|
37
38
|
|
|
39
|
+
## Types
|
|
40
|
+
|
|
41
|
+
### SChipColor
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
export type SChipColor = (typeof CHIP_COLORS)[number];
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### CHIP_COLORS
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
export const CHIP_COLORS = [
|
|
51
|
+
'red',
|
|
52
|
+
'orange',
|
|
53
|
+
'yellow',
|
|
54
|
+
'green',
|
|
55
|
+
'blue',
|
|
56
|
+
'darkblue',
|
|
57
|
+
'indigo',
|
|
58
|
+
'purple',
|
|
59
|
+
'grey',
|
|
60
|
+
] as const;
|
|
61
|
+
```
|
|
62
|
+
|
|
38
63
|
## Dependencies
|
|
39
64
|
|
|
40
65
|
### Used by
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { type CSSProperties } from 'react';
|
|
2
2
|
import { type Rule } from '../../lib/form';
|
|
3
|
+
export declare const CHIP_COLORS: readonly ["red", "orange", "yellow", "green", "blue", "darkblue", "indigo", "purple", "grey"];
|
|
4
|
+
export type SChipColor = (typeof CHIP_COLORS)[number];
|
|
3
5
|
export interface SChipProps {
|
|
6
|
+
/**
|
|
7
|
+
* 색상. 주지 않으면 기본 회색 칩이다.
|
|
8
|
+
* 색은 기본 상태에만 입힌다 — error·편집 중·disabled 는 상태 토큰이 우선한다.
|
|
9
|
+
* 색상은 컴포넌트 토큰 `--cmp-chip-chip-<color>-{bg,content,border}` 를 참조한다.
|
|
10
|
+
*/
|
|
11
|
+
color?: SChipColor;
|
|
4
12
|
/** 폼 연동용 name */
|
|
5
13
|
name?: string;
|
|
6
14
|
/** 칩 텍스트 값 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { SChip, type SChipHandle, type SChipProps } from './SChip';
|
|
1
|
+
export { SChip, CHIP_COLORS, type SChipColor, type SChipHandle, type SChipProps } from './SChip';
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# SDonutChart
|
|
2
|
+
|
|
3
|
+
> 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
|
|
4
|
+
|
|
5
|
+
### SDonutChart
|
|
6
|
+
|
|
7
|
+
#### Props
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Default | Description |
|
|
10
|
+
|------|------|---------|-------------|
|
|
11
|
+
| `data` | `SDonutChartSlice[]` | — | 조각 목록. 주는 순서대로 12시에서 시계 방향으로 그린다 — 보통 큰 순으로 준다 |
|
|
12
|
+
| `palette?` | `SDonutChartPalette` | `'multi'` | 색 팔레트. `custom` 일 때만 `colors` 를 본다 |
|
|
13
|
+
| `colors?` | `SDonutChartColor[]` | — | `palette='custom'` 에서 쓸 색 이름을 조각 순서대로. 조각보다 짧으면 앞에서부터 순환하고, 비어 있으면 `multi` 로 그린다 |
|
|
14
|
+
| `centerLabel?` | `ReactNode` | — | 가운데 윗줄에 적을 이름 (예: "총 주문") |
|
|
15
|
+
| `centerValue?` | `ReactNode` | — | 가운데 큰 값. 주지 않으면 그려진 조각의 합계를 `formatValue` 로 적는다 |
|
|
16
|
+
| `hideCenter?` | `boolean` | `false` | 가운데를 비운다 — 합계 대신 범례·툴팁만으로 읽게 할 때 |
|
|
17
|
+
| `showValueLabel?` | `boolean` | `false` | 고리 위에 몫(%)을 적는다. 좁은 조각은 글자가 넘치므로 적지 않는다 |
|
|
18
|
+
| `showLegend?` | `boolean` | `true` | 범례를 보인다 |
|
|
19
|
+
| `legendPosition?` | `SDonutChartLegendPosition` | `'top'` | 범례 위치 |
|
|
20
|
+
| `showTooltip?` | `boolean` | `true` | 조각에 마우스를 올리면 값 상자를 띄운다 |
|
|
21
|
+
| `formatValue?` | `(value: number) => string` | `defaultFormat` | 값 표시 형식 — 툴팁과 가운데 합계에 함께 쓰인다 |
|
|
22
|
+
| `className?` | `string` | — | 폭은 기본 100% 다. 폭을 정하려면 여기에 준다 — 그림은 그 폭의 정사각형이 된다 |
|
|
23
|
+
| `style?` | `CSSProperties` | — | |
|
|
24
|
+
|
|
25
|
+
#### Events
|
|
26
|
+
|
|
27
|
+
| Event | Type | Description |
|
|
28
|
+
|-------|------|-------------|
|
|
29
|
+
| `onSliceClick` | `(slice: SDonutChartSlicePoint) => void` | 조각을 눌렀을 때 |
|
|
30
|
+
|
|
31
|
+
## Types
|
|
32
|
+
|
|
33
|
+
### SDonutChartSlice
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
/** 조각 하나 — 범례 한 줄에 대응한다. */
|
|
37
|
+
export interface SDonutChartSlice {
|
|
38
|
+
/** 범례·툴팁에 표시할 이름 */
|
|
39
|
+
name: string;
|
|
40
|
+
/** 값. 0·음수는 그리지 않는다 — 원은 전체에 대한 몫만 나타낼 수 있다 */
|
|
41
|
+
value: number;
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### SDonutChartPalette
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
/**
|
|
49
|
+
* 색 팔레트. 조각마다 색이 달라야 하므로 한 색(`default`)은 없다.
|
|
50
|
+
* - `multi` 서로 무관한 항목(11색)을 순서대로
|
|
51
|
+
* - `gradation` 한 지표의 단계(6색)를 진한 쪽부터 순서대로 — 조각을 큰 순으로 줄 때
|
|
52
|
+
* - `custom` `colors` 로 고른 색을 순서대로
|
|
53
|
+
*/
|
|
54
|
+
export type SDonutChartPalette = 'multi' | 'gradation' | 'custom';
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### SDonutChartColor
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
/**
|
|
61
|
+
* `palette='custom'` 에서 고를 수 있는 색 이름.
|
|
62
|
+
* positive=늘어남 · negative=줄어듦 · neutral=변화 없음 을 뜻하므로 뜻에 맞게 고른다.
|
|
63
|
+
*/
|
|
64
|
+
export type SDonutChartColor =
|
|
65
|
+
| 'positivePrimary'
|
|
66
|
+
| 'positiveSecondary'
|
|
67
|
+
| 'negativePrimary'
|
|
68
|
+
| 'negativeSecondary'
|
|
69
|
+
| 'neutralPrimary'
|
|
70
|
+
| 'neutralSecondary';
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### SDonutChartLegendPosition
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
/** 범례 위치. */
|
|
77
|
+
export type SDonutChartLegendPosition = 'top' | 'bottom';
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### SDonutChartSlicePoint
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
/** 클릭이 가리키는 조각. */
|
|
84
|
+
export interface SDonutChartSlicePoint {
|
|
85
|
+
/** `data` 안에서의 인덱스 */
|
|
86
|
+
index: number;
|
|
87
|
+
name: string;
|
|
88
|
+
value: number;
|
|
89
|
+
/** 그려진 조각 전체의 합에 대한 몫(0~1) */
|
|
90
|
+
ratio: number;
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { type CSSProperties, type ReactNode } from 'react';
|
|
2
|
+
/** 범례 위치. */
|
|
3
|
+
export type SDonutChartLegendPosition = 'top' | 'bottom';
|
|
4
|
+
/**
|
|
5
|
+
* 색 팔레트. 조각마다 색이 달라야 하므로 한 색(`default`)은 없다.
|
|
6
|
+
* - `multi` 서로 무관한 항목(11색)을 순서대로
|
|
7
|
+
* - `gradation` 한 지표의 단계(6색)를 진한 쪽부터 순서대로 — 조각을 큰 순으로 줄 때
|
|
8
|
+
* - `custom` `colors` 로 고른 색을 순서대로
|
|
9
|
+
*/
|
|
10
|
+
export type SDonutChartPalette = 'multi' | 'gradation' | 'custom';
|
|
11
|
+
/**
|
|
12
|
+
* `palette='custom'` 에서 고를 수 있는 색 이름.
|
|
13
|
+
* positive=늘어남 · negative=줄어듦 · neutral=변화 없음 을 뜻하므로 뜻에 맞게 고른다.
|
|
14
|
+
*/
|
|
15
|
+
export type SDonutChartColor = 'positivePrimary' | 'positiveSecondary' | 'negativePrimary' | 'negativeSecondary' | 'neutralPrimary' | 'neutralSecondary';
|
|
16
|
+
/** 조각 하나 — 범례 한 줄에 대응한다. */
|
|
17
|
+
export interface SDonutChartSlice {
|
|
18
|
+
/** 범례·툴팁에 표시할 이름 */
|
|
19
|
+
name: string;
|
|
20
|
+
/** 값. 0·음수는 그리지 않는다 — 원은 전체에 대한 몫만 나타낼 수 있다 */
|
|
21
|
+
value: number;
|
|
22
|
+
}
|
|
23
|
+
/** 클릭이 가리키는 조각. */
|
|
24
|
+
export interface SDonutChartSlicePoint {
|
|
25
|
+
/** `data` 안에서의 인덱스 */
|
|
26
|
+
index: number;
|
|
27
|
+
name: string;
|
|
28
|
+
value: number;
|
|
29
|
+
/** 그려진 조각 전체의 합에 대한 몫(0~1) */
|
|
30
|
+
ratio: number;
|
|
31
|
+
}
|
|
32
|
+
export interface SDonutChartProps {
|
|
33
|
+
/** 조각 목록. 주는 순서대로 12시에서 시계 방향으로 그린다 — 보통 큰 순으로 준다 */
|
|
34
|
+
data: SDonutChartSlice[];
|
|
35
|
+
/** 색 팔레트. `custom` 일 때만 `colors` 를 본다 */
|
|
36
|
+
palette?: SDonutChartPalette;
|
|
37
|
+
/** `palette='custom'` 에서 쓸 색 이름을 조각 순서대로. 조각보다 짧으면 앞에서부터 순환하고, 비어 있으면 `multi` 로 그린다 */
|
|
38
|
+
colors?: SDonutChartColor[];
|
|
39
|
+
/** 가운데 윗줄에 적을 이름 (예: "총 주문") */
|
|
40
|
+
centerLabel?: ReactNode;
|
|
41
|
+
/** 가운데 큰 값. 주지 않으면 그려진 조각의 합계를 `formatValue` 로 적는다 */
|
|
42
|
+
centerValue?: ReactNode;
|
|
43
|
+
/** 가운데를 비운다 — 합계 대신 범례·툴팁만으로 읽게 할 때 */
|
|
44
|
+
hideCenter?: boolean;
|
|
45
|
+
/** 고리 위에 몫(%)을 적는다. 좁은 조각은 글자가 넘치므로 적지 않는다 */
|
|
46
|
+
showValueLabel?: boolean;
|
|
47
|
+
/** 범례를 보인다 */
|
|
48
|
+
showLegend?: boolean;
|
|
49
|
+
/** 범례 위치 */
|
|
50
|
+
legendPosition?: SDonutChartLegendPosition;
|
|
51
|
+
/** 조각에 마우스를 올리면 값 상자를 띄운다 */
|
|
52
|
+
showTooltip?: boolean;
|
|
53
|
+
/** 값 표시 형식 — 툴팁과 가운데 합계에 함께 쓰인다 */
|
|
54
|
+
formatValue?: (value: number) => string;
|
|
55
|
+
/** 조각을 눌렀을 때 */
|
|
56
|
+
onSliceClick?: (slice: SDonutChartSlicePoint) => void;
|
|
57
|
+
/** 폭은 기본 100% 다. 폭을 정하려면 여기에 준다 — 그림은 그 폭의 정사각형이 된다 */
|
|
58
|
+
className?: string;
|
|
59
|
+
style?: CSSProperties;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* SDonutChart — 도넛 그래프.
|
|
63
|
+
*
|
|
64
|
+
* `SPieChart` 와 같이 **한 시점의 전체를 몫으로 나눈 것**을 보여주되, 가운데에 **합계**
|
|
65
|
+
* (또는 그 전체를 대표하는 값)를 함께 적는다. 몫보다 전체 크기가 먼저 읽혀야 할 때 쓴다.
|
|
66
|
+
* 조각이 대여섯 개를 넘거나 몫끼리 견주는 것이 목적이면 `SBarChart` 가 맞다.
|
|
67
|
+
*
|
|
68
|
+
* 폭은 부모를 따르고(기본 100%), 그림은 그 폭을 한 변으로 하는 정사각형이다.
|
|
69
|
+
* 고리 두께와 가운데 글자 자리도 폭에 비례해 늘고 준다.
|
|
70
|
+
*/
|
|
71
|
+
export declare const SDonutChart: import("react").ForwardRefExoticComponent<SDonutChartProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SDonutChart, type SDonutChartProps, type SDonutChartSlice, type SDonutChartSlicePoint, type SDonutChartPalette, type SDonutChartColor, type SDonutChartLegendPosition, } from './SDonutChart';
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* **시안이 없는 컴포넌트다.** 그래서 두 가지 규칙으로 값을 정했다.
|
|
5
5
|
*
|
|
6
|
-
* 1. 두 차트가 공유하는 것(
|
|
6
|
+
* 1. 두 차트가 공유하는 것(눈금·격자·툴팁·범례·팔레트)은 새로 정하지 않고
|
|
7
7
|
* 바 차트와 `lib/chart` 에서 그대로 가져온다 — 같은 데이터를 막대에서 선으로
|
|
8
|
-
* 바꿨을 때
|
|
8
|
+
* 바꿨을 때 눈금이 어긋나면 두 차트를 견줄 수 없다. 단 항목 축 양끝 여백
|
|
9
|
+
* (`AXIS_EDGE_PADDING`)은 쓰지 않는다 — 선은 첫·마지막 점이 그림 양끝에 선다.
|
|
9
10
|
* 2. 선 고유의 것(선 두께·점 지름 따위)만 여기서 정한다. 디자인 토큰이 생기면
|
|
10
11
|
* 이 파일의 상수부터 토큰 참조로 바꾼다.
|
|
11
12
|
*
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# SPieChart
|
|
2
|
+
|
|
3
|
+
> 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
|
|
4
|
+
|
|
5
|
+
### SPieChart
|
|
6
|
+
|
|
7
|
+
#### Props
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Default | Description |
|
|
10
|
+
|------|------|---------|-------------|
|
|
11
|
+
| `data` | `SPieChartSlice[]` | — | 조각 목록. 주는 순서대로 12시에서 시계 방향으로 그린다 — 보통 큰 순으로 준다 |
|
|
12
|
+
| `palette?` | `SPieChartPalette` | `'multi'` | 색 팔레트. `custom` 일 때만 `colors` 를 본다 |
|
|
13
|
+
| `colors?` | `SPieChartColor[]` | — | `palette='custom'` 에서 쓸 색 이름을 조각 순서대로. 조각보다 짧으면 앞에서부터 순환하고, 비어 있으면 `multi` 로 그린다 |
|
|
14
|
+
| `showValueLabel?` | `boolean` | `false` | 조각 안에 몫(%)을 적는다. 좁은 조각은 글자가 넘치므로 적지 않는다 |
|
|
15
|
+
| `showLegend?` | `boolean` | `true` | 범례를 보인다 |
|
|
16
|
+
| `legendPosition?` | `SPieChartLegendPosition` | `'top'` | 범례 위치 |
|
|
17
|
+
| `showTooltip?` | `boolean` | `true` | 조각에 마우스를 올리면 값 상자를 띄운다 |
|
|
18
|
+
| `formatValue?` | `(value: number) => string` | — | 값 표시 형식 |
|
|
19
|
+
| `className?` | `string` | — | 폭은 기본 100% 다. 폭을 정하려면 여기에 준다 — 그림은 그 폭의 정사각형이 된다 |
|
|
20
|
+
| `style?` | `CSSProperties` | — | |
|
|
21
|
+
|
|
22
|
+
#### Events
|
|
23
|
+
|
|
24
|
+
| Event | Type | Description |
|
|
25
|
+
|-------|------|-------------|
|
|
26
|
+
| `onSliceClick` | `(slice: SPieChartSlicePoint) => void` | 조각을 눌렀을 때 |
|
|
27
|
+
|
|
28
|
+
## Types
|
|
29
|
+
|
|
30
|
+
### SPieChartSlice
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
/** 조각 하나 — 범례 한 줄에 대응한다. */
|
|
34
|
+
export interface SPieChartSlice {
|
|
35
|
+
/** 범례·툴팁에 표시할 이름 */
|
|
36
|
+
name: string;
|
|
37
|
+
/** 값. 0·음수는 그리지 않는다 — 원은 전체에 대한 몫만 나타낼 수 있다 */
|
|
38
|
+
value: number;
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### SPieChartPalette
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
/**
|
|
46
|
+
* 색 팔레트. 조각마다 색이 달라야 하므로 한 색(`default`)은 없다.
|
|
47
|
+
* - `multi` 서로 무관한 항목(11색)을 순서대로
|
|
48
|
+
* - `gradation` 한 지표의 단계(6색)를 진한 쪽부터 순서대로 — 조각을 큰 순으로 줄 때
|
|
49
|
+
* - `custom` `colors` 로 고른 색을 순서대로
|
|
50
|
+
*/
|
|
51
|
+
export type SPieChartPalette = 'multi' | 'gradation' | 'custom';
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### SPieChartColor
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
/**
|
|
58
|
+
* `palette='custom'` 에서 고를 수 있는 색 이름.
|
|
59
|
+
* positive=늘어남 · negative=줄어듦 · neutral=변화 없음 을 뜻하므로 뜻에 맞게 고른다.
|
|
60
|
+
*/
|
|
61
|
+
export type SPieChartColor =
|
|
62
|
+
| 'positivePrimary'
|
|
63
|
+
| 'positiveSecondary'
|
|
64
|
+
| 'negativePrimary'
|
|
65
|
+
| 'negativeSecondary'
|
|
66
|
+
| 'neutralPrimary'
|
|
67
|
+
| 'neutralSecondary';
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### SPieChartLegendPosition
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
/** 범례 위치. */
|
|
74
|
+
export type SPieChartLegendPosition = 'top' | 'bottom';
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### SPieChartSlicePoint
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
/** 클릭이 가리키는 조각. */
|
|
81
|
+
export interface SPieChartSlicePoint {
|
|
82
|
+
/** `data` 안에서의 인덱스 */
|
|
83
|
+
index: number;
|
|
84
|
+
name: string;
|
|
85
|
+
value: number;
|
|
86
|
+
/** 그려진 조각 전체의 합에 대한 몫(0~1) */
|
|
87
|
+
ratio: number;
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type CSSProperties } from 'react';
|
|
2
|
+
/** 범례 위치. */
|
|
3
|
+
export type SPieChartLegendPosition = 'top' | 'bottom';
|
|
4
|
+
/**
|
|
5
|
+
* 색 팔레트. 조각마다 색이 달라야 하므로 한 색(`default`)은 없다.
|
|
6
|
+
* - `multi` 서로 무관한 항목(11색)을 순서대로
|
|
7
|
+
* - `gradation` 한 지표의 단계(6색)를 진한 쪽부터 순서대로 — 조각을 큰 순으로 줄 때
|
|
8
|
+
* - `custom` `colors` 로 고른 색을 순서대로
|
|
9
|
+
*/
|
|
10
|
+
export type SPieChartPalette = 'multi' | 'gradation' | 'custom';
|
|
11
|
+
/**
|
|
12
|
+
* `palette='custom'` 에서 고를 수 있는 색 이름.
|
|
13
|
+
* positive=늘어남 · negative=줄어듦 · neutral=변화 없음 을 뜻하므로 뜻에 맞게 고른다.
|
|
14
|
+
*/
|
|
15
|
+
export type SPieChartColor = 'positivePrimary' | 'positiveSecondary' | 'negativePrimary' | 'negativeSecondary' | 'neutralPrimary' | 'neutralSecondary';
|
|
16
|
+
/** 조각 하나 — 범례 한 줄에 대응한다. */
|
|
17
|
+
export interface SPieChartSlice {
|
|
18
|
+
/** 범례·툴팁에 표시할 이름 */
|
|
19
|
+
name: string;
|
|
20
|
+
/** 값. 0·음수는 그리지 않는다 — 원은 전체에 대한 몫만 나타낼 수 있다 */
|
|
21
|
+
value: number;
|
|
22
|
+
}
|
|
23
|
+
/** 클릭이 가리키는 조각. */
|
|
24
|
+
export interface SPieChartSlicePoint {
|
|
25
|
+
/** `data` 안에서의 인덱스 */
|
|
26
|
+
index: number;
|
|
27
|
+
name: string;
|
|
28
|
+
value: number;
|
|
29
|
+
/** 그려진 조각 전체의 합에 대한 몫(0~1) */
|
|
30
|
+
ratio: number;
|
|
31
|
+
}
|
|
32
|
+
export interface SPieChartProps {
|
|
33
|
+
/** 조각 목록. 주는 순서대로 12시에서 시계 방향으로 그린다 — 보통 큰 순으로 준다 */
|
|
34
|
+
data: SPieChartSlice[];
|
|
35
|
+
/** 색 팔레트. `custom` 일 때만 `colors` 를 본다 */
|
|
36
|
+
palette?: SPieChartPalette;
|
|
37
|
+
/** `palette='custom'` 에서 쓸 색 이름을 조각 순서대로. 조각보다 짧으면 앞에서부터 순환하고, 비어 있으면 `multi` 로 그린다 */
|
|
38
|
+
colors?: SPieChartColor[];
|
|
39
|
+
/** 조각 안에 몫(%)을 적는다. 좁은 조각은 글자가 넘치므로 적지 않는다 */
|
|
40
|
+
showValueLabel?: boolean;
|
|
41
|
+
/** 범례를 보인다 */
|
|
42
|
+
showLegend?: boolean;
|
|
43
|
+
/** 범례 위치 */
|
|
44
|
+
legendPosition?: SPieChartLegendPosition;
|
|
45
|
+
/** 조각에 마우스를 올리면 값 상자를 띄운다 */
|
|
46
|
+
showTooltip?: boolean;
|
|
47
|
+
/** 값 표시 형식 */
|
|
48
|
+
formatValue?: (value: number) => string;
|
|
49
|
+
/** 조각을 눌렀을 때 */
|
|
50
|
+
onSliceClick?: (slice: SPieChartSlicePoint) => void;
|
|
51
|
+
/** 폭은 기본 100% 다. 폭을 정하려면 여기에 준다 — 그림은 그 폭의 정사각형이 된다 */
|
|
52
|
+
className?: string;
|
|
53
|
+
style?: CSSProperties;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* SPieChart — 원그래프.
|
|
57
|
+
*
|
|
58
|
+
* **한 시점의 전체를 몇 개의 몫으로 나눈 것**을 보여줄 때 쓴다. 조각이 대여섯 개를 넘거나
|
|
59
|
+
* 몫끼리 크기를 견주는 것이 목적이면 `SBarChart` 가 맞다 — 사람은 각도보다 길이를
|
|
60
|
+
* 훨씬 정확하게 견준다. 합계를 함께 강조하려면 `SDonutChart` 를 쓴다.
|
|
61
|
+
*
|
|
62
|
+
* 폭은 부모를 따르고(기본 100%), 그림은 그 폭을 한 변으로 하는 정사각형이다.
|
|
63
|
+
*/
|
|
64
|
+
export declare const SPieChart: import("react").ForwardRefExoticComponent<SPieChartProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SPieChart, type SPieChartProps, type SPieChartSlice, type SPieChartSlicePoint, type SPieChartPalette, type SPieChartColor, type SPieChartLegendPosition, } from './SPieChart';
|