sellmate-design-system-react 9.0.0-beta.47 → 9.0.0-beta.49
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 +21 -5
- package/dist/components/SBarChart/README.md +104 -0
- package/dist/components/SBarChart/SBarChart.d.ts +75 -0
- package/dist/components/SBarChart/barChart.config.d.ts +65 -0
- package/dist/components/SBarChart/index.d.ts +2 -0
- package/dist/components/SChatAttachedFile/README.md +3 -4
- package/dist/components/SChatAttachedFile/SChatAttachedFile.d.ts +3 -44
- package/dist/components/SChatAttachedFile/chatAttachedFile.config.d.ts +19 -39
- package/dist/components/SChatAttachedFile/index.d.ts +1 -1
- package/dist/components/SChatFile/README.md +33 -0
- package/dist/components/SChatFile/SChatFile.d.ts +37 -0
- package/dist/components/SChatFile/chatFile.config.d.ts +56 -0
- package/dist/components/SChatFile/index.d.ts +2 -0
- package/dist/components/SChatMessage/README.md +9 -5
- package/dist/components/SChatMessage/SChatMessage.d.ts +22 -7
- package/dist/components/SGhostButton/README.md +2 -0
- package/dist/components/SIcon/README.md +2 -0
- package/dist/index.cjs +944 -132
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +939 -132
- package/dist/index.js.map +1 -1
- package/dist/lib/chart/cartesian.d.ts +46 -0
- package/dist/lib/chart/frame.d.ts +17 -0
- package/dist/lib/chart/legend.d.ts +15 -0
- package/dist/lib/chart/palette.d.ts +26 -0
- package/dist/lib/chart/scale.d.ts +26 -0
- package/dist/lib/chart/tooltip.d.ts +23 -0
- package/dist/lib/chart/types.d.ts +29 -0
- package/dist/lib/chart/use-element-size.d.ts +17 -0
- package/dist/llms-full.txt +171 -16
- package/dist/llms.txt +25 -10
- package/dist/styles.css +347 -40
- package/dist/theme.css +118 -7
- package/eslint/scale.gen.mjs +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 직교 좌표 차트(bar·line)의 눈금 장치 — 격자선·기준선·눈금 라벨.
|
|
3
|
+
* 파이·도넛은 이 파일을 쓰지 않는다.
|
|
4
|
+
*
|
|
5
|
+
* 격자선은 그림과 같은 좌표계에 있어야 하므로 **SVG 안**에, 눈금 라벨은 글자 폭이
|
|
6
|
+
* 열 너비를 정해야 하므로 **SVG 밖 HTML** 에 둔다. 둘은 같은 비율(`ratioOf`)로
|
|
7
|
+
* 위치를 계산하므로 어긋나지 않는다.
|
|
8
|
+
*/
|
|
9
|
+
import type { CSSProperties, Ref } from 'react';
|
|
10
|
+
import { type ChartScale } from './scale';
|
|
11
|
+
import type { SChartDirection } from './types';
|
|
12
|
+
/** 눈금 라벨과 그림 사이 간격 — 시안 실측 8px. */
|
|
13
|
+
export declare const AXIS_LABEL_GAP = 8;
|
|
14
|
+
export interface ChartGridProps {
|
|
15
|
+
scale: ChartScale;
|
|
16
|
+
direction: SChartDirection;
|
|
17
|
+
/** 그림 영역 크기(px) */
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 격자선 + 기준선. `<svg>` 안에 넣는다.
|
|
23
|
+
*
|
|
24
|
+
* 기준선(0)은 격자선보다 진하다 — 막대가 어디서 자라기 시작하는지가 눈금 하나보다
|
|
25
|
+
* 중요한 정보라서다. 음수가 없으면 기준선은 자연히 축의 끝에 놓인다.
|
|
26
|
+
*/
|
|
27
|
+
export declare function ChartGrid({ scale, direction, width, height }: ChartGridProps): import("react").JSX.Element;
|
|
28
|
+
export interface ChartAxisLabelsProps {
|
|
29
|
+
scale: ChartScale;
|
|
30
|
+
direction: SChartDirection;
|
|
31
|
+
/** 값 → 표시 문자열 */
|
|
32
|
+
format: (value: number) => string;
|
|
33
|
+
className?: string;
|
|
34
|
+
style?: CSSProperties;
|
|
35
|
+
/**
|
|
36
|
+
* 자리를 잡아 주는 사본 라벨. 이 크기가 곧 **가장 큰 라벨의 크기**라, 호출 쪽은
|
|
37
|
+
* 이걸 재서 그림을 그만큼 안으로 물린다 — 끝 눈금이 차트 밖으로 나가지 않는다.
|
|
38
|
+
*/
|
|
39
|
+
sampleRef?: Ref<HTMLSpanElement>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 눈금 라벨.
|
|
43
|
+
* - 세로 차트: 세로 열 하나(그림 왼쪽). 각 라벨이 자기 격자선 높이에 중앙 정렬된다.
|
|
44
|
+
* - 가로 차트: 가로 행 하나(그림 아래). 각 라벨이 자기 격자선 x 에 중앙 정렬된다.
|
|
45
|
+
*/
|
|
46
|
+
export declare function ChartAxisLabels({ scale, direction, format, className, style, sampleRef, }: ChartAxisLabelsProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 차트 바깥 틀 — 패딩·배경과 "범례 / 그림" 두 칸의 세로 배치.
|
|
3
|
+
* 그림이 무엇인지(막대·선·파이)는 알지 않는다.
|
|
4
|
+
*/
|
|
5
|
+
import { type CSSProperties, type HTMLAttributes, type ReactNode } from 'react';
|
|
6
|
+
import type { SChartLegendPosition } from './types';
|
|
7
|
+
export interface ChartFrameProps extends HTMLAttributes<HTMLDivElement> {
|
|
8
|
+
/** 범례 — 없으면 칸 자체가 사라진다 */
|
|
9
|
+
legend?: ReactNode;
|
|
10
|
+
/** 범례 위치 */
|
|
11
|
+
legendPosition?: SChartLegendPosition;
|
|
12
|
+
/** 그림 영역 */
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
className?: string;
|
|
15
|
+
style?: CSSProperties;
|
|
16
|
+
}
|
|
17
|
+
export declare const ChartFrame: import("react").ForwardRefExoticComponent<ChartFrameProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ChartLegendItem {
|
|
2
|
+
/** 계열 이름 */
|
|
3
|
+
name: string;
|
|
4
|
+
/** 점 색 (CSS 색 문자열) */
|
|
5
|
+
color: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ChartLegendProps {
|
|
8
|
+
items: ChartLegendItem[];
|
|
9
|
+
/** 가로 정렬 — 시안은 그림 위 가운데다 */
|
|
10
|
+
align?: 'start' | 'center' | 'end';
|
|
11
|
+
/** 지금 강조 중인 계열. 나머지는 흐려진다 */
|
|
12
|
+
activeIndex?: number | null;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function ChartLegend({ items, align, activeIndex, className }: ChartLegendProps): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 차트 팔레트 — `--cmp-chart-palette-*` 를 계열 인덱스로 고르는 규칙.
|
|
3
|
+
*
|
|
4
|
+
* 계열이 팔레트 색 수보다 많으면 앞에서부터 **순환**한다. 색이 반복되면 범례로만
|
|
5
|
+
* 구분되므로, 계열이 많을 때는 `multi`(11색) 를 쓰는 편이 낫다.
|
|
6
|
+
*/
|
|
7
|
+
import type { SChartColor, SChartPalette } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* `custom` 팔레트에서 고를 수 있는 색. 이름이 뜻을 갖고 있으므로
|
|
10
|
+
* (positive=늘어남, negative=줄어듦, neutral=변화 없음) 뜻에 맞게 고른다.
|
|
11
|
+
*/
|
|
12
|
+
export declare const CHART_COLORS: Record<SChartColor, string>;
|
|
13
|
+
/**
|
|
14
|
+
* 색을 고르지 않는 팔레트들의 색 목록. 순서가 곧 계열 순서다.
|
|
15
|
+
*
|
|
16
|
+
* `gradation` 은 진한 쪽(1)부터 옅은 쪽(6)으로 간다 — 계열 순서가 크기 순서를
|
|
17
|
+
* 나타내는 팔레트라 첫 계열이 가장 진해야 눈에 먼저 들어온다.
|
|
18
|
+
*/
|
|
19
|
+
export declare const CHART_PALETTES: Record<Exclude<SChartPalette, 'custom'>, readonly string[]>;
|
|
20
|
+
/**
|
|
21
|
+
* 계열 인덱스 → 색.
|
|
22
|
+
*
|
|
23
|
+
* `custom` 은 `colors` 로 받은 이름 배열을 순서대로 쓴다. 배열이 비어 있으면
|
|
24
|
+
* 고를 것이 없으므로 `default` 로 떨어진다 — 색이 없어 아무것도 안 보이는 것보다 낫다.
|
|
25
|
+
*/
|
|
26
|
+
export declare function paletteColor(palette: SChartPalette, index: number, colors?: readonly SChartColor[]): string;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 값 축 스케일 — 데이터 범위를 "읽기 좋은 눈금"으로 바꾸고, 값을 픽셀로 옮긴다.
|
|
3
|
+
* 직교 좌표를 쓰는 차트(bar·line)가 공유한다.
|
|
4
|
+
*/
|
|
5
|
+
export interface ChartScale {
|
|
6
|
+
/** 눈금 최솟값 (음수가 있으면 0보다 작다) */
|
|
7
|
+
min: number;
|
|
8
|
+
/** 눈금 최댓값 */
|
|
9
|
+
max: number;
|
|
10
|
+
/** 축에 그릴 눈금값 — 작은 값부터 */
|
|
11
|
+
ticks: number[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 데이터 범위에서 눈금을 만든다.
|
|
15
|
+
*
|
|
16
|
+
* - 0 은 항상 범위에 포함한다. 막대는 0 에서 자라므로 기준선이 축 안에 있어야 한다.
|
|
17
|
+
* - `fixedMax` 를 주면 위쪽 끝을 그 값으로 고정한다(데이터가 넘으면 넘은 채로 그린다).
|
|
18
|
+
* - 값이 전부 0 이거나 데이터가 없으면 `0..tickCount-1` 의 밋밋한 축을 돌려준다 —
|
|
19
|
+
* 축이 통째로 사라지는 것보다 빈 격자가 남는 편이 "데이터가 없다" 를 더 잘 보여 준다.
|
|
20
|
+
*/
|
|
21
|
+
export declare function niceScale(values: number[], tickCount: number, fixedMax?: number): ChartScale;
|
|
22
|
+
/**
|
|
23
|
+
* 값 → 축 위의 비율(0~1). `min` 이 0, `max` 가 1 이다.
|
|
24
|
+
* 픽셀 변환은 방향(위로 자라는지 오른쪽으로 자라는지)을 아는 쪽에서 한다.
|
|
25
|
+
*/
|
|
26
|
+
export declare function ratioOf(value: number, scale: ChartScale): number;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface ChartTooltipItem {
|
|
2
|
+
/** 계열 점 색 */
|
|
3
|
+
color: string;
|
|
4
|
+
/** 계열 이름 */
|
|
5
|
+
label: string;
|
|
6
|
+
/** 표시할 값 (이미 포맷된 문자열) */
|
|
7
|
+
value: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ChartTooltipProps {
|
|
10
|
+
/** 상자 제목 — 보통 카테고리 이름 */
|
|
11
|
+
title: string;
|
|
12
|
+
items: ChartTooltipItem[];
|
|
13
|
+
/** 컨테이너 기준 좌표(px) */
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
/** 상자가 넘치면 안 되는 범위(px). 보통 그림 영역 크기다 */
|
|
17
|
+
bounds?: {
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
};
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function ChartTooltip({ title, items, x, y, bounds, className }: ChartTooltipProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 차트 공용 타입.
|
|
3
|
+
*
|
|
4
|
+
* `src/lib/chart/*` 는 차트 컴포넌트들이 나눠 쓰는 **비공개 구현**이다 — `src/index.ts`
|
|
5
|
+
* 로 내보내지 않는다. 소비자가 쓰는 이름(`SBarChartPalette` 등)은 각 컴포넌트가 같은
|
|
6
|
+
* 값을 **다시 선언**한다: docs:gen 이 컴포넌트 디렉토리만 훑기 때문에, 여기 둔 타입은
|
|
7
|
+
* README 에 뜻이 실리지 않는다. 두 선언이 어긋나면 컴파일이 깨진다.
|
|
8
|
+
*
|
|
9
|
+
* `src/components/chart/` 가 아니라 lib 에 두는 이유: components 아래 폴더는 전부
|
|
10
|
+
* "스토리·playground 를 가진 공개 컴포넌트" 로 취급돼 `check:docs` 가 데모 누락을
|
|
11
|
+
* 지적한다. 여기는 그런 대상이 아니다.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* 색 팔레트.
|
|
15
|
+
* - `default` 파랑 한 색. 계열이 하나거나 색으로 나눌 것이 없을 때
|
|
16
|
+
* - `multi` 서로 무관한 항목(11색)을 순서대로
|
|
17
|
+
* - `gradation` 한 지표의 단계(6색)를 진한 쪽부터 순서대로
|
|
18
|
+
* - `custom` `colors` 로 고른 색을 순서대로
|
|
19
|
+
*/
|
|
20
|
+
export type SChartPalette = 'default' | 'multi' | 'gradation' | 'custom';
|
|
21
|
+
/**
|
|
22
|
+
* `custom` 팔레트에서 고를 수 있는 색 이름.
|
|
23
|
+
* positive=늘어남 · negative=줄어듦 · neutral=변화 없음 을 뜻한다.
|
|
24
|
+
*/
|
|
25
|
+
export type SChartColor = 'positivePrimary' | 'positiveSecondary' | 'negativePrimary' | 'negativeSecondary' | 'neutralPrimary' | 'neutralSecondary';
|
|
26
|
+
/** 막대가 자라는 방향 */
|
|
27
|
+
export type SChartDirection = 'vertical' | 'horizontal';
|
|
28
|
+
/** 범례 위치 */
|
|
29
|
+
export type SChartLegendPosition = 'top' | 'bottom';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface ElementSize {
|
|
2
|
+
width: number;
|
|
3
|
+
height: number;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* 요소의 실제 픽셀 크기를 관찰한다.
|
|
7
|
+
*
|
|
8
|
+
* 차트는 막대 두께·간격이 px 고정값이라 그림을 픽셀 좌표로 그려야 한다 — viewBox 로
|
|
9
|
+
* 늘려 맞추면 막대만 굵어지고 글자가 찌그러진다. 그래서 그릴 면적을 먼저 재고,
|
|
10
|
+
* 그 안에 1:1 로 그린다.
|
|
11
|
+
*
|
|
12
|
+
* 첫 렌더에서는 `{0, 0}` 이다. 크기가 0 인 동안은 그리지 않는 쪽이 안전하다.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useElementSize<T extends HTMLElement>(): {
|
|
15
|
+
ref: import("react").RefObject<T | null>;
|
|
16
|
+
size: ElementSize;
|
|
17
|
+
};
|
package/dist/llms-full.txt
CHANGED
|
@@ -26,6 +26,19 @@
|
|
|
26
26
|
|
|
27
27
|
"비슷하게 생긴 것을 직접 만드는 것"이 어색함의 가장 큰 원인이다. 대응 컴포넌트를 쓰면 색·간격·상태·접근성이 전부 따라온다.
|
|
28
28
|
|
|
29
|
+
### 0-0. 화면을 짜기 전에 — 세 가지 질문
|
|
30
|
+
|
|
31
|
+
**컴포넌트를 고르기 전에 이 세 가지에 답한다.** 요청에 답이 없으면 추측해서 채우지 말고 **되묻는다.**
|
|
32
|
+
|
|
33
|
+
1. 이 화면에서 사용자가 하려는 **단 하나의 일**은 무엇인가
|
|
34
|
+
2. 그 일을 끝내는 데 **없어도 되는 것**은 무엇인가 — 컬럼·버튼·안내 문구 중 빼도 되는 것
|
|
35
|
+
3. **실패하면** 어디로 돌아가는가 — 오류·빈 목록·권한 없음일 때 무엇을 보여줄지
|
|
36
|
+
|
|
37
|
+
요청받은 것을 그대로 다 넣지 않는다. **"있을 법한 필드를 빠짐없이 채우는 것"이 화면을 망치는 가장 흔한 방식이다.**
|
|
38
|
+
목록에 컬럼을, 폼에 입력란을, 툴바에 버튼을 하나 더 넣기는 쉽고 나중에 빼기는 어렵다. 2번은 그래서 있다.
|
|
39
|
+
|
|
40
|
+
2번에 답이 하나도 없으면 아직 화면을 이해하지 못한 것이다. 그 상태로 코드를 쓰면 미정 상태가 그대로 화면이 된다.
|
|
41
|
+
|
|
29
42
|
### 0-1. 전체 컴포넌트 인덱스
|
|
30
43
|
|
|
31
44
|
무엇을 만들지 정했으면 **이 표에서 먼저 찾는다.** 상세 Props·Types 는 `dist/components/<이름>/README.md` 참조.
|
|
@@ -37,9 +50,10 @@
|
|
|
37
50
|
| **버튼·링크** | `SButton` `SGhostButton` `SDropdownButton` `STextLink` `SSwitch` `SToggle` |
|
|
38
51
|
| **입력 (폼)** | `SForm` `SField` `SInput` `SChatInput`(대화 입력창) `SSearchInput` `SNumberInput` `STextarea` `SEditor` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SRadioCard` `SRadioCardGroup` `SChip` `SChipInput` `SBarcodeInput` `SFilePicker` |
|
|
39
52
|
| **날짜·시간** | `SCalendar` `SCalendarBoard`(한 달치 일정 판) `SDatePicker` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` |
|
|
40
|
-
| **표·목록** | `SChatMessage`(대화의 메시지 한 건) `SChatAttachedFile`(
|
|
53
|
+
| **표·목록** | `SChatMessage`(대화의 메시지 한 건) `SChatAttachedFile`(입력창 위, 아직 보내지 않은 첨부 한 칸) `SChatFile`(대화 흐름에 선, 보낸 파일 한 칸) `SChatSystemMessage`(대화 흐름 가운데 서는 시스템 안내) `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SListItem` `SExpansionList` `SDraggableList` `SDraggableItem` `STree` |
|
|
41
54
|
| **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SSystemActionButton`(GNB system 패널에 한 줄씩 쌓는 액션 행 — 버튼 고르기는 §3-5) `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SLoginCard`(통합 계정 로그인 화면의 카드) `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
|
|
42
55
|
| **내비게이션** | `STabs` `SPagination` `SStepper` |
|
|
56
|
+
| **차트** | `SBarChart`(막대 그래프 — 항목끼리 크기를 견준다) |
|
|
43
57
|
| **표시·상태** | `STag` `SBadge` `SIcon` `SImage` `SCallout` `SGuide` |
|
|
44
58
|
| **진행·로딩** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
|
|
45
59
|
| **오버레이** | `STooltip` `SPopover` `SPopup` `SDrawer` `SPortal` |
|
|
@@ -161,8 +175,8 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
161
175
|
| 층 | 무엇인가 | 컴포넌트 |
|
|
162
176
|
| --- | --- | --- |
|
|
163
177
|
| **셸** | 앱 전체 뼈대. 페이지가 바뀌어도 남는다 | `SLayout` `SGnb` `SGnbSystem`(GNB 맨 아래 판 · 전폭 상단바 오른쪽 끝) `SPage` `SPageHeader`(`SLayout` 안에서 `SPage` 앞에 둔다) |
|
|
164
|
-
| **블록** | `SPage` 의 직계 자식. 페이지를 세로로 쌓는 단위 | `SSectionHeaderCard` `SCard` `SChatMessage` `SChatSystemMessage` `SChatInput` `SLoginCard`(유일하게 `SPage` 밖에 선다 — 로그인 화면 자체가 자기 자리다, §4-6) `SForm` `SSplitter` `SScrollArea` `SCalendarBoard` `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SExpansionList` `SDraggableList` `STree` `SCallout` `STabs` `SStepper` `SPagination` `SDivider` |
|
|
165
|
-
| **요소** | 블록 **안에** 놓이는 컨트롤. 혼자 페이지에 서지 않는다 | `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` `SImage` `SLinearProgress` `SCircleProgress` |
|
|
178
|
+
| **블록** | `SPage` 의 직계 자식. 페이지를 세로로 쌓는 단위 | `SSectionHeaderCard` `SCard` `SChatMessage` `SChatSystemMessage` `SChatInput` `SLoginCard`(유일하게 `SPage` 밖에 선다 — 로그인 화면 자체가 자기 자리다, §4-6) `SForm` `SSplitter` `SScrollArea` `SCalendarBoard` `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SExpansionList` `SDraggableList` `STree` `SCallout` `SBarChart` `STabs` `SStepper` `SPagination` `SDivider` |
|
|
179
|
+
| **요소** | 블록 **안에** 놓이는 컨트롤. 혼자 페이지에 서지 않는다 | `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` |
|
|
166
180
|
| **인라인** | 텍스트 흐름·셀·라벨 안에 섞인다. 혼자 블록이 되지 않는다 | `STag` `SBadge` `SIcon` `STextLink` `SChip` |
|
|
167
181
|
| **레이어** | 문서 흐름 **밖**에 떠서 그려진다. 어느 층에서 띄우든 레이아웃에 영향이 없다 | `SModal` `SActionModal` `SConfirmModal` `SPopup` `SDrawer` `SPopover` `STooltip` `SPortal` `SAccountListBox`(계정 행에 붙어 뜬다 — 직접 띄우지 않는다) `SToast` `SLoadingModal` `SLoadingContainer` `SGuide` |
|
|
168
182
|
|
|
@@ -507,8 +521,9 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
507
521
|
| 목록을 좁히는 필터를 켜고 끄게 한다 | `SToggle` | §3-7-3 |
|
|
508
522
|
| 자유 입력값을 여러 개 쌓게 한다 | `SChipInput` | §3-1 |
|
|
509
523
|
| 입력된 값 하나를 지우거나 고치게 한다 | `SChip` | §3-1 |
|
|
510
|
-
| 파일을 받는다 (고르게 한다) | `SFilePicker` | 고른·보낸 파일을 **보여주는** 것은 `SChatAttachedFile` |
|
|
511
|
-
|
|
|
524
|
+
| 파일을 받는다 (고르게 한다) | `SFilePicker` | 고른·보낸 파일을 **보여주는** 것은 `SChatAttachedFile`·`SChatFile` |
|
|
525
|
+
| 보내기 전 첨부를 입력창 위에 보여준다 (눌러 뺀다) | `SChatAttachedFile` | 보낸 뒤는 `SChatFile` · 고르게 하는 것은 `SFilePicker` |
|
|
526
|
+
| 보낸 파일을 대화 흐름에 보여준다 (눌러 연다) | `SChatFile` | `SChatMessage` 의 `attachments` 로 넘긴다 — 직접 나열하지 않는다 |
|
|
512
527
|
| 날짜 하나를 받는다 | `SDatePicker` | §3-7-4 |
|
|
513
528
|
| 연도 선택 리스트만 커스텀 조합에 넣는다 | `SDatePickerYearListbox` | §3-7-4 |
|
|
514
529
|
| 연도+월 선택 리스트만 커스텀 조합에 넣는다 | `SDatePickerMonthListbox` | §3-7-4 |
|
|
@@ -534,6 +549,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
534
549
|
| 부모-자식 계층을 들여쓰기로 보여준다 | `STree` | §3-7-7 |
|
|
535
550
|
| 사용자가 순서를 드래그로 바꾸게 한다 | `SDraggableList` + `SDraggableItem` | §3-7-6 |
|
|
536
551
|
| 날짜별 일정을 한 달치 격자로 펼쳐 보여준다 | `SCalendarBoard` | §3-7-4 |
|
|
552
|
+
| 항목끼리 크기를 눈으로 견주게 한다 (기간별 추이·채널별 비중) | `SBarChart` | 정확한 값을 읽어야 하면 `STable` — 그래프는 "어느 쪽이 큰가" 를 답하지 "얼마인가" 를 답하지 않는다 |
|
|
537
553
|
| 표 위에 건수 요약과 액션을 얹는다 | `STableBar` | §4-2 |
|
|
538
554
|
| 상태·분류를 라벨로 찍는다 | `STag` | §3-1 |
|
|
539
555
|
| 색 점만으로 상태를 찍는다 | `SBadge` | §3-1 |
|
|
@@ -2391,7 +2407,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
|
|
|
2391
2407
|
10 11 12 13 14 16 18 20 24 28 32
|
|
2392
2408
|
|
|
2393
2409
|
### radius (rounded-*)
|
|
2394
|
-
2 4 6 8 full control-sm control-md feedback-xs-square feedback-sm-square feedback-pill field-sm field-md navigation item-bordered
|
|
2410
|
+
2 4 6 8 12 full control-sm control-md feedback-xs-square feedback-sm-square feedback-pill field-sm field-md navigation item-bordered
|
|
2395
2411
|
|
|
2396
2412
|
### 색상 팔레트 (text-{family}-{step}, bg-…, border-…)
|
|
2397
2413
|
- white
|
|
@@ -2405,7 +2421,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
|
|
|
2405
2421
|
- steelblue: 10 25 45 60 65 70 75 80 85 90 95 99
|
|
2406
2422
|
- oceanblue: 15 25 50 60 65 70 75 80 85 90 95 99
|
|
2407
2423
|
- brilliantblue: 10 20 25 40 50 60 70 75 80 85 90 95 99 05
|
|
2408
|
-
- bg: screen frame brand subtle accent accentLight accentBright accentFaint deep danger dangerLight warning caution progress success
|
|
2424
|
+
- bg: screen frame brand subtle accent accentLight accentBright accentFaint deep danger dangerLight warning caution progress success neutralLight neutralBright tableHeader
|
|
2409
2425
|
- fg: primary secondary tertiary quaternary brand subtleWarm subtleCool deep success successLight dangerLight accent accentLight danger warning inverse
|
|
2410
2426
|
- border: default strong bold accent accentLight danger warning success
|
|
2411
2427
|
- disabled: bg text icon border
|
|
@@ -2500,7 +2516,6 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
|
|
|
2500
2516
|
--sys-color-bg-screen
|
|
2501
2517
|
--sys-color-bg-subtle
|
|
2502
2518
|
--sys-color-bg-success
|
|
2503
|
-
--sys-color-bg-successLight
|
|
2504
2519
|
--sys-color-bg-tableHeader
|
|
2505
2520
|
--sys-color-bg-warning
|
|
2506
2521
|
--sys-color-blue-strong
|
|
@@ -2725,6 +2740,112 @@ export const BADGE_COLORS = [
|
|
|
2725
2740
|
|
|
2726
2741
|
---
|
|
2727
2742
|
|
|
2743
|
+
# SBarChart
|
|
2744
|
+
|
|
2745
|
+
> 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
|
|
2746
|
+
|
|
2747
|
+
### SBarChart
|
|
2748
|
+
|
|
2749
|
+
#### Props
|
|
2750
|
+
|
|
2751
|
+
| Prop | Type | Default | Description |
|
|
2752
|
+
|------|------|---------|-------------|
|
|
2753
|
+
| `categories` | `string[]` | — | 가로축(가로 막대면 세로축)에 놓일 항목 이름 |
|
|
2754
|
+
| `series` | `SBarChartSeries[]` | — | 계열 목록. 각 `data` 는 `categories` 와 같은 순서다 |
|
|
2755
|
+
| `direction?` | `SBarChartDirection` | `'vertical'` | 막대가 자라는 방향 |
|
|
2756
|
+
| `palette?` | `SBarChartPalette` | `'default'` | 색 팔레트. 계열이 하나면 계열 대신 **항목**마다 색이 바뀐다. `custom` 일 때만 `colors` 를 본다 |
|
|
2757
|
+
| `colors?` | `SBarChartColor[]` | — | `palette='custom'` 에서 쓸 색 이름을 계열 순서대로. 계열보다 짧으면 앞에서부터 순환한다 |
|
|
2758
|
+
| `max?` | `number` | — | 값 축의 최댓값. 주지 않으면 데이터에서 읽기 좋은 값으로 정한다 |
|
|
2759
|
+
| `tickCount?` | `number` | `8` | 값 축 눈금 개수 |
|
|
2760
|
+
| `barSize?` | `number` | `BAR_SIZE_MAX` | 막대 두께 상한(px, 24~80). 낮추면 좌우 여백 상한도 같은 비율로 따라 내려온다 |
|
|
2761
|
+
| `showValueLabel?` | `boolean` | `true` | 막대마다 값을 적는다 |
|
|
2762
|
+
| `showLegend?` | `boolean` | `true` | 범례를 보인다 |
|
|
2763
|
+
| `legendPosition?` | `SBarChartLegendPosition` | `'top'` | 범례 위치 |
|
|
2764
|
+
| `showTooltip?` | `boolean` | `true` | 막대에 마우스를 올리면 값 상자를 띄운다 |
|
|
2765
|
+
| `formatValue?` | `(value: number) => string` | `defaultFormat` | 값 표시 형식 |
|
|
2766
|
+
| `height?` | `number \| string` | — | 차트 높이. **아래 축 텍스트까지 포함한 값**이다 — 그림은 그만큼 줄어든다 |
|
|
2767
|
+
| `className?` | `string` | — | |
|
|
2768
|
+
| `style?` | `CSSProperties` | — | |
|
|
2769
|
+
|
|
2770
|
+
#### Events
|
|
2771
|
+
|
|
2772
|
+
| Event | Type | Description |
|
|
2773
|
+
|-------|------|-------------|
|
|
2774
|
+
| `onBarClick` | `(point: SBarChartPoint) => void` | 막대를 눌렀을 때 |
|
|
2775
|
+
|
|
2776
|
+
## Types
|
|
2777
|
+
|
|
2778
|
+
### SBarChartSeries
|
|
2779
|
+
|
|
2780
|
+
```ts
|
|
2781
|
+
/** 한 계열 — 범례 한 줄에 대응한다. */
|
|
2782
|
+
export interface SBarChartSeries {
|
|
2783
|
+
/** 범례·툴팁에 표시할 이름 */
|
|
2784
|
+
name: string;
|
|
2785
|
+
/** `categories` 와 같은 순서의 값. 짧으면 남는 항목은 막대를 그리지 않는다 */
|
|
2786
|
+
data: number[];
|
|
2787
|
+
}
|
|
2788
|
+
```
|
|
2789
|
+
|
|
2790
|
+
### SBarChartDirection
|
|
2791
|
+
|
|
2792
|
+
```ts
|
|
2793
|
+
/** 막대가 자라는 방향. */
|
|
2794
|
+
export type SBarChartDirection = 'vertical' | 'horizontal';
|
|
2795
|
+
```
|
|
2796
|
+
|
|
2797
|
+
### SBarChartPalette
|
|
2798
|
+
|
|
2799
|
+
```ts
|
|
2800
|
+
/**
|
|
2801
|
+
* 색 팔레트.
|
|
2802
|
+
* - `default` 파랑 한 색. 계열이 하나거나 색으로 나눌 것이 없을 때
|
|
2803
|
+
* - `multi` 서로 무관한 항목(11색)을 순서대로
|
|
2804
|
+
* - `gradation` 한 지표의 단계(6색)를 진한 쪽부터 순서대로
|
|
2805
|
+
* - `custom` `colors` 로 고른 색을 순서대로
|
|
2806
|
+
*/
|
|
2807
|
+
export type SBarChartPalette = 'default' | 'multi' | 'gradation' | 'custom';
|
|
2808
|
+
```
|
|
2809
|
+
|
|
2810
|
+
### SBarChartColor
|
|
2811
|
+
|
|
2812
|
+
```ts
|
|
2813
|
+
/**
|
|
2814
|
+
* `palette='custom'` 에서 고를 수 있는 색 이름.
|
|
2815
|
+
* positive=늘어남 · negative=줄어듦 · neutral=변화 없음 을 뜻하므로 뜻에 맞게 고른다.
|
|
2816
|
+
*/
|
|
2817
|
+
export type SBarChartColor =
|
|
2818
|
+
| 'positivePrimary'
|
|
2819
|
+
| 'positiveSecondary'
|
|
2820
|
+
| 'negativePrimary'
|
|
2821
|
+
| 'negativeSecondary'
|
|
2822
|
+
| 'neutralPrimary'
|
|
2823
|
+
| 'neutralSecondary';
|
|
2824
|
+
```
|
|
2825
|
+
|
|
2826
|
+
### SBarChartLegendPosition
|
|
2827
|
+
|
|
2828
|
+
```ts
|
|
2829
|
+
/** 범례 위치. */
|
|
2830
|
+
export type SBarChartLegendPosition = 'top' | 'bottom';
|
|
2831
|
+
```
|
|
2832
|
+
|
|
2833
|
+
### SBarChartPoint
|
|
2834
|
+
|
|
2835
|
+
```ts
|
|
2836
|
+
/** 툴팁·클릭이 가리키는 지점. */
|
|
2837
|
+
export interface SBarChartPoint {
|
|
2838
|
+
/** 계열 인덱스 */
|
|
2839
|
+
seriesIndex: number;
|
|
2840
|
+
/** 카테고리 인덱스 */
|
|
2841
|
+
categoryIndex: number;
|
|
2842
|
+
/** 그 지점의 값 */
|
|
2843
|
+
value: number;
|
|
2844
|
+
}
|
|
2845
|
+
```
|
|
2846
|
+
|
|
2847
|
+
---
|
|
2848
|
+
|
|
2728
2849
|
# SBarcodeInput
|
|
2729
2850
|
|
|
2730
2851
|
> 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
|
|
@@ -3123,18 +3244,46 @@ export type SCalloutMessage = string | SCalloutMessage[];
|
|
|
3123
3244
|
|
|
3124
3245
|
#### Props
|
|
3125
3246
|
|
|
3247
|
+
| Prop | Type | Default | Description |
|
|
3248
|
+
|------|------|---------|-------------|
|
|
3249
|
+
| `name` | `string` | — | 파일명. 칸을 넘치면 말줄임된다 — 칸의 폭은 부모가 정한다. |
|
|
3250
|
+
|
|
3251
|
+
#### Events
|
|
3252
|
+
|
|
3253
|
+
| Event | Type | Description |
|
|
3254
|
+
|-------|------|-------------|
|
|
3255
|
+
| `onRemove` | `() => void` | 제거 버튼을 눌렀을 때. 주지 않으면 버튼이 서지 않는다. 입력창 위의 첨부는 보내기 전까지 뺄 수 있어야 하므로 대개 준다 — 버튼을 세우지 않는 것은 보내는 중처럼 무를 수 없는 짧은 순간뿐이다. |
|
|
3256
|
+
|
|
3257
|
+
## Dependencies
|
|
3258
|
+
|
|
3259
|
+
### Depends on
|
|
3260
|
+
|
|
3261
|
+
- [SGhostButton](../SGhostButton)
|
|
3262
|
+
- [SIcon](../SIcon)
|
|
3263
|
+
|
|
3264
|
+
### Graph
|
|
3265
|
+
|
|
3266
|
+
---
|
|
3267
|
+
|
|
3268
|
+
# SChatFile
|
|
3269
|
+
|
|
3270
|
+
> 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
|
|
3271
|
+
|
|
3272
|
+
### SChatFile
|
|
3273
|
+
|
|
3274
|
+
#### Props
|
|
3275
|
+
|
|
3126
3276
|
| Prop | Type | Default | Description |
|
|
3127
3277
|
|------|------|---------|-------------|
|
|
3128
3278
|
| `name` | `string` | — | 파일명. 칸을 넘치면 말줄임된다 — 칸의 폭은 부모가 정한다. |
|
|
3129
3279
|
| `extension?` | `string` | — | 보조 줄에 쓸 형식. 주지 않으면 **파일명의 마지막 점 뒤**를 쓴다. 파일명에서 뽑는 것이 틀리는 자리에서만 준다 — 확장자가 없거나(`README`), 확장자처럼 안 생겼거나(`backup.2026` → `2026`), 두 마디인 경우(`archive.tar.gz` → `gz`). 그 밖에는 주지 않는 편이 낫다. 파일명과 어긋난 형식이 적히는 일을 막는다. 앞의 점과 대소문자는 알아서 정리한다 — `'.CSV'` 와 `'csv'` 가 같게 나온다. |
|
|
3130
|
-
| `size
|
|
3131
|
-
| `variant` | `'attached' \| 'sent'` | — | 파일 칸이 서는 자리. **크기·면·선·글자·아이콘이 전부 여기서 갈린다.** `attached` 는 아직 보내지 않은 첨부다 — 입력창 위에 서는 한 줄짜리 칸이고 눌러 뺄 수 있다. `sent` 은 이미 보낸 파일이다 — 대화창에 서는 두 줄짜리 칸이고 `size` 가 **필수**다. |
|
|
3280
|
+
| `size` | `number` | — | 파일 크기(바이트). 형식(`extension`)과 묶어 `csv / 9.4KB` 로 그린다. **바이트 수를 그대로 넘긴다** — `'9.4KB'` 같은 완성된 문자열이 아니다. 표기를 앱이 만들면 같은 파일이 화면마다 다른 크기로 읽히므로 서식은 디자인 시스템이 쥔다. 서버가 준 바이트 수를 그대로 넘기면 된다. **필수다** — 보낸 파일은 확장자와 크기를 반드시 밝힌다. 선택으로 두면 빠뜨려도 타입이 통과하고 화면에서 보조 줄만 조용히 사라진다. |
|
|
3132
3281
|
|
|
3133
3282
|
#### Events
|
|
3134
3283
|
|
|
3135
3284
|
| Event | Type | Description |
|
|
3136
3285
|
|-------|------|-------------|
|
|
3137
|
-
| `
|
|
3286
|
+
| `onFileClick` | `() => void` | 칸을 눌렀을 때 — 파일을 여는 자리다. **필수다** — 보낸 파일은 언제나 열 수 있다. 선택으로 두면 빠뜨려도 타입이 통과하고, 커서·hover 면까지 갖춘 칸이 눌러도 아무 일이 없는 화면이 조용히 나간다. 루트가 `div` 라 `role="button"`·`tabIndex`·Enter/Space 를 DS 가 함께 붙인다 — 앱이 `onClick` 만 직접 달면 키보드로 닿지 않는 칸이 되므로 그 대신 이걸 쓴다. |
|
|
3138
3287
|
|
|
3139
3288
|
## Dependencies
|
|
3140
3289
|
|
|
@@ -3203,9 +3352,10 @@ export type SCalloutMessage = string | SCalloutMessage[];
|
|
|
3203
3352
|
| `avatarSrc?` | `string` | — | 아바타 이미지 경로. 없으면 사람 아이콘 자리표시가 선다. **받은 메시지에만 쓰인다** — 보낸 메시지에는 아바타가 서지 않는다(`direction` 참고). |
|
|
3204
3353
|
| `avatarAlt?` | `string` | — | 아바타 대체 텍스트 |
|
|
3205
3354
|
| `continued?` | `boolean` | `false` | 같은 사람이 이어서 말한 묶음인지. 켜면 **아바타와 `sender` 를 그리지 않는다** — 말풍선이 위 묶음과 같은 선에서 시작해 한 사람의 말로 이어 읽힌다. 받은 메시지에서는 아바타 자리를 비워 둔 채 남긴다 — 안 남기면 말풍선이 44px 왼쪽으로 밀려 위 묶음과 어긋난다. 보낸 메시지는 아바타가 없으므로 이름만 숨긴다. `time`·`readStatus` 는 그대로 나온다. 시간이 벌어져 묶음을 나눴어도 얼굴은 한 번만 보이면 되고 시각은 묶음마다 필요하기 때문이다. **얼마나 벌어져야 묶음을 나눌지는 앱이 정한다** — 30분이든 하루든 대화의 성격에 달렸으므로 컴포넌트는 기준을 갖지 않고 스위치만 연다. |
|
|
3206
|
-
| `variant?` | `SChatMessageVariant` | `'default'` | 말풍선 종류. `template`
|
|
3355
|
+
| `variant?` | `SChatMessageVariant` | `'default'` | 말풍선 종류. `template` 은 미리 등록된 서식으로, `admin` 은 관리자·시스템이 보낸 메시지임을 각각 다른 면으로 드러낸다. 면 색은 토큰이 정하므로 여기서 색을 정하지 않는다. **보낸 메시지(`direction="outgoing"`)에만 쓰인다** — 받은 메시지에는 넘겨도 그리지 않는다. 셋 다 사업자 쪽이 보내는 것이라 받은 쪽에는 뜻이 없다. 앱이 메시지를 한 번만 매핑해 방향과 무관하게 넘길 수 있도록 막지 않고 무시한다. |
|
|
3207
3356
|
| `actions?` | `ReactNode` | — | 시각 아래에 붙는 동작 슬롯. 없으면 그 줄이 통째로 빠진다. 「상담원 연결」처럼 **이 메시지에 이어서 할 수 있는 동작**이 오는 자리다. 무엇을 놓을지는 앱이 정하고, 메시지는 줄로 세우고 방향에 맞춰 정렬하는 것까지만 한다. 시각과 같은 선에서 시작한다 — 말풍선 끝에서 한 칸 안이다. |
|
|
3208
3357
|
| `messages?` | `ReactNode[]` | — | 말풍선 목록. **한 항목이 말풍선 하나**가 되어 위에서 아래로 쌓인다. 한 사람이 연달아 말하면 아바타·이름·시각은 한 번만 서고 말풍선만 늘어난다 — 그 묶음이 이 컴포넌트 한 개다. 말풍선 안에는 글뿐 아니라 버튼 같은 요소도 올 수 있다. |
|
|
3358
|
+
| `attachments?` | `ReactNode[]` | — | 말풍선 아래에 붙는 파일 목록. **한 항목이 칸 하나**가 되어 위에서 아래로 쌓인다. `SChatFile` 을 넣는 자리다 — 말풍선과 달리 면으로 감싸지 않고 넘긴 것을 그대로 세운다. 파일 칸은 제 면·선·라운드를 이미 갖고 있어 한 번 더 감싸면 칸이 두 겹으로 보인다. **`messages` 대신 여기로 넘긴다.** `messages` 로 넘기면 말풍선 면에 감싸여 그렇게 된다. 아바타·이름·시각·읽음 표시는 글 메시지와 똑같이 이 컴포넌트가 그린다 — 파일을 보낸 것도 대화의 한 줄이므로 행 규칙을 따로 갖지 않는다. |
|
|
3209
3359
|
|
|
3210
3360
|
## Types
|
|
3211
3361
|
|
|
@@ -3245,12 +3395,15 @@ export const CHAT_MESSAGE_READ_STATUSES = ['read', 'unread'] as const;
|
|
|
3245
3395
|
|
|
3246
3396
|
```ts
|
|
3247
3397
|
/**
|
|
3248
|
-
* 말풍선의 종류.
|
|
3398
|
+
* 말풍선의 종류.
|
|
3399
|
+
* - `default` 사람이 직접 쓴 메시지
|
|
3400
|
+
* - `template` 미리 등록된 서식으로 보내진 메시지
|
|
3401
|
+
* - `admin` 관리자·시스템이 보낸 메시지
|
|
3249
3402
|
*
|
|
3250
|
-
* **보낸 메시지에서만 면이 갈린다.**
|
|
3251
|
-
* 뜻이 없고, 받은 메시지는
|
|
3403
|
+
* **보낸 메시지에서만 면이 갈린다.** 셋 다 사업자 쪽이 보내는 것이라 받은 메시지에는
|
|
3404
|
+
* 뜻이 없고, 받은 메시지는 무엇으로 보냈든 같은 면으로 선다.
|
|
3252
3405
|
*/
|
|
3253
|
-
export const CHAT_MESSAGE_VARIANTS = ['default', 'template'] as const;
|
|
3406
|
+
export const CHAT_MESSAGE_VARIANTS = ['default', 'template', 'admin'] as const;
|
|
3254
3407
|
```
|
|
3255
3408
|
|
|
3256
3409
|
## Dependencies
|
|
@@ -5090,6 +5243,7 @@ export type SGhostButtonIntent = 'default' | 'danger' | 'action' | 'subAction' |
|
|
|
5090
5243
|
- [SBarcodeInput](../SBarcodeInput)
|
|
5091
5244
|
- [SCalendar](../SCalendar)
|
|
5092
5245
|
- [SCalendarBoard](../SCalendarBoard)
|
|
5246
|
+
- [SChatAttachedFile](../SChatAttachedFile)
|
|
5093
5247
|
- [SChatInput](../SChatInput)
|
|
5094
5248
|
- [SChip](../SChip)
|
|
5095
5249
|
- [SDatePicker](../SDatePicker)
|
|
@@ -5471,6 +5625,7 @@ export type SGuideMessage = string | SGuideMessage[];
|
|
|
5471
5625
|
- [SButton](../SButton)
|
|
5472
5626
|
- [SCallout](../SCallout)
|
|
5473
5627
|
- [SChatAttachedFile](../SChatAttachedFile)
|
|
5628
|
+
- [SChatFile](../SChatFile)
|
|
5474
5629
|
- [SChatMessage](../SChatMessage)
|
|
5475
5630
|
- [SCheckbox](../SCheckbox)
|
|
5476
5631
|
- [SChipFilter](../SChipFilter)
|
package/dist/llms.txt
CHANGED
|
@@ -27,6 +27,19 @@
|
|
|
27
27
|
|
|
28
28
|
"비슷하게 생긴 것을 직접 만드는 것"이 어색함의 가장 큰 원인이다. 대응 컴포넌트를 쓰면 색·간격·상태·접근성이 전부 따라온다.
|
|
29
29
|
|
|
30
|
+
### 0-0. 화면을 짜기 전에 — 세 가지 질문
|
|
31
|
+
|
|
32
|
+
**컴포넌트를 고르기 전에 이 세 가지에 답한다.** 요청에 답이 없으면 추측해서 채우지 말고 **되묻는다.**
|
|
33
|
+
|
|
34
|
+
1. 이 화면에서 사용자가 하려는 **단 하나의 일**은 무엇인가
|
|
35
|
+
2. 그 일을 끝내는 데 **없어도 되는 것**은 무엇인가 — 컬럼·버튼·안내 문구 중 빼도 되는 것
|
|
36
|
+
3. **실패하면** 어디로 돌아가는가 — 오류·빈 목록·권한 없음일 때 무엇을 보여줄지
|
|
37
|
+
|
|
38
|
+
요청받은 것을 그대로 다 넣지 않는다. **"있을 법한 필드를 빠짐없이 채우는 것"이 화면을 망치는 가장 흔한 방식이다.**
|
|
39
|
+
목록에 컬럼을, 폼에 입력란을, 툴바에 버튼을 하나 더 넣기는 쉽고 나중에 빼기는 어렵다. 2번은 그래서 있다.
|
|
40
|
+
|
|
41
|
+
2번에 답이 하나도 없으면 아직 화면을 이해하지 못한 것이다. 그 상태로 코드를 쓰면 미정 상태가 그대로 화면이 된다.
|
|
42
|
+
|
|
30
43
|
### 0-1. 전체 컴포넌트 인덱스
|
|
31
44
|
|
|
32
45
|
무엇을 만들지 정했으면 **이 표에서 먼저 찾는다.** 상세 Props·Types 는 `dist/components/<이름>/README.md` 참조.
|
|
@@ -38,9 +51,10 @@
|
|
|
38
51
|
| **버튼·링크** | `SButton` `SGhostButton` `SDropdownButton` `STextLink` `SSwitch` `SToggle` |
|
|
39
52
|
| **입력 (폼)** | `SForm` `SField` `SInput` `SChatInput`(대화 입력창) `SSearchInput` `SNumberInput` `STextarea` `SEditor` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SRadioCard` `SRadioCardGroup` `SChip` `SChipInput` `SBarcodeInput` `SFilePicker` |
|
|
40
53
|
| **날짜·시간** | `SCalendar` `SCalendarBoard`(한 달치 일정 판) `SDatePicker` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` |
|
|
41
|
-
| **표·목록** | `SChatMessage`(대화의 메시지 한 건) `SChatAttachedFile`(
|
|
54
|
+
| **표·목록** | `SChatMessage`(대화의 메시지 한 건) `SChatAttachedFile`(입력창 위, 아직 보내지 않은 첨부 한 칸) `SChatFile`(대화 흐름에 선, 보낸 파일 한 칸) `SChatSystemMessage`(대화 흐름 가운데 서는 시스템 안내) `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SListItem` `SExpansionList` `SDraggableList` `SDraggableItem` `STree` |
|
|
42
55
|
| **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SSystemActionButton`(GNB system 패널에 한 줄씩 쌓는 액션 행 — 버튼 고르기는 §3-5) `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SLoginCard`(통합 계정 로그인 화면의 카드) `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
|
|
43
56
|
| **내비게이션** | `STabs` `SPagination` `SStepper` |
|
|
57
|
+
| **차트** | `SBarChart`(막대 그래프 — 항목끼리 크기를 견준다) |
|
|
44
58
|
| **표시·상태** | `STag` `SBadge` `SIcon` `SImage` `SCallout` `SGuide` |
|
|
45
59
|
| **진행·로딩** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
|
|
46
60
|
| **오버레이** | `STooltip` `SPopover` `SPopup` `SDrawer` `SPortal` |
|
|
@@ -162,8 +176,8 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
162
176
|
| 층 | 무엇인가 | 컴포넌트 |
|
|
163
177
|
| --- | --- | --- |
|
|
164
178
|
| **셸** | 앱 전체 뼈대. 페이지가 바뀌어도 남는다 | `SLayout` `SGnb` `SGnbSystem`(GNB 맨 아래 판 · 전폭 상단바 오른쪽 끝) `SPage` `SPageHeader`(`SLayout` 안에서 `SPage` 앞에 둔다) |
|
|
165
|
-
| **블록** | `SPage` 의 직계 자식. 페이지를 세로로 쌓는 단위 | `SSectionHeaderCard` `SCard` `SChatMessage` `SChatSystemMessage` `SChatInput` `SLoginCard`(유일하게 `SPage` 밖에 선다 — 로그인 화면 자체가 자기 자리다, §4-6) `SForm` `SSplitter` `SScrollArea` `SCalendarBoard` `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SExpansionList` `SDraggableList` `STree` `SCallout` `STabs` `SStepper` `SPagination` `SDivider` |
|
|
166
|
-
| **요소** | 블록 **안에** 놓이는 컨트롤. 혼자 페이지에 서지 않는다 | `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` `SImage` `SLinearProgress` `SCircleProgress` |
|
|
179
|
+
| **블록** | `SPage` 의 직계 자식. 페이지를 세로로 쌓는 단위 | `SSectionHeaderCard` `SCard` `SChatMessage` `SChatSystemMessage` `SChatInput` `SLoginCard`(유일하게 `SPage` 밖에 선다 — 로그인 화면 자체가 자기 자리다, §4-6) `SForm` `SSplitter` `SScrollArea` `SCalendarBoard` `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SExpansionList` `SDraggableList` `STree` `SCallout` `SBarChart` `STabs` `SStepper` `SPagination` `SDivider` |
|
|
180
|
+
| **요소** | 블록 **안에** 놓이는 컨트롤. 혼자 페이지에 서지 않는다 | `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` |
|
|
167
181
|
| **인라인** | 텍스트 흐름·셀·라벨 안에 섞인다. 혼자 블록이 되지 않는다 | `STag` `SBadge` `SIcon` `STextLink` `SChip` |
|
|
168
182
|
| **레이어** | 문서 흐름 **밖**에 떠서 그려진다. 어느 층에서 띄우든 레이아웃에 영향이 없다 | `SModal` `SActionModal` `SConfirmModal` `SPopup` `SDrawer` `SPopover` `STooltip` `SPortal` `SAccountListBox`(계정 행에 붙어 뜬다 — 직접 띄우지 않는다) `SToast` `SLoadingModal` `SLoadingContainer` `SGuide` |
|
|
169
183
|
|
|
@@ -508,8 +522,9 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
508
522
|
| 목록을 좁히는 필터를 켜고 끄게 한다 | `SToggle` | §3-7-3 |
|
|
509
523
|
| 자유 입력값을 여러 개 쌓게 한다 | `SChipInput` | §3-1 |
|
|
510
524
|
| 입력된 값 하나를 지우거나 고치게 한다 | `SChip` | §3-1 |
|
|
511
|
-
| 파일을 받는다 (고르게 한다) | `SFilePicker` | 고른·보낸 파일을 **보여주는** 것은 `SChatAttachedFile` |
|
|
512
|
-
|
|
|
525
|
+
| 파일을 받는다 (고르게 한다) | `SFilePicker` | 고른·보낸 파일을 **보여주는** 것은 `SChatAttachedFile`·`SChatFile` |
|
|
526
|
+
| 보내기 전 첨부를 입력창 위에 보여준다 (눌러 뺀다) | `SChatAttachedFile` | 보낸 뒤는 `SChatFile` · 고르게 하는 것은 `SFilePicker` |
|
|
527
|
+
| 보낸 파일을 대화 흐름에 보여준다 (눌러 연다) | `SChatFile` | `SChatMessage` 의 `attachments` 로 넘긴다 — 직접 나열하지 않는다 |
|
|
513
528
|
| 날짜 하나를 받는다 | `SDatePicker` | §3-7-4 |
|
|
514
529
|
| 연도 선택 리스트만 커스텀 조합에 넣는다 | `SDatePickerYearListbox` | §3-7-4 |
|
|
515
530
|
| 연도+월 선택 리스트만 커스텀 조합에 넣는다 | `SDatePickerMonthListbox` | §3-7-4 |
|
|
@@ -535,6 +550,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
535
550
|
| 부모-자식 계층을 들여쓰기로 보여준다 | `STree` | §3-7-7 |
|
|
536
551
|
| 사용자가 순서를 드래그로 바꾸게 한다 | `SDraggableList` + `SDraggableItem` | §3-7-6 |
|
|
537
552
|
| 날짜별 일정을 한 달치 격자로 펼쳐 보여준다 | `SCalendarBoard` | §3-7-4 |
|
|
553
|
+
| 항목끼리 크기를 눈으로 견주게 한다 (기간별 추이·채널별 비중) | `SBarChart` | 정확한 값을 읽어야 하면 `STable` — 그래프는 "어느 쪽이 큰가" 를 답하지 "얼마인가" 를 답하지 않는다 |
|
|
538
554
|
| 표 위에 건수 요약과 액션을 얹는다 | `STableBar` | §4-2 |
|
|
539
555
|
| 상태·분류를 라벨로 찍는다 | `STag` | §3-1 |
|
|
540
556
|
| 색 점만으로 상태를 찍는다 | `SBadge` | §3-1 |
|
|
@@ -2392,7 +2408,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
|
|
|
2392
2408
|
10 11 12 13 14 16 18 20 24 28 32
|
|
2393
2409
|
|
|
2394
2410
|
### radius (rounded-*)
|
|
2395
|
-
2 4 6 8 full control-sm control-md feedback-xs-square feedback-sm-square feedback-pill field-sm field-md navigation item-bordered
|
|
2411
|
+
2 4 6 8 12 full control-sm control-md feedback-xs-square feedback-sm-square feedback-pill field-sm field-md navigation item-bordered
|
|
2396
2412
|
|
|
2397
2413
|
### 색상 팔레트 (text-{family}-{step}, bg-…, border-…)
|
|
2398
2414
|
- white
|
|
@@ -2406,7 +2422,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
|
|
|
2406
2422
|
- steelblue: 10 25 45 60 65 70 75 80 85 90 95 99
|
|
2407
2423
|
- oceanblue: 15 25 50 60 65 70 75 80 85 90 95 99
|
|
2408
2424
|
- brilliantblue: 10 20 25 40 50 60 70 75 80 85 90 95 99 05
|
|
2409
|
-
- bg: screen frame brand subtle accent accentLight accentBright accentFaint deep danger dangerLight warning caution progress success
|
|
2425
|
+
- bg: screen frame brand subtle accent accentLight accentBright accentFaint deep danger dangerLight warning caution progress success neutralLight neutralBright tableHeader
|
|
2410
2426
|
- fg: primary secondary tertiary quaternary brand subtleWarm subtleCool deep success successLight dangerLight accent accentLight danger warning inverse
|
|
2411
2427
|
- border: default strong bold accent accentLight danger warning success
|
|
2412
2428
|
- disabled: bg text icon border
|
|
@@ -2501,7 +2517,6 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
|
|
|
2501
2517
|
--sys-color-bg-screen
|
|
2502
2518
|
--sys-color-bg-subtle
|
|
2503
2519
|
--sys-color-bg-success
|
|
2504
|
-
--sys-color-bg-successLight
|
|
2505
2520
|
--sys-color-bg-tableHeader
|
|
2506
2521
|
--sys-color-bg-warning
|
|
2507
2522
|
--sys-color-blue-strong
|
|
@@ -2558,7 +2573,7 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
|
|
|
2558
2573
|
--sys-color-navigation-gnb-bg-dark
|
|
2559
2574
|
--sys-color-navigation-gnb-bg-system
|
|
2560
2575
|
|
|
2561
|
-
## 3. 컴포넌트 인덱스 (
|
|
2576
|
+
## 3. 컴포넌트 인덱스 (79종)
|
|
2562
2577
|
|
|
2563
2578
|
**Props 는 이 문서에 없다.** 쓸 컴포넌트를 정했으면 그 컴포넌트의 README 를 읽는다.
|
|
2564
2579
|
|
|
@@ -2567,4 +2582,4 @@ Tailwind 유틸리티는 아래 스케일에 있는 값만 사용한다. 리터
|
|
|
2567
2582
|
예) SButton 을 쓴다면 `dist/components/SButton/README.md`.
|
|
2568
2583
|
prop 을 추측해서 쓰지 말고 반드시 README 로 확인한다 (분류별 용도는 §1 의 "전체 컴포넌트 인덱스" 참조).
|
|
2569
2584
|
|
|
2570
|
-
SAccountListBox · SActionModal · SBadge · SBarcodeInput · SButton · SCalendar · SCalendarBoard · SCallout · SCard · SChatAttachedFile · SChatInput · SChatMessage · SChatSystemMessage · SCheckbox · SChip · SChipFilter · SChipInput · SCircleProgress · SConfirmModal · SDatePicker · SDateRangePicker · SDivider · SDraggableItem · SDraggableList · SDrawer · SDropdownButton · SEditor · SExpansionItem · SExpansionList · SField · SFilePicker · SForm · SGhostButton · SGnb · SGnbSystem · SGuide · SIcon · SImage · SInput · SKeyValueTable · SLayout · SLinearProgress · SList · SListItem · SLoadingContainer · SLoadingModal · SLoginCard · SModal · SNumberInput · SPage · SPagination · SPopover · SPopup · SPortal · SRadio · SRadioButton · SRadioCard · SScrollArea · SSearchInput · SSectionHeaderCard · SSelect · SSplitter · SStepper · SSwitch · SSystemActionButton · STable · STableBar · STabs · STag · STextLink · STextarea · STimePicker · STimeRangePicker · SToast · SToggle · STooltip · STree
|
|
2585
|
+
SAccountListBox · SActionModal · SBadge · SBarChart · SBarcodeInput · SButton · SCalendar · SCalendarBoard · SCallout · SCard · SChatAttachedFile · SChatFile · SChatInput · SChatMessage · SChatSystemMessage · SCheckbox · SChip · SChipFilter · SChipInput · SCircleProgress · SConfirmModal · SDatePicker · SDateRangePicker · SDivider · SDraggableItem · SDraggableList · SDrawer · SDropdownButton · SEditor · SExpansionItem · SExpansionList · SField · SFilePicker · SForm · SGhostButton · SGnb · SGnbSystem · SGuide · SIcon · SImage · SInput · SKeyValueTable · SLayout · SLinearProgress · SList · SListItem · SLoadingContainer · SLoadingModal · SLoginCard · SModal · SNumberInput · SPage · SPagination · SPopover · SPopup · SPortal · SRadio · SRadioButton · SRadioCard · SScrollArea · SSearchInput · SSectionHeaderCard · SSelect · SSplitter · SStepper · SSwitch · SSystemActionButton · STable · STableBar · STabs · STag · STextLink · STextarea · STimePicker · STimeRangePicker · SToast · SToggle · STooltip · STree
|