sellmate-design-system-react 9.0.0-beta.14 → 9.0.0-beta.16
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 +244 -45
- package/README.md +45 -12
- package/dist/components/SBarcodeInput/README.md +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +7 -1
- package/dist/components/SChipInput/README.md +1 -1
- package/dist/components/SChipInput/SChipInput.d.ts +7 -1
- package/dist/components/SDatePicker/README.md +1 -1
- package/dist/components/SDatePicker/SDatePicker.d.ts +7 -1
- package/dist/components/SDateRangePicker/README.md +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +7 -1
- package/dist/components/SField/README.md +3 -3
- package/dist/components/SField/SField.d.ts +12 -6
- package/dist/components/SFilePicker/README.md +1 -1
- package/dist/components/SFilePicker/SFilePicker.d.ts +7 -1
- package/dist/components/SGhostButton/README.md +2 -0
- package/dist/components/SInput/README.md +1 -1
- package/dist/components/SInput/SInput.d.ts +7 -1
- package/dist/components/SKeyValueTable/README.md +4 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +6 -2
- package/dist/components/SNumberInput/README.md +1 -1
- package/dist/components/SNumberInput/SNumberInput.d.ts +7 -1
- package/dist/components/SPage/README.md +1 -1
- package/dist/components/SPage/SPage.d.ts +7 -1
- package/dist/components/SSearchInput/README.md +1 -1
- package/dist/components/SSearchInput/SSearchInput.d.ts +8 -2
- package/dist/components/SSelect/README.md +1 -1
- package/dist/components/SSelect/SSelect.d.ts +8 -1
- package/dist/components/SSwitch/README.md +13 -0
- package/dist/components/STable/README.md +28 -67
- package/dist/components/STable/STable.d.ts +70 -6
- package/dist/components/STable/index.d.ts +1 -1
- package/dist/components/STextarea/README.md +1 -1
- package/dist/components/STextarea/STextarea.d.ts +7 -1
- package/dist/components/STimePicker/README.md +1 -1
- package/dist/components/STimePicker/STimePicker.d.ts +7 -1
- package/dist/components/STimePicker/timepicker.config.d.ts +4 -2
- package/dist/components/STimeRangePicker/README.md +1 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +7 -1
- package/dist/components/STooltip/README.md +2 -0
- package/dist/index.cjs +143 -97
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +141 -98
- package/dist/index.js.map +1 -1
- package/dist/lib/field-width.d.ts +31 -0
- package/dist/llms-full.txt +301 -131
- package/dist/llms.txt +244 -45
- package/dist/styles.css +10 -6
- package/eslint/index.mjs +5 -0
- package/eslint/lib/table-column.mjs +17 -0
- package/eslint/rules/field-width-grade.mjs +27 -10
- package/eslint/rules/table-column-width.mjs +109 -0
- package/eslint/scale.gen.mjs +3 -0
- package/package.json +1 -1
|
@@ -20,16 +20,34 @@ export interface STableCellContext {
|
|
|
20
20
|
/** STable이 이 셀에 적용하려던 스타일 (패딩·정렬·폭·sticky offset 포함) */
|
|
21
21
|
style: CSSProperties;
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
/** 값 접근: 필드명 또는 접근 함수 */
|
|
24
|
+
export type STableColumnField = string | ((row: SRow) => any);
|
|
25
|
+
interface STableColumnBase {
|
|
24
26
|
name: string;
|
|
25
27
|
label: string;
|
|
26
|
-
/** 값 접근: 필드명 또는 접근 함수 */
|
|
27
|
-
field: string | ((row: SRow) => any);
|
|
28
28
|
align?: 'left' | 'center' | 'right';
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
/**
|
|
30
|
+
* 컬럼 너비. **px 로만 준다** — 숫자는 px 로 해석하고, 문자열은 `'120px'` 형태만 받는다.
|
|
31
|
+
*
|
|
32
|
+
* % · `clamp()` · `min()` 은 쓰지 않는다. 폭은 `<colgroup>` 의 `<col width>` 로 들어가는데
|
|
33
|
+
* 테이블이 `table-fixed` 라 함수형 값은 계산되지 않고 통째로 무시된다 — 화면은 조용히
|
|
34
|
+
* auto 폭으로 떨어진다. `'30%'` 는 더 나쁘게 30px 로 읽힌다.
|
|
35
|
+
*
|
|
36
|
+
* 생략하면 기본 120px 이다. 내용이 들어가는 열은 값 길이에 맞춰 폭을 명시한다 —
|
|
37
|
+
* 폭을 주지 않은 열만 다른 열에 눌려 무너지거나 늘어난다.
|
|
38
|
+
*/
|
|
39
|
+
width?: number | `${number}px`;
|
|
40
|
+
/**
|
|
41
|
+
* 고정폭 없이 남은 폭을 흡수한다 (sticky/resize 계산에서 제외).
|
|
42
|
+
*
|
|
43
|
+
* **남은 폭을 먹는 스페이서 열 하나에만 쓴다.** 내용이 들어가는 열에 주면 폭이 다른 열에
|
|
44
|
+
* 좌우돼 화면마다 달라진다 — 내용 열은 px 로 폭을 명시한다.
|
|
45
|
+
*/
|
|
31
46
|
autoWidth?: boolean;
|
|
32
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* 리사이즈 하한/상한 (px). **`resizable` 로 끄는 손잡이의 이동 범위일 뿐, 레이아웃에는
|
|
49
|
+
* 관여하지 않는다** — 폭을 주지 않은 열이 이 값 안에서 잡히는 것이 아니다.
|
|
50
|
+
*/
|
|
33
51
|
minWidth?: number;
|
|
34
52
|
maxWidth?: number;
|
|
35
53
|
/** 표시 포맷 */
|
|
@@ -38,6 +56,21 @@ export interface STableColumn {
|
|
|
38
56
|
icon?: SIconName;
|
|
39
57
|
/** 헤더 아이콘 색상. 팔레트 키(`grey_65`, `red_95` …) 또는 임의 CSS 색상 */
|
|
40
58
|
iconColor?: SColor;
|
|
59
|
+
/**
|
|
60
|
+
* 헤더 라벨 뒤 도움말 툴팁 (각 항목이 한 줄). `SKeyValueTable` 의 `field.helpText` 와 같은 역할 —
|
|
61
|
+
* 라벨만으로 뜻이 통하지 않는 컬럼의 산출 기준·단위를 설명한다.
|
|
62
|
+
*
|
|
63
|
+
* `renderHeader` 로 헤더를 통째로 교체하면 그리지 않는다 (헤더 전체가 소비 앱 책임).
|
|
64
|
+
*/
|
|
65
|
+
helpText?: string[];
|
|
66
|
+
/**
|
|
67
|
+
* 정렬 가능한 열인지. 켜면 헤더 라벨 뒤에 정렬 버튼이 붙는다 — 누르는 곳은 그 버튼뿐이고
|
|
68
|
+
* 헤더 셀 전체가 클릭 영역이 되지는 않는다.
|
|
69
|
+
*
|
|
70
|
+
* 정렬 상태는 컴포넌트가 갖지 않는다 — `STable` 의 `sort` · `onSortChange` 로 주고받는다.
|
|
71
|
+
* `renderHeader` 로 헤더를 통째로 교체하면 버튼도 그리지 않는다 (헤더 전체가 소비 앱 책임).
|
|
72
|
+
*/
|
|
73
|
+
sortable?: boolean;
|
|
41
74
|
/**
|
|
42
75
|
* 셀에 무엇이 들어가는지. 좌우 여백이 여기서 갈린다 — 기본은 `text`(넓게).
|
|
43
76
|
*
|
|
@@ -69,6 +102,17 @@ export interface STableColumn {
|
|
|
69
102
|
thClass?: string;
|
|
70
103
|
thStyle?: CSSProperties;
|
|
71
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* `autoWidth` 스페이서 열은 값을 그리지 않으므로 `field` 를 생략할 수 있다.
|
|
107
|
+
* 그 밖의 열은 값 접근자가 있어야 한다.
|
|
108
|
+
*/
|
|
109
|
+
export type STableColumn = STableColumnBase & ({
|
|
110
|
+
autoWidth: true;
|
|
111
|
+
field?: STableColumnField;
|
|
112
|
+
} | {
|
|
113
|
+
autoWidth?: false;
|
|
114
|
+
field: STableColumnField;
|
|
115
|
+
});
|
|
72
116
|
export interface STablePagination {
|
|
73
117
|
page: number;
|
|
74
118
|
rowsPerPage: number;
|
|
@@ -78,6 +122,12 @@ export interface STableStickyColumn {
|
|
|
78
122
|
left?: number;
|
|
79
123
|
right?: number;
|
|
80
124
|
}
|
|
125
|
+
/** 정렬 상태 — 어느 열을 어느 방향으로 정렬했는가 */
|
|
126
|
+
export interface STableSort {
|
|
127
|
+
/** 정렬 기준 컬럼의 `name` */
|
|
128
|
+
name: string;
|
|
129
|
+
dir: 'asc' | 'desc';
|
|
130
|
+
}
|
|
81
131
|
/** STable ref 명령형 API (sd-table @Method 대응) */
|
|
82
132
|
export interface STableHandle {
|
|
83
133
|
/** 행 선택 여부 */
|
|
@@ -109,6 +159,19 @@ export interface STableProps {
|
|
|
109
159
|
selectable?: boolean;
|
|
110
160
|
selected?: SRow[];
|
|
111
161
|
onSelectedChange?: (rows: SRow[]) => void;
|
|
162
|
+
/**
|
|
163
|
+
* 정렬 상태 (controlled). `null`·미지정이면 정렬 없음.
|
|
164
|
+
*
|
|
165
|
+
* 컴포넌트는 정렬 상태를 갖지 않는다 — 서버 정렬이면 이 값이 곧 조회 조건이고,
|
|
166
|
+
* 뒤로가기·새로고침·링크 공유로 복원돼야 하므로 진실은 URL·store 쪽에 있어야 한다.
|
|
167
|
+
* 행을 실제로 정렬하는 것도 소비 앱 몫이다 (`STable` 은 받은 순서대로 그린다).
|
|
168
|
+
*/
|
|
169
|
+
sort?: STableSort | null;
|
|
170
|
+
/**
|
|
171
|
+
* 정렬 헤더 클릭 (`asc → desc → 해제` 3단). 해제되면 `null` 이 온다.
|
|
172
|
+
* 다중 정렬은 1차 안에서 지원하지 않는다.
|
|
173
|
+
*/
|
|
174
|
+
onSortChange?: (sort: STableSort | null) => void;
|
|
112
175
|
/** 컬럼 너비 조절 */
|
|
113
176
|
resizable?: boolean;
|
|
114
177
|
width?: string;
|
|
@@ -175,3 +238,4 @@ export interface STableProps {
|
|
|
175
238
|
* 내부 페이지네이션 + rows-per-page + 가상 스크롤 + 로딩 + dense.
|
|
176
239
|
*/
|
|
177
240
|
export declare const STable: import("react").ForwardRefExoticComponent<STableProps & import("react").RefAttributes<STableHandle>>;
|
|
241
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { STable, type STableProps, type STableColumn, type STableCellContext, type STablePagination, type STableStickyColumn, type STableHandle, type SRow, } from './STable';
|
|
1
|
+
export { STable, type STableProps, type STableColumn, type STableColumnField, type STableSort, type STableCellContext, type STablePagination, type STableStickyColumn, type STableHandle, type SRow, } from './STable';
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
| `hint?` | `string` | — | |
|
|
28
28
|
| `error?` | `boolean` | — | |
|
|
29
29
|
| `errorMessage?` | `string` | — | |
|
|
30
|
-
| `width?` | `
|
|
30
|
+
| `width?` | `SFieldWidth` | — | 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이. 등급은 `--cmp-field-width-*` 토큰으로 풀리므로 토큰이 바뀌면 화면이 따라간다. 값 길이에 상한이 없으면 `"100%"` 로 두어 행 전체를 쓴다. |
|
|
31
31
|
| `disabled?` | `boolean` | `false` | |
|
|
32
32
|
| `readOnly?` | `boolean` | `false` | |
|
|
33
33
|
| `className?` | `string` | — | |
|
|
@@ -4,6 +4,7 @@ import { type SIconName } from '../SIcon';
|
|
|
4
4
|
import { type SColor } from '../../lib/color';
|
|
5
5
|
import { type Rule } from '../../lib/form';
|
|
6
6
|
import { type STooltipProps } from '../STooltip';
|
|
7
|
+
import { type SFieldWidth } from '../../lib/field-width';
|
|
7
8
|
export interface STextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onChange'> {
|
|
8
9
|
/** 값 (제어) */
|
|
9
10
|
value?: string;
|
|
@@ -41,7 +42,12 @@ export interface STextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextArea
|
|
|
41
42
|
hint?: string;
|
|
42
43
|
error?: boolean;
|
|
43
44
|
errorMessage?: string;
|
|
44
|
-
|
|
45
|
+
/**
|
|
46
|
+
* 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이.
|
|
47
|
+
* 등급은 `--cmp-field-width-*` 토큰으로 풀리므로 토큰이 바뀌면 화면이 따라간다.
|
|
48
|
+
* 값 길이에 상한이 없으면 `"100%"` 로 두어 행 전체를 쓴다.
|
|
49
|
+
*/
|
|
50
|
+
width?: SFieldWidth;
|
|
45
51
|
disabled?: boolean;
|
|
46
52
|
readOnly?: boolean;
|
|
47
53
|
className?: string;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
| `clearable?` | `boolean` | `false` | |
|
|
17
17
|
| `useMeridiem?` | `boolean` | — | 오전/오후 선택 표시 여부. 지정하지 않으면 type="midday"일 때만 켜집니다. |
|
|
18
18
|
| `minuteStep?` | `number` | `1` | |
|
|
19
|
-
| `width?` | `
|
|
19
|
+
| `width?` | `SFieldWidth` | — | 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이. 등급은 `--cmp-field-width-*` 토큰으로 풀리므로 토큰이 바뀌면 화면이 따라간다. 값 길이에 상한이 없으면 `"100%"` 로 두어 행 전체를 쓴다. |
|
|
20
20
|
| `name?` | `string` | — | |
|
|
21
21
|
| `rules?` | `Rule[]` | — | |
|
|
22
22
|
| `status?` | `SFieldStatus` | — | |
|
|
@@ -5,6 +5,7 @@ import { type SColor } from '../../lib/color';
|
|
|
5
5
|
import { type Rule } from '../../lib/form';
|
|
6
6
|
import { type STooltipProps } from '../STooltip';
|
|
7
7
|
import { type STimePickerSize, type STimePickerType } from './timepicker.config';
|
|
8
|
+
import { type SFieldWidth } from '../../lib/field-width';
|
|
8
9
|
export type { STimePickerSize, STimePickerType } from './timepicker.config';
|
|
9
10
|
export interface STimePickerProps {
|
|
10
11
|
/** 선택 시간 (HH:mm) */
|
|
@@ -22,7 +23,12 @@ export interface STimePickerProps {
|
|
|
22
23
|
/** 오전/오후 선택 표시 여부. 지정하지 않으면 type="midday"일 때만 켜집니다. */
|
|
23
24
|
useMeridiem?: boolean;
|
|
24
25
|
minuteStep?: number;
|
|
25
|
-
|
|
26
|
+
/**
|
|
27
|
+
* 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이.
|
|
28
|
+
* 등급은 `--cmp-field-width-*` 토큰으로 풀리므로 토큰이 바뀌면 화면이 따라간다.
|
|
29
|
+
* 값 길이에 상한이 없으면 `"100%"` 로 두어 행 전체를 쓴다.
|
|
30
|
+
*/
|
|
31
|
+
width?: SFieldWidth;
|
|
26
32
|
name?: string;
|
|
27
33
|
rules?: Rule[];
|
|
28
34
|
status?: SFieldStatus;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type SFieldWidthGrade } from '../../lib/field-width';
|
|
1
2
|
export type STimePickerSize = 'sm' | 'md';
|
|
2
3
|
export type STimePickerType = 'default' | 'midday';
|
|
3
4
|
export type STimePickerMeridiem = 'AM' | 'PM';
|
|
@@ -13,10 +14,11 @@ export declare const TIMEPICKER_SIZE_CONFIG: Record<STimePickerSize, {
|
|
|
13
14
|
minWidth: number;
|
|
14
15
|
fieldMinWidth: number;
|
|
15
16
|
/**
|
|
16
|
-
* 필드
|
|
17
|
+
* 필드 상한(폭 등급). 값 길이가 HH:mm 으로 정해져 있어, width="100%" 를 받아도 행 전체로
|
|
17
18
|
* 늘어나지 않게 막는다 (SKeyValueTable 이 모든 컨트롤에 100% 를 넘긴다).
|
|
19
|
+
* px 가 아니라 등급으로 두어 `--cmp-field-width-*` 가 바뀌면 함께 따라가게 한다.
|
|
18
20
|
*/
|
|
19
|
-
fieldMaxWidth:
|
|
21
|
+
fieldMaxWidth: SFieldWidthGrade;
|
|
20
22
|
}>;
|
|
21
23
|
export declare function clampTimePart(value: number, min: number, max: number): number;
|
|
22
24
|
export declare function padTimePart(value: number): string;
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
| `useMeridiem?` | `boolean` | — | 오전/오후 선택 표시 여부. 지정하지 않으면 type="midday"일 때만 켜집니다. |
|
|
18
18
|
| `minuteStep?` | `number` | `1` | |
|
|
19
19
|
| `rangeOrder?` | `STimeRangePickerRangeOrder` | `'strict'` | 범위 순서 정책. strict는 시작 시간이 종료 시간보다 늦어지지 않도록 보정합니다. |
|
|
20
|
-
| `width?` | `
|
|
20
|
+
| `width?` | `SFieldWidth` | — | 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이. 등급은 `--cmp-field-width-*` 토큰으로 풀리므로 토큰이 바뀌면 화면이 따라간다. 값 길이에 상한이 없으면 `"100%"` 로 두어 행 전체를 쓴다. |
|
|
21
21
|
| `name?` | `string` | — | |
|
|
22
22
|
| `rules?` | `Rule[]` | — | |
|
|
23
23
|
| `status?` | `SFieldStatus` | — | |
|
|
@@ -6,6 +6,7 @@ import { type Rule } from '../../lib/form';
|
|
|
6
6
|
import { type STooltipProps } from '../STooltip';
|
|
7
7
|
import { type STimeRangePickerRangeOrder, type STimeRangePickerSize, type STimeRangePickerType, type STimeRangeValue } from './time-range-picker.config';
|
|
8
8
|
export type { STimeRangePickerSize, STimeRangePickerRangeOrder, STimeRangePickerType, STimeRangeValue, } from './time-range-picker.config';
|
|
9
|
+
import { type SFieldWidth } from '../../lib/field-width';
|
|
9
10
|
export interface STimeRangePickerProps {
|
|
10
11
|
/** 선택 시간 범위 [시작, 종료] (HH:mm) */
|
|
11
12
|
value?: STimeRangeValue;
|
|
@@ -24,7 +25,12 @@ export interface STimeRangePickerProps {
|
|
|
24
25
|
minuteStep?: number;
|
|
25
26
|
/** 범위 순서 정책. strict는 시작 시간이 종료 시간보다 늦어지지 않도록 보정합니다. */
|
|
26
27
|
rangeOrder?: STimeRangePickerRangeOrder;
|
|
27
|
-
|
|
28
|
+
/**
|
|
29
|
+
* 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이.
|
|
30
|
+
* 등급은 `--cmp-field-width-*` 토큰으로 풀리므로 토큰이 바뀌면 화면이 따라간다.
|
|
31
|
+
* 값 길이에 상한이 없으면 `"100%"` 로 두어 행 전체를 쓴다.
|
|
32
|
+
*/
|
|
33
|
+
width?: SFieldWidth;
|
|
28
34
|
name?: string;
|
|
29
35
|
rules?: Rule[];
|
|
30
36
|
status?: SFieldStatus;
|
|
@@ -69,6 +69,7 @@ export type STooltipType = 'default' | 'danger' | 'warning' | 'accent';
|
|
|
69
69
|
- [SKeyValueTable](../SKeyValueTable)
|
|
70
70
|
- [SSectionHeaderCard](../SSectionHeaderCard)
|
|
71
71
|
- [SStepper](../SStepper)
|
|
72
|
+
- [STable](../STable)
|
|
72
73
|
|
|
73
74
|
### Depends on
|
|
74
75
|
|
|
@@ -86,5 +87,6 @@ graph TD;
|
|
|
86
87
|
SKeyValueTable --> STooltip
|
|
87
88
|
SSectionHeaderCard --> STooltip
|
|
88
89
|
SStepper --> STooltip
|
|
90
|
+
STable --> STooltip
|
|
89
91
|
style STooltip fill:#f9f,stroke:#333,stroke-width:4px
|
|
90
92
|
```
|