sellmate-design-system-react 9.0.0-beta.93 → 9.0.0-beta.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/AGENTS.md +1 -0
  2. package/dist/components/SButton/button.config.d.ts +2 -1
  3. package/dist/components/SChatAttachedFile/chatAttachedFile.config.d.ts +2 -2
  4. package/dist/components/SChatFile/chatFile.config.d.ts +2 -2
  5. package/dist/components/SChipFilter/README.md +2 -0
  6. package/dist/components/SGhostButton/README.md +2 -0
  7. package/dist/components/SGnb/gnb.config.d.ts +6 -0
  8. package/dist/components/SIcon/README.md +3 -1
  9. package/dist/components/SIcon/SIcon.d.ts +1 -1
  10. package/dist/components/SLauncherListBox/launcherListBox.config.d.ts +2 -7
  11. package/dist/components/SLoadingModal/README.md +2 -2
  12. package/dist/components/SRadioCard/README.md +3 -0
  13. package/dist/components/SRadioCard/SRadioCard.d.ts +7 -2
  14. package/dist/components/SRadioCard/SRadioCardGroup.d.ts +3 -1
  15. package/dist/components/SSelect/README.md +1 -1
  16. package/dist/components/SSelect/SSelect.d.ts +1 -1
  17. package/dist/components/SStepper/stepper.config.d.ts +9 -3
  18. package/dist/components/STabs/tabs.config.d.ts +3 -8
  19. package/dist/components/STag/tag.config.d.ts +10 -9
  20. package/dist/components/STimePicker/timepicker.config.d.ts +3 -0
  21. package/dist/components/STree/README.md +2 -0
  22. package/dist/index.cjs +1101 -854
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.js +1101 -854
  25. package/dist/index.js.map +1 -1
  26. package/dist/lib/list-box-item.d.ts +16 -0
  27. package/dist/lib/tree-row.d.ts +31 -2
  28. package/dist/llms-full.txt +12 -4
  29. package/dist/llms.txt +1 -0
  30. package/dist/styles.css +228 -80
  31. package/package.json +1 -1
package/AGENTS.md CHANGED
@@ -1768,6 +1768,7 @@ tableRef.current.scrollToRow(row); // 복원
1768
1768
  - **쓰는 자리는 설정 화면·마법사(스텝)의 소수 결정이다.** 고르고 나면 뒤 화면이 통째로 바뀌거나 되돌리기 어려운 선택 — 평가 대상자 범위(전체/특정 구성원), 상담 자동 배정 방식 같은 것. 목록 필터·표 안 조건처럼 같은 선택지가 화면마다 반복 노출되는 자리에는 `SRadioGroup` 을 쓴다.
1769
1769
  - `SRadioCard` 단독은 `SRadioCardGroup` 이 만들 수 없는 배치에만 쓴다 — 나열은 그룹이 맡는다 (§2-2).
1770
1770
  - 카드 안에 상태 배지를 넣으려면 `tag` 슬롯에 `STag` 를 준다. 라벨 문자열에 "(추천)" 처럼 섞어 쓰지 않는다.
1771
+ - **한 선택지에 딸린 추가 입력(지정일·요청 사항 등)은 그 카드의 슬롯에 넣는다** — `SRadioCard` 는 `children`, `SRadioCardGroup` 은 옵션의 `content`. 카드 아래에 따로 입력을 늘어놓지 않는다. 슬롯은 서브타이틀 아래에 들여써서 놓이고 라디오의 클릭 영역 밖이라, 입력을 눌러도 카드 선택이 바뀌지 않는다. 들여쓰기·간격은 카드가 넣으므로 직접 주지 않는다. 고른 카드에만 보여주고, 카드를 `disabled` 로 두면 슬롯의 컨트롤도 함께 `disabled` 로 둔다(카드가 대신 잠그지 않는다).
1771
1772
  - **카드처럼 생겼다고 `SCard`/`SSectionHeaderCard` 로 감싸지 않는다.** `SRadioCard` 자체가 완결된 요소이고, 나열 간격은 `SRadioCardGroup` 의 `direction` 이 맞춘다 (§2-2).
1772
1773
 
1773
1774
  ##### 후보에 상하 관계가 있으면 — depth vs tree
@@ -26,7 +26,8 @@ export declare const BUTTON_SIZE_CONFIG: Record<SButtonSize, {
26
26
  height: string;
27
27
  paddingX: string;
28
28
  gap: string;
29
- iconSize: number;
29
+ iconSize: string;
30
+ iconOnlyWidth: string;
30
31
  fontSize: number;
31
32
  fontWeight: number;
32
33
  radius: string;
@@ -14,8 +14,8 @@ export declare const CHAT_ATTACHED_FILE_CONFIG: {
14
14
  readonly contentGap: "gap-(--cmp-chatAttachedFile-content-gap)";
15
15
  /** 클립 아이콘이 앉는 칩 — 내부 패딩·면·라운드 (높이는 아이콘+패딩이 정한다) */
16
16
  readonly tile: "p-(--cmp-chatAttachedFile-icon-wrapper-padding) rounded-(--cmp-chatAttachedFile-icon-wrapper-radius) bg-(--cmp-chatAttachedFile-icon-wrapper-bg)";
17
- /** 칩 안 클립 아이콘 크기(px). SVG width/height 는 속성값이라 CSS 변수를 못 받아 값으로 둔다 (토큰 값과 동일) */
18
- readonly iconSize: 16;
17
+ /** 칩 안 클립 아이콘 크기 */
18
+ readonly iconSize: "var(--cmp-chatAttachedFile-icon-size)";
19
19
  /** 파일명 타이포 프리셋 */
20
20
  readonly nameTypo: "typo-body-sm-default";
21
21
  /** 파일명 텍스트색 */
@@ -21,8 +21,8 @@ export declare const CHAT_FILE_CONFIG: {
21
21
  * 디자인팀에 `icon.wrapper.bg.hover` 를 요청해 나오는 대로 갈아끼운다.
22
22
  */
23
23
  readonly tile: "p-(--cmp-chatFile-icon-wrapper-padding) rounded-(--cmp-chatFile-icon-wrapper-radius) bg-(--cmp-chatFile-icon-wrapper-bg) group-hover/chat-file:bg-(--sys-color-bg-frame)";
24
- /** 칩 안 클립 아이콘 크기(px). SVG width/height 는 속성값이라 CSS 변수를 못 받아 값으로 둔다 (토큰 값과 동일) */
25
- readonly iconSize: 20;
24
+ /** 칩 안 클립 아이콘 크기 */
25
+ readonly iconSize: "var(--cmp-chatFile-icon-size)";
26
26
  /** 파일명 타이포 프리셋 */
27
27
  readonly nameTypo: "typo-body-md-bold";
28
28
  /** 파일명·부가정보 텍스트색 */
@@ -400,6 +400,7 @@ export interface SChipFilterDatePreset {
400
400
 
401
401
  - [SDatePicker](../SDatePicker)
402
402
  - [SDateRangePicker](../SDateRangePicker)
403
+ - [SGhostButton](../SGhostButton)
403
404
  - [SIcon](../SIcon)
404
405
  - [SRadio](../SRadio)
405
406
  - [SRadioButton](../SRadioButton)
@@ -414,6 +415,7 @@ export interface SChipFilterDatePreset {
414
415
  graph TD;
415
416
  SChipFilter --> SDatePicker
416
417
  SChipFilter --> SDateRangePicker
418
+ SChipFilter --> SGhostButton
417
419
  SChipFilter --> SIcon
418
420
  SChipFilter --> SRadio
419
421
  SChipFilter --> SRadioButton
@@ -54,6 +54,7 @@ export type SGhostButtonIntent =
54
54
  - [SChatAttachedFile](../SChatAttachedFile)
55
55
  - [SChatInput](../SChatInput)
56
56
  - [SChip](../SChip)
57
+ - [SChipFilter](../SChipFilter)
57
58
  - [SDatePicker](../SDatePicker)
58
59
  - [SDateRangePicker](../SDateRangePicker)
59
60
  - [SFilePicker](../SFilePicker)
@@ -92,6 +93,7 @@ graph TD;
92
93
  SChatAttachedFile --> SGhostButton
93
94
  SChatInput --> SGhostButton
94
95
  SChip --> SGhostButton
96
+ SChipFilter --> SGhostButton
95
97
  SDatePicker --> SGhostButton
96
98
  SDateRangePicker --> SGhostButton
97
99
  SFilePicker --> SGhostButton
@@ -43,10 +43,14 @@ export declare const GNB_MENU: Record<SGnbType, {
43
43
  depth2PaddingLeft: string;
44
44
  depth3PaddingLeft: string;
45
45
  depth1Icon: string;
46
+ depth1Typo: string;
47
+ itemTypo: string;
48
+ itemTypoSelected: string;
46
49
  depth1FontSize: number;
47
50
  depth1LineHeight: number;
48
51
  depth1FontWeight: number;
49
52
  itemFontSize: number;
53
+ /** 하위 메뉴 하이픈 자리표시자 높이(px) = item 타이포 line-height */
50
54
  itemLineHeight: number;
51
55
  itemFontWeight: number;
52
56
  itemFontWeightSelected: number;
@@ -91,6 +95,8 @@ export declare const GNB_RAIL: {
91
95
  itemPaddingBottom: string;
92
96
  itemRadius: string;
93
97
  itemIcon: string;
98
+ itemTypo: string;
99
+ itemTypoSelected: string;
94
100
  itemFontSize: number;
95
101
  itemLineHeight: number;
96
102
  itemFontWeight: number;
@@ -9,7 +9,7 @@
9
9
  | Prop | Type | Default | Description |
10
10
  |------|------|---------|-------------|
11
11
  | `name` | `SIconName` | — | 아이콘명 |
12
- | `size?` | `number \| string` | `24` | 아이콘 크기(px 또는 CSS 길이) |
12
+ | `size?` | `number \| string` | `24` | 아이콘 크기(px 또는 CSS 길이). 토큰 크기 `var(--cmp-…)` 도 그대로 넘긴다 |
13
13
  | `color?` | `SColor` | — | 아이콘 색상. 팔레트 키(`grey_65`, `red_95` …) 또는 임의 CSS 색상. 미지정 시 currentColor 상속 |
14
14
  | `rotate?` | `0 \| 90 \| 180 \| 270` | — | 회전 각도 |
15
15
  | `label?` | `string` | — | 접근성 라벨. 없으면 aria-hidden 처리 |
@@ -64,6 +64,7 @@
64
64
  - [STimeRangePicker](../STimeRangePicker)
65
65
  - [SToast](../SToast)
66
66
  - [STooltip](../STooltip)
67
+ - [STree](../STree)
67
68
 
68
69
  ### Graph
69
70
 
@@ -113,5 +114,6 @@ graph TD;
113
114
  STimeRangePicker --> SIcon
114
115
  SToast --> SIcon
115
116
  STooltip --> SIcon
117
+ STree --> SIcon
116
118
  style SIcon fill:#f9f,stroke:#333,stroke-width:4px
117
119
  ```
@@ -4,7 +4,7 @@ import { type SIconName } from './icons.gen';
4
4
  export interface SIconProps {
5
5
  /** 아이콘명 */
6
6
  name: SIconName;
7
- /** 아이콘 크기(px 또는 CSS 길이) */
7
+ /** 아이콘 크기(px 또는 CSS 길이). 토큰 크기 `var(--cmp-…)` 도 그대로 넘긴다 */
8
8
  size?: number | string;
9
9
  /** 아이콘 색상. 팔레트 키(`grey_65`, `red_95` …) 또는 임의 CSS 색상. 미지정 시 currentColor 상속 */
10
10
  color?: SColor;
@@ -94,13 +94,8 @@ export declare const LAUNCHER_LIST_BOX_LAYOUT: {
94
94
  readonly radius: string;
95
95
  /** 패널 상하좌우 여백 */
96
96
  readonly padding: string;
97
- /**
98
- * 패널 그림자.
99
- * 토큰(`component.gnb.launcher.listBox.shadow` = `{shadow.floating}`)은 값이 배열이라
100
- * `--cmp-*` 로 나오지 않는다 — 생성기가 스칼라만 내보내기 때문이다. 그래서 그 별칭이
101
- * 가리키는 스케일 토큰을 직접 쓴다(같은 값이다).
102
- */
103
- readonly shadow: "var(--shadow-floating)";
97
+ /** 패널 그림자 */
98
+ readonly shadow: string;
104
99
  /** 줄 왼쪽 여백 */
105
100
  readonly itemPaddingLeft: string;
106
101
  /** 줄 오른쪽 여백 — 왼쪽보다 좁다(오른쪽 끝은 hover 아이콘 자리다) */
@@ -15,8 +15,8 @@
15
15
  | `message?` | `string \| string[]` | — | 메시지 (없으면 state 기본값) |
16
16
  | `showButton?` | `boolean` | `false` | 하단 버튼 표시 |
17
17
  | `buttonLabel?` | `string` | — | 버튼 레이블 (없으면 state 기본값) |
18
- | `width?` | `number \| string` | `520` | |
19
- | `height?` | `number \| string` | `320` | |
18
+ | `width?` | `number \| string` | `'var(--cmp-modal-loading-width)'` | |
19
+ | `height?` | `number \| string` | `'var(--cmp-modal-loading-height)'` | |
20
20
 
21
21
  #### Events
22
22
 
@@ -32,6 +32,7 @@
32
32
  | `value?` | `SRadioValue \| null` | — | 그룹의 현재 선택 값 |
33
33
  | `label` | `string` | — | 라벨 (첫 줄) |
34
34
  | `subtitle?` | `string` | — | 서브타이틀 (둘째 줄). 라벨 왼쪽 끝에 맞춰 들여쓴다 |
35
+ | `children?` | `ReactNode` | — | 서브타이틀 아래 슬롯. 서브타이틀처럼 라벨 왼쪽 끝에 맞춰 들여쓴다. 카드 테두리 안이지만 라디오의 클릭 영역 밖이라, 입력·버튼 같은 컨트롤을 넣어도 누를 때 카드가 선택되지 않는다 |
35
36
  | `tag?` | `Omit<STagProps, 'size'>` | — | 라벨 오른쪽에 붙일 태그. `STag` 의 props 를 그대로 받되 크기는 `xs` 로 고정된다 |
36
37
  | `disabled?` | `boolean` | `false` | 비활성 |
37
38
  | `name?` | `string` | — | native radio name (form-agnostic 그룹핑) |
@@ -56,6 +57,8 @@ export interface SRadioCardOption {
56
57
  label: string;
57
58
  /** 서브타이틀 (둘째 줄) */
58
59
  subtitle?: string;
60
+ /** 서브타이틀 아래 슬롯 (`SRadioCard` 의 `children`). 라디오의 클릭 영역 밖이다 */
61
+ content?: ReactNode;
59
62
  /** 라벨 오른쪽에 붙일 태그 (`STag` props, 크기는 `xs` 고정) */
60
63
  tag?: Omit<STagProps, 'size'>;
61
64
  /** 이 옵션만 비활성 */
@@ -1,4 +1,4 @@
1
- import { type CSSProperties } from 'react';
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
2
  import { type SRadioValue } from '../SRadio';
3
3
  import { type STagProps } from '../STag';
4
4
  export interface SRadioCardProps {
@@ -10,6 +10,11 @@ export interface SRadioCardProps {
10
10
  label: string;
11
11
  /** 서브타이틀 (둘째 줄). 라벨 왼쪽 끝에 맞춰 들여쓴다 */
12
12
  subtitle?: string;
13
+ /**
14
+ * 서브타이틀 아래 슬롯. 서브타이틀처럼 라벨 왼쪽 끝에 맞춰 들여쓴다.
15
+ * 카드 테두리 안이지만 라디오의 클릭 영역 밖이라, 입력·버튼 같은 컨트롤을 넣어도 누를 때 카드가 선택되지 않는다
16
+ */
17
+ children?: ReactNode;
13
18
  /** 라벨 오른쪽에 붙일 태그. `STag` 의 props 를 그대로 받되 크기는 `xs` 로 고정된다 */
14
19
  tag?: Omit<STagProps, 'size'>;
15
20
  /** 비활성 */
@@ -26,4 +31,4 @@ export interface SRadioCardProps {
26
31
  * 카드 전체가 클릭 영역이며 `value === val` 이면 선택 상태다.
27
32
  * 선택지마다 설명이 붙어 한 줄짜리 `SRadio` 로는 담기 어려울 때 쓴다.
28
33
  */
29
- export declare function SRadioCard({ val, value, label, subtitle, tag, disabled, name, onValueChange, className, style, }: SRadioCardProps): import("react").JSX.Element;
34
+ export declare function SRadioCard({ val, value, label, subtitle, children, tag, disabled, name, onValueChange, className, style, }: SRadioCardProps): import("react").JSX.Element;
@@ -1,4 +1,4 @@
1
- import { type CSSProperties } from 'react';
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
2
  import { type SRadioValue } from '../SRadio';
3
3
  import { type STagProps } from '../STag';
4
4
  export interface SRadioCardOption {
@@ -8,6 +8,8 @@ export interface SRadioCardOption {
8
8
  label: string;
9
9
  /** 서브타이틀 (둘째 줄) */
10
10
  subtitle?: string;
11
+ /** 서브타이틀 아래 슬롯 (`SRadioCard` 의 `children`). 라디오의 클릭 영역 밖이다 */
12
+ content?: ReactNode;
11
13
  /** 라벨 오른쪽에 붙일 태그 (`STag` props, 크기는 `xs` 고정) */
12
14
  tag?: Omit<STagProps, 'size'>;
13
15
  /** 이 옵션만 비활성 */
@@ -61,7 +61,7 @@
61
61
 
62
62
  | Method | Type | Description |
63
63
  |--------|------|-------------|
64
- | `focus` | `() => void` | 트리거 버튼에 포커스 (sdFocus) |
64
+ | `focus` | `() => void` | 트리거(combobox)에 포커스 (sdFocus) |
65
65
  | `open` | `() => void` | 드롭다운 열기 (sdOpen) |
66
66
 
67
67
  ## Types
@@ -8,7 +8,7 @@ import { type SSelectOption, type SSelectType, type SSelectValueDisplay } from '
8
8
  import { type SFieldWidth } from '../../lib/field-width';
9
9
  export type { SSelectOption, SSelectType, SSelectValueDisplay } from './select.config';
10
10
  export interface SSelectHandle {
11
- /** 트리거 버튼에 포커스 (sdFocus) */
11
+ /** 트리거(combobox)에 포커스 (sdFocus) */
12
12
  focus: () => void;
13
13
  /** 드롭다운 열기 (sdOpen) */
14
14
  open: () => void;
@@ -9,10 +9,14 @@ export type SStepperItem = {
9
9
  };
10
10
  export declare const STEPPER_SIZE_CONFIG: Record<SStepperSize, {
11
11
  sequenceSize: string;
12
+ /** 루트에 거는 글자 크기 — 시퀀스 배지와 typoActive 가 없는 진행 중 타이틀이 상속한다 */
12
13
  fontSize: string;
13
14
  lineHeight: string;
15
+ /** 기본·완료 타이틀 타이포 (stepper.<size>.typography.default) */
16
+ typoDefault: string;
17
+ /** 진행 중 타이틀 타이포 (stepper.<size>.typography.active). null 이면 fontWeightActive 로 그린다 */
18
+ typoActive: string | null;
14
19
  fontWeightActive: number;
15
- fontWeightDefault: number;
16
20
  }>;
17
21
  export declare const STEPPER_LAYOUT: {
18
22
  containerGap: string;
@@ -52,14 +56,15 @@ export declare const STEPPER_HORIZONTAL_COMPLETED_COLORS: {
52
56
  text: string;
53
57
  };
54
58
  export declare const STEPPER_VERTICAL_LAYOUT: {
59
+ /** 세로형 폭. 대응 토큰이 없어 디자인 값을 그대로 쓴다(stepper.vertical 에 width 가 없음). */
55
60
  width: string;
56
61
  itemGap: string;
57
62
  itemPaddingX: string;
58
63
  itemPaddingY: string;
59
64
  titlePaddingTop: string;
60
65
  titlePaddingBottom: string;
61
- titleFontSize: string;
62
- titleLineHeight: string;
66
+ /** 구간 제목 타이포 — stepper.vertical.title.typography (= heading.xxs) */
67
+ titleTypo: string;
63
68
  accentStripeWidth: string;
64
69
  accentStripeColor: string;
65
70
  };
@@ -69,6 +74,7 @@ export declare const STEPPER_VERTICAL_COLORS: {
69
74
  hover: string;
70
75
  selected: string;
71
76
  };
77
+ titleBg: string;
72
78
  titleText: string;
73
79
  textDefault: string;
74
80
  textCompleted: string;
@@ -3,15 +3,10 @@ export interface STabOption {
3
3
  value: string;
4
4
  badge?: string | number;
5
5
  }
6
- /** main(분절형) 레이아웃 */
6
+ /** main(분절형) 레이아웃 (토큰) */
7
7
  export declare const TAB_MAIN_SIZE: {
8
- height: number;
9
- paddingX: number;
10
- };
11
- /** 탭 타이포 (main/sub 공통, token: typography.navigation.sm) */
12
- export declare const TAB_TYPOGRAPHY: {
13
- fontSize: number;
14
- lineHeight: number;
8
+ height: string;
9
+ paddingX: string;
15
10
  };
16
11
  export declare const TAB_MAIN_COLORS: {
17
12
  selected: {
@@ -4,14 +4,15 @@ export declare const TAG_COLORS: readonly ["grey", "red", "orange", "yellow", "g
4
4
  export type STagShape = (typeof TAG_SHAPES)[number];
5
5
  export type STagSize = (typeof TAG_SIZES)[number];
6
6
  export type STagColor = (typeof TAG_COLORS)[number];
7
- /** 사이즈별 레이아웃/타이포 (token.json component.tag 기준) */
7
+ /**
8
+ * 사이즈별 레이아웃/타이포 — `--cmp-tag-<size>-*` 토큰.
9
+ * typography 는 `tag.<size>.typography` 가 가리키는 typo 클래스.
10
+ */
8
11
  export declare const TAG_SIZE_CONFIG: Record<STagSize, {
9
- height: number;
10
- paddingX: number;
11
- gap: number;
12
- radius: number;
13
- iconSize: number;
14
- fontSize: number;
15
- fontWeight: number;
16
- lineHeight: number;
12
+ height: string;
13
+ paddingX: string;
14
+ gap: string;
15
+ radius: string;
16
+ iconSize: string;
17
+ typography: string;
17
18
  }>;
@@ -9,6 +9,9 @@ export declare const TIMEPICKER_SIZE_CONFIG: Record<STimePickerSize, {
9
9
  gap: string;
10
10
  icon: string;
11
11
  radius: string;
12
+ /** 입력값 타이포 클래스 (`timepicker.<size>.typography`). 렌더는 이 클래스로 한다 */
13
+ typography: string;
14
+ /** 공개 export 라 남겨 둔 같은 값 — 렌더에는 쓰지 않는다 */
12
15
  fontSize: number;
13
16
  lineHeight: number;
14
17
  minWidth: number;
@@ -99,6 +99,7 @@ export interface STreeItemRenderState {
99
99
 
100
100
  - [SCheckbox](../SCheckbox)
101
101
  - [SGhostButton](../SGhostButton)
102
+ - [SIcon](../SIcon)
102
103
 
103
104
  ### Graph
104
105
 
@@ -106,5 +107,6 @@ export interface STreeItemRenderState {
106
107
  graph TD;
107
108
  STree --> SCheckbox
108
109
  STree --> SGhostButton
110
+ STree --> SIcon
109
111
  style STree fill:#f9f,stroke:#333,stroke-width:4px
110
112
  ```