sellmate-design-system-react 9.0.0-beta.91 → 9.0.0-beta.93
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 +27 -2
- package/dist/components/SBarChart/README.md +1 -0
- package/dist/components/SBarChart/SBarChart.d.ts +7 -0
- package/dist/components/SBarcodeInput/README.md +2 -0
- package/dist/components/SCheckbox/README.md +2 -0
- package/dist/components/SGhostButton/README.md +2 -0
- package/dist/components/SGnbSystem/README.md +6 -2
- package/dist/components/SGnbSystem/SGnbSystem.d.ts +3 -3
- package/dist/components/SGnbSystem/gnbSystem.config.d.ts +5 -3
- package/dist/components/SIcon/README.md +2 -0
- package/dist/components/SInput/README.md +2 -0
- package/dist/components/SLineChart/README.md +1 -0
- package/dist/components/SLineChart/SLineChart.d.ts +5 -0
- package/dist/components/SLineChart/lineChart.config.d.ts +1 -2
- package/dist/components/SMeatballButton/README.md +2 -0
- package/dist/components/SNumberInput/README.md +2 -0
- package/dist/components/SSelect/README.md +8 -3
- package/dist/components/SSelect/SSelect.d.ts +17 -3
- package/dist/components/SSelect/select.config.d.ts +34 -4
- package/dist/components/STable/README.md +1 -1
- package/dist/components/STable/STable.d.ts +3 -0
- package/dist/components/STag/README.md +8 -0
- package/dist/components/STimePicker/README.md +1 -1
- package/dist/components/STimePicker/STimePicker.d.ts +3 -7
- package/dist/components/STimePicker/TimeListbox.d.ts +21 -0
- package/dist/components/STimeRangePicker/README.md +2 -2
- package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +5 -1
- package/dist/components/STreeTable/STreeTable.examples.d.ts +7 -0
- package/dist/index.cjs +1339 -1128
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1339 -1128
- package/dist/index.js.map +1 -1
- package/dist/lib/chart/cartesian.d.ts +1 -3
- package/dist/lib/chart/category-labels.d.ts +37 -0
- package/dist/lib/chart/use-element-size.d.ts +4 -1
- package/dist/lib/mode-listbox.d.ts +10 -0
- package/dist/lib/tree-row.d.ts +74 -0
- package/dist/llms-full.txt +55 -11
- package/dist/llms.txt +27 -2
- package/dist/styles.css +12 -37
- package/package.json +1 -1
|
@@ -16,9 +16,7 @@ export declare const AXIS_LABEL_GAP = 8;
|
|
|
16
16
|
*
|
|
17
17
|
* 항목들이 나눠 갖는 자리(band) 바깥에 따로 붙는다 — 첫 항목과 마지막 항목이 차트
|
|
18
18
|
* 경계에 붙어 잘린 것처럼 보이지 않게 한다. 세로 차트는 좌우, 가로 차트는 위아래다.
|
|
19
|
-
*
|
|
20
|
-
* **선 차트(`SLineChart`)는 쓰지 않는다.** 선은 첫 점이 왼쪽 끝, 마지막 점이 오른쪽
|
|
21
|
-
* 끝에 서서 추이를 그림 폭 전체에 펼친다.
|
|
19
|
+
* 선 차트(`SLineChart`)도 같다 — 점 간격과 눈금 자리가 막대 차트와 맞는다.
|
|
22
20
|
*/
|
|
23
21
|
export declare const AXIS_EDGE_PADDING = 24;
|
|
24
22
|
export interface ChartGridProps {
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 기울인 항목 이름 — 직교 좌표 차트(세로 막대·선)의 `rotateCategoryLabels`.
|
|
3
|
+
*
|
|
4
|
+
* 기울인 글자는 눈금에서 **왼쪽 아래로** 뻗는다. 첫 항목의 글자는 그림 왼쪽 밖(눈금 열
|
|
5
|
+
* 아래)까지 나가야 하는데, 눈금 열 오른쪽에서 시작하는 스크롤 상자 안에 두면 그 경계에서
|
|
6
|
+
* 잘린다. 그래서 기울일 때는 스크롤 상자가 **눈금 열까지 감싸고**, 눈금 열은 그 안에서
|
|
7
|
+
* 왼쪽에 붙어(sticky) 제자리를 지킨다. 그림과 이름이 같은 스크롤로 움직이므로 서로
|
|
8
|
+
* 어긋나지 않는다 — scroll 이벤트로 따로 맞추면 브라우저가 스크롤을 먼저 그려 한 프레임
|
|
9
|
+
* 이상 늦게 따라온다.
|
|
10
|
+
*/
|
|
11
|
+
import { type CSSProperties, type ReactNode, type Ref } from 'react';
|
|
12
|
+
/**
|
|
13
|
+
* 기울인 항목 이름의 최대 폭(px). 넘으면 말줄임한다 — 전체 이름은 툴팁 제목에서 읽는다.
|
|
14
|
+
* 상한이 없으면 긴 이름 하나가 축 높이를 그림보다 크게 만든다.
|
|
15
|
+
*/
|
|
16
|
+
export declare const CATEGORY_LABEL_ROTATED_MAX = 120;
|
|
17
|
+
export interface ChartRotatedAxisLayoutProps {
|
|
18
|
+
/** 눈금 라벨(`ChartAxisLabels`) */
|
|
19
|
+
axis: ReactNode;
|
|
20
|
+
/** 눈금 열의 높이·물러남 — 그림과 같은 값 */
|
|
21
|
+
axisStyle: CSSProperties;
|
|
22
|
+
/** 그림 */
|
|
23
|
+
plot: ReactNode;
|
|
24
|
+
/** 그림이 이보다 좁아지면 가로로 스크롤한다(px) */
|
|
25
|
+
minPlotWidth: number;
|
|
26
|
+
/** 항목 이름 */
|
|
27
|
+
labels: string[];
|
|
28
|
+
/** 항목의 눈금 x(px) — 그림 왼쪽 끝 기준 */
|
|
29
|
+
xAt: (index: number) => number;
|
|
30
|
+
/** 이름 행 — 호출 쪽이 높이를 재서 차트 높이에서 뺀다 */
|
|
31
|
+
labelsRef?: Ref<HTMLDivElement>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 눈금 열 + 그림 + 기울인 이름 행. 직교 좌표 차트 그리드(`max-content 1fr`)의 두 칸을
|
|
35
|
+
* 모두 차지한다.
|
|
36
|
+
*/
|
|
37
|
+
export declare function ChartRotatedAxisLayout({ axis, axisStyle, plot, minPlotWidth, labels, xAt, labelsRef, }: ChartRotatedAxisLayoutProps): import("react").JSX.Element;
|
|
@@ -10,8 +10,11 @@ export interface ElementSize {
|
|
|
10
10
|
* 그 안에 1:1 로 그린다.
|
|
11
11
|
*
|
|
12
12
|
* 첫 렌더에서는 `{0, 0}` 이다. 크기가 0 인 동안은 그리지 않는 쪽이 안전하다.
|
|
13
|
+
*
|
|
14
|
+
* `target` 은 ref 가 붙는 요소가 **바뀌는 조건**이다 — 같은 ref 를 조건에 따라 다른
|
|
15
|
+
* 요소에 붙이면, 이 값이 바뀔 때 새 요소를 다시 관찰한다. 안 주면 처음 붙은 요소만 본다.
|
|
13
16
|
*/
|
|
14
|
-
export declare function useElementSize<T extends HTMLElement>(): {
|
|
17
|
+
export declare function useElementSize<T extends HTMLElement>(target?: unknown): {
|
|
15
18
|
ref: import("react").RefObject<T | null>;
|
|
16
19
|
size: ElementSize;
|
|
17
20
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 연·월·시간을 세로 리스트에서 고르는 피커 조각(SDatePicker 의 연·월 리스트, STimePicker 의 시간
|
|
3
|
+
* 리스트)이 함께 쓰는 치수와 항목 클래스. 스펙(`--cmp-datepicker-mode-*`)이 하나라 한곳에 둔다.
|
|
4
|
+
*/
|
|
5
|
+
/** 리스트 높이(px) — 항목 높이와 함께 "선택 항목을 가운데로" 계산에 쓴다 */
|
|
6
|
+
export declare const MODE_LIST_HEIGHT = 240;
|
|
7
|
+
/** 항목 한 줄 높이(px) — paddingY(4) × 2 + line-height(20) */
|
|
8
|
+
export declare const MODE_ITEM_HEIGHT = 28;
|
|
9
|
+
/** 리스트 항목(button) 클래스 — 기본 / 선택 / 비활성 */
|
|
10
|
+
export declare const modeListItemClass: (selected: boolean, disabled: boolean) => string;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type HTMLAttributes, type KeyboardEvent as ReactKeyboardEvent, type MouseEvent, type ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* 트리 한 줄의 **모양**. STree 와 SSelect 의 트리 타입(`tree`·`multi_tree`)이 같은 줄을 그리도록
|
|
4
|
+
* 여기 한 곳에 둔다 — 두 컴포넌트의 동작(선택 규칙·포커스·가상 스크롤)은 서로 달라 컴포넌트를
|
|
5
|
+
* 통째로 공유할 수 없지만, 같은 계층이 화면마다 다르게 생기면 안 된다.
|
|
6
|
+
*/
|
|
7
|
+
export type TreeRowSize = 'sm' | 'md';
|
|
8
|
+
export declare const TREE_LABEL_TYPOGRAPHY: Record<TreeRowSize, {
|
|
9
|
+
default: string;
|
|
10
|
+
selected: string;
|
|
11
|
+
rowHeight: string;
|
|
12
|
+
}>;
|
|
13
|
+
/** 줄 바탕 — 배경·hover·좌우 여백·연결선과 내용 사이 간격 */
|
|
14
|
+
export declare const TREE_ROW_CLASS = "group/tree-item box-border flex w-full items-center gap-(--cmp-tree-item-rowGap) overflow-hidden bg-(--cmp-tree-item-bg-default) px-(--cmp-tree-item-paddingX) text-left hover:bg-(--cmp-tree-item-bg-hover)";
|
|
15
|
+
/** 줄 아래 구분선 */
|
|
16
|
+
export declare const TREE_ROW_BORDER_CLASS = "border-b border-(--cmp-tree-item-border-default)";
|
|
17
|
+
/** 키보드가 가리키는 줄 — hover 와 같은 배경 (SSelect 처럼 포커스를 줄로 옮기지 않는 쪽이 쓴다) */
|
|
18
|
+
export declare const TREE_ROW_ACTIVE_CLASS = "bg-(--cmp-tree-item-bg-hover)";
|
|
19
|
+
/** 화살표·체크박스·라벨을 담는 칸 */
|
|
20
|
+
export declare const TREE_CONTENT_CLASS = "box-border flex min-w-0 flex-1 items-center gap-(--cmp-tree-item-contentGap)";
|
|
21
|
+
/** 라벨 — 고른(또는 일부 고른) 줄은 굵게, 비활성은 흐리게 */
|
|
22
|
+
export declare function treeLabelClass(size: TreeRowSize, { emphasized, disabled, selectable, }: {
|
|
23
|
+
emphasized: boolean;
|
|
24
|
+
disabled: boolean;
|
|
25
|
+
selectable: boolean;
|
|
26
|
+
}): string;
|
|
27
|
+
/**
|
|
28
|
+
* 줄 안의 컨트롤(체크박스·화살표)이 받은 클릭인가. 컨트롤은 스스로 값을 바꾸므로 줄의 클릭 처리는
|
|
29
|
+
* 손대지 않는다 — 컨트롤마다 감싸서 전파를 끊는 대신 줄 하나가 클릭을 받아 가른다.
|
|
30
|
+
* (체크박스는 `<label>` 이라 한 번 누르면 클릭이 두 번 올라오는데, 둘 다 여기서 걸러진다)
|
|
31
|
+
*/
|
|
32
|
+
export declare function isRowControlClick(event: MouseEvent<HTMLElement>): boolean;
|
|
33
|
+
/** 접기·펴기 화살표. 자식이 없는 줄은 `TreeCaretSpacer` 로 같은 자리를 비운다 */
|
|
34
|
+
export declare function TreeCaret({ expanded, onToggle, }: {
|
|
35
|
+
expanded: boolean;
|
|
36
|
+
onToggle: (event: MouseEvent<HTMLElement>) => void;
|
|
37
|
+
}): import("react").JSX.Element;
|
|
38
|
+
/**
|
|
39
|
+
* 자식이 없는 줄은 펼침 버튼 자리를 빈 칸으로 남겨 라벨의 시작점을 맞춘다.
|
|
40
|
+
* 크기는 자리를 대신하는 그 버튼(`SGhostButton size="xxs"`)의 토큰을 그대로 쓴다 —
|
|
41
|
+
* 버튼 크기가 바뀌면 빈 칸도 같이 따라가야 줄이 어긋나지 않는다.
|
|
42
|
+
*/
|
|
43
|
+
export declare function TreeCaretSpacer(): import("react").JSX.Element;
|
|
44
|
+
/**
|
|
45
|
+
* depth 연결선. 최상위(depth 1)는 그리지 않는다.
|
|
46
|
+
*
|
|
47
|
+
* @param ancestorLast 조상(depth 1 부터 부모까지)이 각자 마지막 자식인가 — 조상 쪽 세로선을 어디까지 잇는지 정한다
|
|
48
|
+
*/
|
|
49
|
+
export declare function TreeConnector({ guideline, size, depth, hasChildren, isLast, ancestorLast, }: {
|
|
50
|
+
guideline: boolean;
|
|
51
|
+
size: TreeRowSize;
|
|
52
|
+
depth: number;
|
|
53
|
+
hasChildren: boolean;
|
|
54
|
+
isLast: boolean;
|
|
55
|
+
ancestorLast: boolean[];
|
|
56
|
+
}): import("react").JSX.Element | null;
|
|
57
|
+
/**
|
|
58
|
+
* 목록 맨 위의 "전체" 줄 — 체크박스 하나로 고를 수 있는 것을 전부 켜고 끈다.
|
|
59
|
+
* 키보드·포커스는 쓰는 쪽이 정한다: STree 는 줄로 포커스를 옮기고(`tabIndex`·`onKeyDown`),
|
|
60
|
+
* SSelect 는 트리거가 `aria-activedescendant` 로 가리키므로 `active` 로 강조만 받는다.
|
|
61
|
+
*/
|
|
62
|
+
export declare function TreeAllRow({ label, selected, indeterminate, size, border, active, tabIndex, onKeyDown, onToggle, className, ...rest }: {
|
|
63
|
+
label?: ReactNode;
|
|
64
|
+
selected: boolean;
|
|
65
|
+
indeterminate?: boolean;
|
|
66
|
+
size?: TreeRowSize;
|
|
67
|
+
border?: boolean;
|
|
68
|
+
/** 키보드가 가리키는 줄 — hover 와 같은 배경을 깐다 */
|
|
69
|
+
active?: boolean;
|
|
70
|
+
tabIndex: number;
|
|
71
|
+
onKeyDown?: (event: ReactKeyboardEvent<HTMLDivElement>) => void;
|
|
72
|
+
/** 줄이나 체크박스를 눌렀다. 줄 클릭이면 그 이벤트가 온다 */
|
|
73
|
+
onToggle: (event?: MouseEvent<HTMLElement>) => void;
|
|
74
|
+
} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onClick' | 'onKeyDown' | 'onToggle' | 'tabIndex' | 'role'>): import("react").JSX.Element;
|
package/dist/llms-full.txt
CHANGED
|
@@ -541,6 +541,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
541
541
|
| 정해진 범위 안에서 수치 하나·구간을 끌어서 고르게 한다 | `SSlider` | §3-7-16 |
|
|
542
542
|
| 바코드를 스캔해 받는다 | `SBarcodeInput` | |
|
|
543
543
|
| 목록에서 하나 고르게 한다 | `SSelect` | §3-7-2 |
|
|
544
|
+
| 계층(카테고리 > 세부분류)을 접고 펴며 드롭다운에서 고르게 한다 | `SSelect` `type="tree"`·`"multi_tree"` | §3-7-2 — 계층을 늘 펼쳐 보여도 되면 `default_depth`·`multi_depth` |
|
|
544
545
|
| 선택지를 항상 펼쳐 두고 하나 고르게 한다 | `SRadioGroup` | §3-7-2 |
|
|
545
546
|
| 버튼 모양으로 모드를 하나 고르게 한다 | `SRadioButton` | §3-7-2 |
|
|
546
547
|
| 선택지마다 설명이 붙어 한 줄로는 안 된다 | `SRadioCardGroup` | §3-7-2 |
|
|
@@ -577,13 +578,14 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
577
578
|
| 대화의 메시지 한 건을 보여준다 | `SChatMessage` | |
|
|
578
579
|
| 대화 중간에 시스템이 알리는 사실을 끼운다 (상담사 배정·대화 종료 등) | `SChatSystemMessage` | 사람이 보낸 말이면 `SChatMessage` |
|
|
579
580
|
| 나열한 항목을 펼쳐 하위 내용을 보여준다 | `SExpansionList` + `SExpansionItem` | §3-7-7 |
|
|
580
|
-
| 부모-자식 계층을 들여쓰기로 보여준다 | `STree` | §3-7-7 |
|
|
581
|
+
| 부모-자식 계층을 들여쓰기로 보여준다 | `STree` | §3-7-7 — 폼 값으로 드롭다운에서 고르는 것이면 `SSelect` `type="tree"` |
|
|
581
582
|
| 계층을 이루는 행들을 여러 열로 보여준다 (카테고리 > 상품 > 옵션) | `STreeTable` | §3-7-7 — 한 줄에 라벨 하나면 `STree` |
|
|
582
583
|
| 사용자가 순서를 드래그로 바꾸게 한다 | `SDraggableList` + `SDraggableItem` | §3-7-6 |
|
|
583
584
|
| 날짜별 일정을 한 달치 격자로 펼쳐 보여준다 | `SCalendarBoard` | §3-7-4 |
|
|
584
585
|
| 항목끼리 크기를 눈으로 견주게 한다 (채널별 매출·상품별 판매량) | `SBarChart` | 정확한 값을 읽어야 하면 `STable` — 그래프는 "어느 쪽이 큰가" 를 답하지 "얼마인가" 를 답하지 않는다 |
|
|
585
586
|
| 순서가 있는 항목의 **추이**를 보여준다 (일·월별 매출 흐름, 기간별 방문 수) | `SLineChart` | 항목 순서에 뜻이 없으면(채널별·상품별) `SBarChart` — 선은 "이어진다" 는 뜻을 덤으로 얹어, 순서 없는 항목을 이으면 없는 흐름을 만든다. 항목이 대여섯 개 안쪽이고 크기를 견주는 것이 목적이면 막대가 낫다 |
|
|
586
587
|
| 여러 항목의 추이를 **합계와 함께** 보여준다 (채널별 매출이 쌓여 전체가 되는 흐름) | `SLineChart stacked area` | 합계가 뜻을 갖는 값일 때만 쌓는다. 음수가 섞이거나 더해서 뜻이 없는 값(비율·평균)은 쌓지 말고 겹쳐 그린다 |
|
|
588
|
+
| 항목 이름이 길어 가로축에서 서로 겹친다 (상품명·채널명, `2026-10-01` 같은 날짜) | 순서 없는 항목은 `SBarChart direction="horizontal"` — 이름 열이 가장 긴 이름에 맞춰 넓어진다. 순서가 있어 세로 축을 지켜야 하면(날짜순 막대·`SLineChart`) `rotateCategoryLabels` | 이름이 짧아 겹치지 않으면 켜지 않는다 — 켜면 늘 기울어 읽기만 나빠진다. 기울여도 너무 긴 이름은 차트가 말줄임하고 전체 이름은 툴팁에 뜬다. 말줄임 폭·각도를 직접 주지 않는다. 나란히 놓인 차트는 켜고 끄기를 맞춰야 그림 높이가 같다 |
|
|
587
589
|
| 항목의 크기와 **그 안의 구성**을 함께 보여준다 (주문 상태별 내역, 유입 경로별 몫) | `SBarChart stacked` | 계열끼리 견주는 것이 목적이면 `stacked` 없이 나란히 세운다. 더해서 뜻이 없는 값(비율·평균)은 쌓지 않는다 — 합계 라벨이 거짓말이 된다 |
|
|
588
590
|
| 한 시점의 **전체를 몇 개의 몫으로** 나눠 보여준다 (채널별 매출 비중, 회원 등급 구성) | `SPieChart` | 조각이 대여섯 개를 넘거나 몫끼리 크기를 견주는 것이 목적이면 `SBarChart` — 사람은 각도보다 길이를 정확히 견준다. 순서가 있는 추이(월별)는 몫이 아니라 흐름이라 `SLineChart`. 0·음수는 그려지지 않으므로 증감은 원으로 나타내지 않는다. 조각은 큰 순으로 넘긴다. 폭은 부모를 따르고 그림은 그 폭의 정사각형이다 — 폭이 필요하면 `className` 으로 폭만 주고 높이는 주지 않는다 (`SDonutChart` 도 같다) |
|
|
589
591
|
| 한 시점의 전체를 몫으로 나누되 **가운데가 빈 고리 모양**으로 보여준다 (시안이 도넛일 때) | `SDonutChart` | 쓰임·데이터 규칙은 `SPieChart` 와 같고 모양만 다르다 — 시안이 정한 쪽을 쓴다. **구멍에 합계·라벨을 겹쳐 올리지 않는다.** 합계 같은 값이 필요하면 차트 바깥(카드 제목·요약 값)에 적는다. 여러 기간에 걸친 구성 변화는 원을 여러 개 늘어놓지 말고 `SBarChart stacked` |
|
|
@@ -1776,9 +1778,25 @@ tableRef.current.scrollToRow(row); // 복원
|
|
|
1776
1778
|
- 카드 안에 상태 배지를 넣으려면 `tag` 슬롯에 `STag` 를 준다. 라벨 문자열에 "(추천)" 처럼 섞어 쓰지 않는다.
|
|
1777
1779
|
- **카드처럼 생겼다고 `SCard`/`SSectionHeaderCard` 로 감싸지 않는다.** `SRadioCard` 자체가 완결된 요소이고, 나열 간격은 `SRadioCardGroup` 의 `direction` 이 맞춘다 (§2-2).
|
|
1778
1780
|
|
|
1781
|
+
##### 후보에 상하 관계가 있으면 — depth vs tree
|
|
1782
|
+
|
|
1783
|
+
계층은 `options` 의 `children` 으로 만든다. 평평한 `default`·`multi` 에 분류명을 라벨에 섞어 늘어놓지 않는다. 남는 선택은 **계층을 어떻게 보여주는가**와 **그룹이 값이 되는가**다.
|
|
1784
|
+
|
|
1785
|
+
| 상황 | `type` |
|
|
1786
|
+
| --- | --- |
|
|
1787
|
+
| 그룹이 몇 개 안 돼 늘 펼쳐 둬도 한눈에 읽힌다. 그룹은 분류 헤더일 뿐 값이 아니다 | `default_depth` · `multi_depth` |
|
|
1788
|
+
| 그룹·단계가 많아 다 펼치면 목록이 길어진다 — 접어 두고 필요한 갈래만 편다 | `tree` · `multi_tree` |
|
|
1789
|
+
| **그룹 자체도 값**이다 (예: "패션의류" 전체를 하나의 조건으로 고른다) — 단일 선택 | `tree` |
|
|
1790
|
+
|
|
1791
|
+
- **값에 무엇이 담기는가.** `default_depth`·`multi_depth`·`multi_tree` 는 언제나 **리프만** 담긴다 — `multi_tree`·`multi_depth` 의 그룹 체크박스는 그 아래 리프를 한꺼번에 넣고 뺄 뿐, 그룹의 `value` 는 값이 되지 않는다. 그룹의 `value` 가 값으로 오는 것은 `tree` 뿐이다.
|
|
1792
|
+
- **펼침 상태는 `SSelect` 가 쥔다.** 열 때마다 선택값을 품은 그룹이 펼쳐지고, 검색 중에는 걸린 줄이 보이도록 결과를 전부 펼친다. 앱이 펼칠 그룹을 따로 들고 있지 않는다.
|
|
1793
|
+
- 그룹의 `disabled` 는 그 줄의 선택만 막는다 — 마우스(화살표)로도 키보드(→)로도 접고 펴기는 되므로 아래의 고를 수 있는 자식에 닿는 길은 남는다.
|
|
1794
|
+
- 하위가 전부 비활성이면 `multi_tree`·depth 타입은 그룹도 함께 잠그므로 앱이 어미에 `disabled` 를 다시 달 필요가 없다. `tree` 는 그룹 자체가 값이라 하위가 막혀도 그룹은 고를 수 있다 — 그룹까지 막으려면 그룹에 `disabled` 를 직접 준다.
|
|
1795
|
+
- 드롭다운 없이 화면에 계층을 펼쳐 두고 여러 개를 체크하게 하는 것이면 `SSelect` 가 아니라 `STree` 다 (§3-7-7).
|
|
1796
|
+
|
|
1779
1797
|
##### 여러 개 고른 값을 칩으로 보여줄 때 — `valueDisplay="chip"`
|
|
1780
1798
|
|
|
1781
|
-
- **`type="multi"`·`"multi_depth"` 에서 `valueDisplay="chip"` 을 주면** 선택값이 트리거에 칩으로 뜨고, 칩의 × 로 하나씩 뺄 수 있다. 기본(`text`)은 라벨을 쉼표로 이어 한 줄로 말줄임한다. 고른 값 하나하나를 확인하고 바로 빼야 하는 자리면 `chip`, 몇 개 골랐는지만 보이면 되는 조회 필터면 `text` 를 쓴다.
|
|
1799
|
+
- **`type="multi"`·`"multi_depth"`·`"multi_tree"` 에서 `valueDisplay="chip"` 을 주면** 선택값이 트리거에 칩으로 뜨고, 칩의 × 로 하나씩 뺄 수 있다. 기본(`text`)은 라벨을 쉼표로 이어 한 줄로 말줄임한다. 고른 값 하나하나를 확인하고 바로 빼야 하는 자리면 `chip`, 몇 개 골랐는지만 보이면 되는 조회 필터면 `text` 를 쓴다.
|
|
1782
1800
|
- **후보가 정해진 목록에서 고르는 것이면 `SSelect` 의 `chip` 이고, 사용자가 값을 직접 타이핑해 쌓는 것이면 `SChipInput` 이다.** 목록에서 고른 값을 `SChipInput` 에 옮겨 담거나, `SSelect` 옆에 `SChip` 을 따로 나열해 선택값을 흉내 내지 않는다.
|
|
1783
1801
|
- **단일 선택 type 에는 주지 않는다.** 무시되고 `text` 로 보인다. 단일 선택의 값 비우기는 `clearable` 이 맡는다.
|
|
1784
1802
|
- 칩이 한 줄을 넘으면 줄바꿈하고 트리거가 그만큼 높아진다. 높이·칩 간격은 `SSelect` 가 토큰으로 넣는다 — 직접 주지 않는다.
|
|
@@ -1896,6 +1914,13 @@ useEffect(() => {
|
|
|
1896
1914
|
|
|
1897
1915
|
**`SKeyValueTable` 안에서는 필드마다 `maxWidth` 를 주지 않는다.** 표 안에서 이 상한이 거슬리는 이유는 대개 "같은 행의 다른 필드와 오른쪽 끝이 어긋난다" 이고, 그건 표 전체의 문제다. 표의 `fieldWidth="fill"` 로 한 번에 정한다 (§4-3). 그 표에서 한 필드만 예외로 둘 때만 `options.maxWidth` 를 쓴다.
|
|
1898
1916
|
|
|
1917
|
+
##### 시간 피커 — 분 간격은 `minuteStep`, 범위 순서는 `rangeOrder`
|
|
1918
|
+
|
|
1919
|
+
`STimePicker`·`STimeRangePicker` 는 `[오전/오후] | 시 | 분` 리스트에서 고른다 (직접 타이핑하지 않는다).
|
|
1920
|
+
|
|
1921
|
+
- **분 간격은 `minuteStep` 으로 정한다.** 분 리스트에 그 간격의 분만 나열되므로, 고른 값을 앱에서 다시 반올림하거나 `rules` 로 간격을 검사하지 않는다.
|
|
1922
|
+
- **`STimeRangePicker` 의 "종료가 시작보다 이르면 안 된다" 는 앱이 검증하지 않는다.** 기본 `rangeOrder="strict"` 가 종료 리스트에서 그 시각을 비활성으로 막는다. 자정을 넘는 범위(야간 근무 22:00~02:00 등)를 받아야 할 때만 `rangeOrder="allow-cross-day"` 를 준다.
|
|
1923
|
+
|
|
1899
1924
|
##### 값을 지울 수 있게 하려면 `clearable`
|
|
1900
1925
|
|
|
1901
1926
|
`SSelect` · `SDatePicker` · `SDateRangePicker` · `STimePicker` · `STimeRangePicker` 가 같은 규칙으로 갖는다. 값이 있을 때만 지우기 버튼이 나타나고, 누르면 **`onValueChange` 로 `null` 이 온다** (빈 문자열이 아니다). 받는 쪽 상태도 `null` 을 담을 수 있어야 한다.
|
|
@@ -5867,6 +5892,7 @@ export const BADGE_COLORS = [
|
|
|
5867
5892
|
| `tickCount?` | `number` | `8` | 값 축 눈금 개수 |
|
|
5868
5893
|
| `barSize?` | `number` | `BAR_SIZE_MAX` | 막대 두께 상한(px, 24~80). 낮추면 좌우 여백 상한도 같은 비율로 따라 내려온다 |
|
|
5869
5894
|
| `showValueLabel?` | `boolean` | `true` | 막대마다 값을 적는다 |
|
|
5895
|
+
| `rotateCategoryLabels?` | `boolean` | `false` | 항목 이름을 -45° 기울인다. 이름이 막대 묶음 폭보다 길어 서로 겹칠 때 쓴다. 기울여도 너무 긴 이름은 말줄임되고, 전체 이름은 툴팁 제목에서 읽힌다. 이름이 아주 길면 기울이기보다 `direction='horizontal'` 이 먼저다. 세로 막대에서만 쓴다 — 가로 막대는 이름 열이 가장 긴 이름에 맞춰 넓어지므로 무시한다 |
|
|
5870
5896
|
| `showLegend?` | `boolean` | `true` | 범례를 보인다 |
|
|
5871
5897
|
| `legendPosition?` | `SBarChartLegendPosition` | `'top'` | 범례 위치 |
|
|
5872
5898
|
| `showTooltip?` | `boolean` | `true` | 막대에 마우스를 올리면 값 상자를 띄운다 |
|
|
@@ -6034,6 +6060,7 @@ export type SBarcodeInputSize = SFieldSize;
|
|
|
6034
6060
|
|
|
6035
6061
|
- [SField](../SField)
|
|
6036
6062
|
- [SGhostButton](../SGhostButton)
|
|
6063
|
+
- [STag](../STag)
|
|
6037
6064
|
|
|
6038
6065
|
### Graph
|
|
6039
6066
|
|
|
@@ -6616,6 +6643,7 @@ export type SCheckboxValue = boolean | unknown[] | null;
|
|
|
6616
6643
|
### Used by
|
|
6617
6644
|
|
|
6618
6645
|
- [SKeyValueTable](../SKeyValueTable)
|
|
6646
|
+
- [SSelect](../SSelect)
|
|
6619
6647
|
- [STable](../STable)
|
|
6620
6648
|
- [STree](../STree)
|
|
6621
6649
|
|
|
@@ -8666,6 +8694,7 @@ export type SGhostButtonIntent =
|
|
|
8666
8694
|
- [SPage](../SPage)
|
|
8667
8695
|
- [SPopover](../SPopover)
|
|
8668
8696
|
- [SSearchInput](../SSearchInput)
|
|
8697
|
+
- [SSelect](../SSelect)
|
|
8669
8698
|
- [STable](../STable)
|
|
8670
8699
|
- [STimePicker](../STimePicker)
|
|
8671
8700
|
- [STimeRangePicker](../STimeRangePicker)
|
|
@@ -8888,7 +8917,7 @@ export interface SGnbSystemAlert {
|
|
|
8888
8917
|
/** 라벨 텍스트. 기본 `'알림'` */
|
|
8889
8918
|
label?: string;
|
|
8890
8919
|
/**
|
|
8891
|
-
* 읽지 않은 알림 개수. 1 이상이면 벨이 울리는 아이콘·강조색으로 바뀌고
|
|
8920
|
+
* 읽지 않은 알림 개수. 1 이상이면 벨이 울리는 아이콘·강조색으로 바뀌고 개수 배지가 붙는다.
|
|
8892
8921
|
* 개수를 적을 가로가 모자란 자리(접힌 레일 · 기본 폭보다 좁게 줄인 판)에서는 점 배지로 바뀐다.
|
|
8893
8922
|
* 표기는 컴포넌트가 맡는다 — 세 자리마다 콤마를 넣어 그리므로 앱이 포맷한 문자열을 넘기지 않는다.
|
|
8894
8923
|
*/
|
|
@@ -8990,7 +9019,9 @@ export interface SGnbSystemAccount {
|
|
|
8990
9019
|
* 타이포그래피는 CSS 변수가 아니라 `.typo-*` 프리셋으로 나온다.
|
|
8991
9020
|
* domainTag.typography → typo-body-sm-medium (12/500/20)
|
|
8992
9021
|
* item.label.typography → typo-body-sm-semibold (12/600/20)
|
|
8993
|
-
*
|
|
9022
|
+
*
|
|
9023
|
+
* 알림 개수는 글자가 아니라 배지(`STag` xs · deep)로 그린다 — 배경·글자색·치수는 태그 토큰
|
|
9024
|
+
* (`--cmp-tag-*`)이 쥔다.
|
|
8994
9025
|
*/
|
|
8995
9026
|
|
|
8996
9027
|
/** 색상(표면). light = 흰 면, dark = 오션블루 면. GNB 의 color 를 그대로 따라간다 */
|
|
@@ -9006,6 +9037,7 @@ export const GNB_SYSTEM_COLORS = ['light', 'dark'] as const;
|
|
|
9006
9037
|
- [SIcon](../SIcon)
|
|
9007
9038
|
- [SPortal](../SPortal)
|
|
9008
9039
|
- [SSystemActionButton](../SSystemActionButton)
|
|
9040
|
+
- [STag](../STag)
|
|
9009
9041
|
- [STooltip](../STooltip)
|
|
9010
9042
|
|
|
9011
9043
|
### Graph
|
|
@@ -9107,6 +9139,7 @@ export type SGuideMessage = string | SGuideMessage[];
|
|
|
9107
9139
|
- [SLauncherListBox](../SLauncherListBox)
|
|
9108
9140
|
- [SListItem](../SListItem)
|
|
9109
9141
|
- [SLoadingModal](../SLoadingModal)
|
|
9142
|
+
- [SMeatballButton](../SMeatballButton)
|
|
9110
9143
|
- [SNumberInput](../SNumberInput)
|
|
9111
9144
|
- [SPagination](../SPagination)
|
|
9112
9145
|
- [SPopover](../SPopover)
|
|
@@ -9247,6 +9280,7 @@ export const IMAGE_FITS = ['cover', 'contain', 'fill', 'none', 'scale-down'] as
|
|
|
9247
9280
|
|
|
9248
9281
|
- [SField](../SField)
|
|
9249
9282
|
- [SGhostButton](../SGhostButton)
|
|
9283
|
+
- [STag](../STag)
|
|
9250
9284
|
|
|
9251
9285
|
### Graph
|
|
9252
9286
|
|
|
@@ -9537,6 +9571,7 @@ export type SLayoutHeader = SGnbHeader;
|
|
|
9537
9571
|
| `tickCount?` | `number` | `8` | 값 축 눈금 개수 |
|
|
9538
9572
|
| `showPoint?` | `boolean` | `true` | 데이터 지점마다 점을 찍는다. 꺼도 짚은 항목의 점은 뜬다 |
|
|
9539
9573
|
| `showValueLabel?` | `boolean` | `false` | 점마다 값을 적는다. 기본은 끔 — 선 그래프는 항목이 많은 데이터에 쓰는 일이 잦아 숫자가 서로 붙는다. 항목이 대여섯 개 안쪽일 때만 켠다 |
|
|
9574
|
+
| `rotateCategoryLabels?` | `boolean` | `false` | 항목 이름을 -45° 기울인다. 이름이 점 간격보다 길어 서로 겹칠 때 쓴다. 기울여도 너무 긴 이름은 말줄임되고, 전체 이름은 툴팁 제목에서 읽힌다 |
|
|
9540
9575
|
| `showLegend?` | `boolean` | `true` | 범례를 보인다 |
|
|
9541
9576
|
| `legendPosition?` | `SLineChartLegendPosition` | `'top'` | 범례 위치 |
|
|
9542
9577
|
| `showTooltip?` | `boolean` | `true` | 항목에 마우스를 올리면 값 상자를 띄운다 |
|
|
@@ -10067,6 +10102,7 @@ export type SMeatballButtonItem = SDropdownButtonItem;
|
|
|
10067
10102
|
### Depends on
|
|
10068
10103
|
|
|
10069
10104
|
- [SGhostButton](../SGhostButton)
|
|
10105
|
+
- [SIcon](../SIcon)
|
|
10070
10106
|
|
|
10071
10107
|
### Graph
|
|
10072
10108
|
|
|
@@ -10430,6 +10466,7 @@ export type SNumberInputSize = SFieldSize;
|
|
|
10430
10466
|
|
|
10431
10467
|
- [SField](../SField)
|
|
10432
10468
|
- [SIcon](../SIcon)
|
|
10469
|
+
- [STag](../STag)
|
|
10433
10470
|
|
|
10434
10471
|
### Graph
|
|
10435
10472
|
|
|
@@ -11330,8 +11367,8 @@ export type SSectionHeaderCardChildren = ReactNode;
|
|
|
11330
11367
|
| `valueAsPrimitive?` | `boolean` | `false` | `value`·`onValueChange` 가 옵션 객체 대신 원시값(string|number)을 주고받는다. **기본값 `false`(옵션 객체)는 유지한다** — 원본(sd-select) 호환 때문이고, 뒤집으면 이 값을 주지 않던 화면이 조용히 다른 모양의 값을 받게 되어 타입으로도 잡히지 않는다. 새로 쓰는 화면은 켜는 쪽이 다루기 쉽다 — 서버로 보내는 것도, 폼 상태에 담는 것도 결국 값 하나이기 때문이다. |
|
|
11331
11368
|
| `name?` | `string` | — | 폼 연동용 name 속성 |
|
|
11332
11369
|
| `options?` | `SSelectOption[]` | `[]` | 옵션 목록 (children으로 계층 표현) |
|
|
11333
|
-
| `type?` | `SSelectType` | `'default'` |
|
|
11334
|
-
| `valueDisplay?` | `SSelectValueDisplay` | `'text'` | 트리거에 선택값을 보여주는 방식. - `text`: 선택 라벨을 쉼표로 이어 한 줄로 보여준다. 넘치면 말줄임한다. - `chip`: 선택값마다 칩을 낸다. 칩의 × 를 누르면 그 값만 선택에서 빠지고, 드롭다운은 열리지 않는다. 칩이 한 줄을 넘으면 줄바꿈하고 트리거가 그만큼 높아진다. `chip` 은 `multi`·`multi_depth` 에서만 동작한다. 단일 선택 type 에서는 무시하고 `text` 로 보여준다. 전체 선택이면 칩 대신 `allSelectedLabel` 을 보여준다. `multi_depth` 에서 그룹의 하위 리프를 전부 고르면 리프 칩 대신 그룹명 칩 하나로 묶고, 그 칩의 × 는 그룹의 리프를 한꺼번에 뺀다. 비활성(select 자체나 해당 옵션)인 칩에는 × 를 내지 않는다. |
|
|
11370
|
+
| `type?` | `SSelectType` | `'default'` | 타입 — 단일/다중 선택과 계층을 어떻게 보여주는지를 정한다. - `default` · `multi`: 평평한 목록 - `default_depth` · `multi_depth`: 계층을 늘 펼친 그룹 헤더로 보여준다. `default_depth` 의 그룹은 고를 수 없고, `multi_depth` 의 그룹 체크박스는 하위 리프를 한꺼번에 토글한다. - `tree` · `multi_tree`: 계층을 접고 펼 수 있는 트리로 보여준다. 처음에는 접혀 있고, 열 때 선택값을 품은 그룹만 펼친다. 검색 중에는 걸린 줄이 보이도록 전부 펼친다. `tree` 는 그룹(부모)도 값으로 고를 수 있다. `multi_tree` 의 그룹 체크박스는 하위 리프를 한꺼번에 토글하고, 방출값에는 리프만 담긴다(`multi_depth` 와 같다). 키보드 → 는 그룹을 펼치거나(펼쳐져 있으면 첫 자식으로 들어가고), ← 는 접거나 부모 줄로 올라간다. 검색 입력에 포커스가 있으면 커서가 그 방향 끝에 닿아 있을 때만 트리 조작으로 쓴다. 그룹의 `disabled` 는 선택만 막고 접고 펴기는 그대로 된다. `tree` 는 하위가 전부 비활성이어도 그룹을 고를 수 있다 (그룹까지 막으려면 그룹에 `disabled` 를 직접 준다). 드롭다운 안의 줄은 `STree` 와 같은 모양(연결선·화살표·체크박스·라벨 타이포)으로 그린다. |
|
|
11371
|
+
| `valueDisplay?` | `SSelectValueDisplay` | `'text'` | 트리거에 선택값을 보여주는 방식. - `text`: 선택 라벨을 쉼표로 이어 한 줄로 보여준다. 넘치면 말줄임한다. - `chip`: 선택값마다 칩을 낸다. 칩의 × 를 누르면 그 값만 선택에서 빠지고, 드롭다운은 열리지 않는다. 칩이 한 줄을 넘으면 줄바꿈하고 트리거가 그만큼 높아진다. `chip` 은 `multi`·`multi_depth`·`multi_tree` 에서만 동작한다. 단일 선택 type 에서는 무시하고 `text` 로 보여준다. 전체 선택이면 칩 대신 `allSelectedLabel` 을 보여준다. `multi_depth`·`multi_tree` 에서 그룹의 하위 리프를 전부 고르면 리프 칩 대신 그룹명 칩 하나로 묶고, 그 칩의 × 는 그룹의 리프를 한꺼번에 뺀다. 비활성(select 자체나 해당 옵션)인 칩에는 × 를 내지 않는다. |
|
|
11335
11372
|
| `showSearch?` | `boolean` | `false` | 검색 입력 사용 |
|
|
11336
11373
|
| `showSelectAll?` | `boolean` | `false` | 전체선택 옵션 사용 (multi 전용) |
|
|
11337
11374
|
| `allSelectedLabel?` | `string` | `'전체'` | 전체선택 레이블 |
|
|
@@ -11412,7 +11449,8 @@ export interface SSelectOption {
|
|
|
11412
11449
|
### SSelectType
|
|
11413
11450
|
|
|
11414
11451
|
```ts
|
|
11415
|
-
export type SSelectType =
|
|
11452
|
+
export type SSelectType =
|
|
11453
|
+
'default' | 'multi' | 'default_depth' | 'multi_depth' | 'tree' | 'multi_tree';
|
|
11416
11454
|
```
|
|
11417
11455
|
|
|
11418
11456
|
### SSelectValueDisplay
|
|
@@ -11431,8 +11469,10 @@ export type SSelectValueDisplay = 'text' | 'chip';
|
|
|
11431
11469
|
|
|
11432
11470
|
### Depends on
|
|
11433
11471
|
|
|
11472
|
+
- [SCheckbox](../SCheckbox)
|
|
11434
11473
|
- [SCircleProgress](../SCircleProgress)
|
|
11435
11474
|
- [SField](../SField)
|
|
11475
|
+
- [SGhostButton](../SGhostButton)
|
|
11436
11476
|
- [SIcon](../SIcon)
|
|
11437
11477
|
- [SPortal](../SPortal)
|
|
11438
11478
|
- [SSearchInput](../SSearchInput)
|
|
@@ -12048,7 +12088,7 @@ export interface SSystemActionButtonMenuOption {
|
|
|
12048
12088
|
| `getIsAllChecked` | `(rows: TRow[]) => boolean \| null` | 주어진 행들의 전체 선택 상태 (true/false/null=indeterminate) |
|
|
12049
12089
|
| `getPaginationInfo` | `<union 2종>` | 내부 페이지네이션 정보 (internalPagination 아니면 null) |
|
|
12050
12090
|
| `getStickyStyle` | `(colIdx: number) => CSSProperties` | 컬럼 sticky 스타일 (CSS 변수 + 고정폭) |
|
|
12051
|
-
| `getScrollElement` | `() => HTMLDivElement \| null` | 본문의 세로 스크롤 컨테이너. 본문이 슬롯으로 대체됐거나 아직 안 그려졌으면 `null`. 스크롤 위치를 읽고 되돌리거나, 표 안에서 스크롤 여지를 재야 할 때 쓴다 — **DOM 을 뒤져 컨테이너를 찾지 않는다.** 내부 구조는 예고 없이 바뀐다. ⚠️ `virtualScroll` 에서 **위치를 픽셀로 저장했다 되돌리는 것은 미덥지 않다.** 다시 그릴 때 아직 안 그려진 행은 추정 높이로 잡히므로, 실측이 쌓이기 전의 같은 `scrollTop` 이 다른 행을 가리킨다. 그 경우엔 위치가 아니라 **보고 있던 행**을 기억해 두는 편이 맞다. |
|
|
12091
|
+
| `getScrollElement` | `() => HTMLDivElement \| null` | 본문의 세로 스크롤 컨테이너. 본문이 슬롯으로 대체됐거나 아직 안 그려졌으면 `null`. 스크롤 위치를 읽고 되돌리거나, 표 안에서 스크롤 여지를 재야 할 때 쓴다 — **DOM 을 뒤져 컨테이너를 찾지 않는다.** 내부 구조는 예고 없이 바뀐다. 헤더도 이 안에 위로 붙어(sticky) 있다 — `clientHeight` 에는 헤더 높이가 들어 있다. `scrollTop` 은 본문 기준이라 `scrollTop` 이 y 이면 본문의 y 자리가 헤더 바로 아래에 온다. ⚠️ `virtualScroll` 에서 **위치를 픽셀로 저장했다 되돌리는 것은 미덥지 않다.** 다시 그릴 때 아직 안 그려진 행은 추정 높이로 잡히므로, 실측이 쌓이기 전의 같은 `scrollTop` 이 다른 행을 가리킨다. 그 경우엔 위치가 아니라 **보고 있던 행**을 기억해 두는 편이 맞다. |
|
|
12052
12092
|
| `getFirstVisibleRow` | `() => number` | 지금 본문 맨 위에 걸린 행의 인덱스 (`rows` 기준). 행이 없으면 `0`. **스크롤 위치를 저장할 때는 픽셀이 아니라 이 값을 저장한다** — `virtualScroll` 에서 픽셀은 좌표계가 실측으로 움직이는 값이라, 되돌릴 때 다른 행을 가리킨다. |
|
|
12053
12093
|
| `scrollToRow` | `(index: number) => void` | 그 행이 본문 맨 위에 오도록 스크롤한다 (`rows` 기준 인덱스, 범위를 벗어나면 잘린다). `virtualScroll` 에서는 **실측이 정착할 때까지 그 행을 계속 다시 겨냥한다** — 옮기는 시점의 좌표는 아직 추정치라 한 번만 옮기면 몇 행씩 밀린다. 사용자가 직접 스크롤하면 겨냥을 놓는다. 페이지네이션을 쓰는 표에서는 **지금 페이지에 그려진 행만** 닿는다 — 다른 페이지의 행이라면 페이지를 먼저 옮긴다. |
|
|
12054
12094
|
| `setRowCount` | `(count: number) => void` | 가상 스크롤 총 행 수 설정 |
|
|
@@ -12314,11 +12354,15 @@ export const TAG_COLORS = [
|
|
|
12314
12354
|
|
|
12315
12355
|
### Used by
|
|
12316
12356
|
|
|
12357
|
+
- [SBarcodeInput](../SBarcodeInput)
|
|
12317
12358
|
- [SChipFilter](../SChipFilter)
|
|
12318
12359
|
- [SConfirmModal](../SConfirmModal)
|
|
12319
12360
|
- [SGhostButton](../SGhostButton)
|
|
12320
12361
|
- [SGnb](../SGnb)
|
|
12362
|
+
- [SGnbSystem](../SGnbSystem)
|
|
12363
|
+
- [SInput](../SInput)
|
|
12321
12364
|
- [SLauncherListBox](../SLauncherListBox)
|
|
12365
|
+
- [SNumberInput](../SNumberInput)
|
|
12322
12366
|
- [SRadioCard](../SRadioCard)
|
|
12323
12367
|
- [SSystemActionButton](../SSystemActionButton)
|
|
12324
12368
|
- [STabs](../STabs)
|
|
@@ -12472,7 +12516,7 @@ export type STextLinkSize = 'sm' | 'md' | 'lg';
|
|
|
12472
12516
|
| `disabled?` | `boolean` | `false` | |
|
|
12473
12517
|
| `clearable?` | `boolean` | `false` | |
|
|
12474
12518
|
| `showMeridiem?` | `boolean` | — | 오전/오후 선택 표시 여부. 지정하지 않으면 type="midday"일 때만 켜집니다. |
|
|
12475
|
-
| `minuteStep?` | `number` | `1` |
|
|
12519
|
+
| `minuteStep?` | `number` | `1` | 분 리스트에 나열할 간격(분). 10 이면 `00 10 20 30 40 50` 만 고를 수 있다 |
|
|
12476
12520
|
| `width?` | `SFieldWidth` | — | 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이. 등급은 `--cmp-field-width-*` 토큰으로 풀리므로 토큰이 바뀌면 화면이 따라간다. 값 길이에 상한이 없으면 `"100%"` 로 두어 행 전체를 쓴다. |
|
|
12477
12521
|
| `maxWidth?` | `SFieldWidth` | — | 컨트롤 최대 너비 — 폭 등급 · 숫자=px · CSS 길이. 지정하지 않으면 값 길이(`HH:mm`)에 맞춘 내장 상한(`size='md'` → `lg`, `'sm'` → `md`)이 걸려, `width="100%"` 를 받아도 행 전체로 늘어나지 않는다. 팝오버처럼 폭이 이미 좁게 정해진 자리에서 그 폭을 그대로 채워야 하면 `width="100%"` 와 함께 `maxWidth="100%"` 를 준다. `0` 은 상한을 아예 걸지 않는다 — 부모보다 넓어지는 것까지 허용해야 할 때만 쓴다. |
|
|
12478
12522
|
| `name?` | `string` | — | |
|
|
@@ -12548,8 +12592,8 @@ export type STimePickerSize = 'sm' | 'md';
|
|
|
12548
12592
|
| `disabled?` | `boolean` | `false` | |
|
|
12549
12593
|
| `clearable?` | `boolean` | `false` | |
|
|
12550
12594
|
| `showMeridiem?` | `boolean` | — | 오전/오후 선택 표시 여부. 지정하지 않으면 type="midday"일 때만 켜집니다. |
|
|
12551
|
-
| `minuteStep?` | `number` | `1` |
|
|
12552
|
-
| `rangeOrder?` | `STimeRangePickerRangeOrder` | `'strict'` | 범위 순서 정책. strict는
|
|
12595
|
+
| `minuteStep?` | `number` | `1` | 분 리스트에 나열할 간격(분). 10 이면 `00 10 20 30 40 50` 만 고를 수 있다 |
|
|
12596
|
+
| `rangeOrder?` | `STimeRangePickerRangeOrder` | `'strict'` | 범위 순서 정책. `strict` 는 종료 리스트에서 시작보다 이른 시각을 비활성으로 막고, 시작을 종료 뒤로 옮기면 종료가 따라온다. `allow-cross-day` 는 제약 없이 고른다(자정을 넘는 범위). |
|
|
12553
12597
|
| `width?` | `SFieldWidth` | — | 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이. 등급은 `--cmp-field-width-*` 토큰으로 풀리므로 토큰이 바뀌면 화면이 따라간다. 값 길이에 상한이 없으면 `"100%"` 로 두어 행 전체를 쓴다. |
|
|
12554
12598
|
| `maxWidth?` | `SFieldWidth` | — | 컨트롤 최대 너비 — 폭 등급 · 숫자=px · CSS 길이. 지정하지 않으면 값 길이(`HH:mm ~ HH:mm`)에 맞춘 내장 상한이 걸려, `width="100%"` 를 받아도 행 전체로 늘어나지 않는다. 팝오버처럼 폭이 이미 좁게 정해진 자리에서 그 폭을 그대로 채워야 하면 `width="100%"` 와 함께 `maxWidth="100%"` 를 준다. `0` 은 상한을 아예 걸지 않는다 — 부모보다 넓어지는 것까지 허용해야 할 때만 쓴다. |
|
|
12555
12599
|
| `name?` | `string` | — | |
|
package/dist/llms.txt
CHANGED
|
@@ -542,6 +542,7 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
542
542
|
| 정해진 범위 안에서 수치 하나·구간을 끌어서 고르게 한다 | `SSlider` | §3-7-16 |
|
|
543
543
|
| 바코드를 스캔해 받는다 | `SBarcodeInput` | |
|
|
544
544
|
| 목록에서 하나 고르게 한다 | `SSelect` | §3-7-2 |
|
|
545
|
+
| 계층(카테고리 > 세부분류)을 접고 펴며 드롭다운에서 고르게 한다 | `SSelect` `type="tree"`·`"multi_tree"` | §3-7-2 — 계층을 늘 펼쳐 보여도 되면 `default_depth`·`multi_depth` |
|
|
545
546
|
| 선택지를 항상 펼쳐 두고 하나 고르게 한다 | `SRadioGroup` | §3-7-2 |
|
|
546
547
|
| 버튼 모양으로 모드를 하나 고르게 한다 | `SRadioButton` | §3-7-2 |
|
|
547
548
|
| 선택지마다 설명이 붙어 한 줄로는 안 된다 | `SRadioCardGroup` | §3-7-2 |
|
|
@@ -578,13 +579,14 @@ Tailwind 유틸리티는 **토큰 스케일에 있는 값만** 사용한다.
|
|
|
578
579
|
| 대화의 메시지 한 건을 보여준다 | `SChatMessage` | |
|
|
579
580
|
| 대화 중간에 시스템이 알리는 사실을 끼운다 (상담사 배정·대화 종료 등) | `SChatSystemMessage` | 사람이 보낸 말이면 `SChatMessage` |
|
|
580
581
|
| 나열한 항목을 펼쳐 하위 내용을 보여준다 | `SExpansionList` + `SExpansionItem` | §3-7-7 |
|
|
581
|
-
| 부모-자식 계층을 들여쓰기로 보여준다 | `STree` | §3-7-7 |
|
|
582
|
+
| 부모-자식 계층을 들여쓰기로 보여준다 | `STree` | §3-7-7 — 폼 값으로 드롭다운에서 고르는 것이면 `SSelect` `type="tree"` |
|
|
582
583
|
| 계층을 이루는 행들을 여러 열로 보여준다 (카테고리 > 상품 > 옵션) | `STreeTable` | §3-7-7 — 한 줄에 라벨 하나면 `STree` |
|
|
583
584
|
| 사용자가 순서를 드래그로 바꾸게 한다 | `SDraggableList` + `SDraggableItem` | §3-7-6 |
|
|
584
585
|
| 날짜별 일정을 한 달치 격자로 펼쳐 보여준다 | `SCalendarBoard` | §3-7-4 |
|
|
585
586
|
| 항목끼리 크기를 눈으로 견주게 한다 (채널별 매출·상품별 판매량) | `SBarChart` | 정확한 값을 읽어야 하면 `STable` — 그래프는 "어느 쪽이 큰가" 를 답하지 "얼마인가" 를 답하지 않는다 |
|
|
586
587
|
| 순서가 있는 항목의 **추이**를 보여준다 (일·월별 매출 흐름, 기간별 방문 수) | `SLineChart` | 항목 순서에 뜻이 없으면(채널별·상품별) `SBarChart` — 선은 "이어진다" 는 뜻을 덤으로 얹어, 순서 없는 항목을 이으면 없는 흐름을 만든다. 항목이 대여섯 개 안쪽이고 크기를 견주는 것이 목적이면 막대가 낫다 |
|
|
587
588
|
| 여러 항목의 추이를 **합계와 함께** 보여준다 (채널별 매출이 쌓여 전체가 되는 흐름) | `SLineChart stacked area` | 합계가 뜻을 갖는 값일 때만 쌓는다. 음수가 섞이거나 더해서 뜻이 없는 값(비율·평균)은 쌓지 말고 겹쳐 그린다 |
|
|
589
|
+
| 항목 이름이 길어 가로축에서 서로 겹친다 (상품명·채널명, `2026-10-01` 같은 날짜) | 순서 없는 항목은 `SBarChart direction="horizontal"` — 이름 열이 가장 긴 이름에 맞춰 넓어진다. 순서가 있어 세로 축을 지켜야 하면(날짜순 막대·`SLineChart`) `rotateCategoryLabels` | 이름이 짧아 겹치지 않으면 켜지 않는다 — 켜면 늘 기울어 읽기만 나빠진다. 기울여도 너무 긴 이름은 차트가 말줄임하고 전체 이름은 툴팁에 뜬다. 말줄임 폭·각도를 직접 주지 않는다. 나란히 놓인 차트는 켜고 끄기를 맞춰야 그림 높이가 같다 |
|
|
588
590
|
| 항목의 크기와 **그 안의 구성**을 함께 보여준다 (주문 상태별 내역, 유입 경로별 몫) | `SBarChart stacked` | 계열끼리 견주는 것이 목적이면 `stacked` 없이 나란히 세운다. 더해서 뜻이 없는 값(비율·평균)은 쌓지 않는다 — 합계 라벨이 거짓말이 된다 |
|
|
589
591
|
| 한 시점의 **전체를 몇 개의 몫으로** 나눠 보여준다 (채널별 매출 비중, 회원 등급 구성) | `SPieChart` | 조각이 대여섯 개를 넘거나 몫끼리 크기를 견주는 것이 목적이면 `SBarChart` — 사람은 각도보다 길이를 정확히 견준다. 순서가 있는 추이(월별)는 몫이 아니라 흐름이라 `SLineChart`. 0·음수는 그려지지 않으므로 증감은 원으로 나타내지 않는다. 조각은 큰 순으로 넘긴다. 폭은 부모를 따르고 그림은 그 폭의 정사각형이다 — 폭이 필요하면 `className` 으로 폭만 주고 높이는 주지 않는다 (`SDonutChart` 도 같다) |
|
|
590
592
|
| 한 시점의 전체를 몫으로 나누되 **가운데가 빈 고리 모양**으로 보여준다 (시안이 도넛일 때) | `SDonutChart` | 쓰임·데이터 규칙은 `SPieChart` 와 같고 모양만 다르다 — 시안이 정한 쪽을 쓴다. **구멍에 합계·라벨을 겹쳐 올리지 않는다.** 합계 같은 값이 필요하면 차트 바깥(카드 제목·요약 값)에 적는다. 여러 기간에 걸친 구성 변화는 원을 여러 개 늘어놓지 말고 `SBarChart stacked` |
|
|
@@ -1777,9 +1779,25 @@ tableRef.current.scrollToRow(row); // 복원
|
|
|
1777
1779
|
- 카드 안에 상태 배지를 넣으려면 `tag` 슬롯에 `STag` 를 준다. 라벨 문자열에 "(추천)" 처럼 섞어 쓰지 않는다.
|
|
1778
1780
|
- **카드처럼 생겼다고 `SCard`/`SSectionHeaderCard` 로 감싸지 않는다.** `SRadioCard` 자체가 완결된 요소이고, 나열 간격은 `SRadioCardGroup` 의 `direction` 이 맞춘다 (§2-2).
|
|
1779
1781
|
|
|
1782
|
+
##### 후보에 상하 관계가 있으면 — depth vs tree
|
|
1783
|
+
|
|
1784
|
+
계층은 `options` 의 `children` 으로 만든다. 평평한 `default`·`multi` 에 분류명을 라벨에 섞어 늘어놓지 않는다. 남는 선택은 **계층을 어떻게 보여주는가**와 **그룹이 값이 되는가**다.
|
|
1785
|
+
|
|
1786
|
+
| 상황 | `type` |
|
|
1787
|
+
| --- | --- |
|
|
1788
|
+
| 그룹이 몇 개 안 돼 늘 펼쳐 둬도 한눈에 읽힌다. 그룹은 분류 헤더일 뿐 값이 아니다 | `default_depth` · `multi_depth` |
|
|
1789
|
+
| 그룹·단계가 많아 다 펼치면 목록이 길어진다 — 접어 두고 필요한 갈래만 편다 | `tree` · `multi_tree` |
|
|
1790
|
+
| **그룹 자체도 값**이다 (예: "패션의류" 전체를 하나의 조건으로 고른다) — 단일 선택 | `tree` |
|
|
1791
|
+
|
|
1792
|
+
- **값에 무엇이 담기는가.** `default_depth`·`multi_depth`·`multi_tree` 는 언제나 **리프만** 담긴다 — `multi_tree`·`multi_depth` 의 그룹 체크박스는 그 아래 리프를 한꺼번에 넣고 뺄 뿐, 그룹의 `value` 는 값이 되지 않는다. 그룹의 `value` 가 값으로 오는 것은 `tree` 뿐이다.
|
|
1793
|
+
- **펼침 상태는 `SSelect` 가 쥔다.** 열 때마다 선택값을 품은 그룹이 펼쳐지고, 검색 중에는 걸린 줄이 보이도록 결과를 전부 펼친다. 앱이 펼칠 그룹을 따로 들고 있지 않는다.
|
|
1794
|
+
- 그룹의 `disabled` 는 그 줄의 선택만 막는다 — 마우스(화살표)로도 키보드(→)로도 접고 펴기는 되므로 아래의 고를 수 있는 자식에 닿는 길은 남는다.
|
|
1795
|
+
- 하위가 전부 비활성이면 `multi_tree`·depth 타입은 그룹도 함께 잠그므로 앱이 어미에 `disabled` 를 다시 달 필요가 없다. `tree` 는 그룹 자체가 값이라 하위가 막혀도 그룹은 고를 수 있다 — 그룹까지 막으려면 그룹에 `disabled` 를 직접 준다.
|
|
1796
|
+
- 드롭다운 없이 화면에 계층을 펼쳐 두고 여러 개를 체크하게 하는 것이면 `SSelect` 가 아니라 `STree` 다 (§3-7-7).
|
|
1797
|
+
|
|
1780
1798
|
##### 여러 개 고른 값을 칩으로 보여줄 때 — `valueDisplay="chip"`
|
|
1781
1799
|
|
|
1782
|
-
- **`type="multi"`·`"multi_depth"` 에서 `valueDisplay="chip"` 을 주면** 선택값이 트리거에 칩으로 뜨고, 칩의 × 로 하나씩 뺄 수 있다. 기본(`text`)은 라벨을 쉼표로 이어 한 줄로 말줄임한다. 고른 값 하나하나를 확인하고 바로 빼야 하는 자리면 `chip`, 몇 개 골랐는지만 보이면 되는 조회 필터면 `text` 를 쓴다.
|
|
1800
|
+
- **`type="multi"`·`"multi_depth"`·`"multi_tree"` 에서 `valueDisplay="chip"` 을 주면** 선택값이 트리거에 칩으로 뜨고, 칩의 × 로 하나씩 뺄 수 있다. 기본(`text`)은 라벨을 쉼표로 이어 한 줄로 말줄임한다. 고른 값 하나하나를 확인하고 바로 빼야 하는 자리면 `chip`, 몇 개 골랐는지만 보이면 되는 조회 필터면 `text` 를 쓴다.
|
|
1783
1801
|
- **후보가 정해진 목록에서 고르는 것이면 `SSelect` 의 `chip` 이고, 사용자가 값을 직접 타이핑해 쌓는 것이면 `SChipInput` 이다.** 목록에서 고른 값을 `SChipInput` 에 옮겨 담거나, `SSelect` 옆에 `SChip` 을 따로 나열해 선택값을 흉내 내지 않는다.
|
|
1784
1802
|
- **단일 선택 type 에는 주지 않는다.** 무시되고 `text` 로 보인다. 단일 선택의 값 비우기는 `clearable` 이 맡는다.
|
|
1785
1803
|
- 칩이 한 줄을 넘으면 줄바꿈하고 트리거가 그만큼 높아진다. 높이·칩 간격은 `SSelect` 가 토큰으로 넣는다 — 직접 주지 않는다.
|
|
@@ -1897,6 +1915,13 @@ useEffect(() => {
|
|
|
1897
1915
|
|
|
1898
1916
|
**`SKeyValueTable` 안에서는 필드마다 `maxWidth` 를 주지 않는다.** 표 안에서 이 상한이 거슬리는 이유는 대개 "같은 행의 다른 필드와 오른쪽 끝이 어긋난다" 이고, 그건 표 전체의 문제다. 표의 `fieldWidth="fill"` 로 한 번에 정한다 (§4-3). 그 표에서 한 필드만 예외로 둘 때만 `options.maxWidth` 를 쓴다.
|
|
1899
1917
|
|
|
1918
|
+
##### 시간 피커 — 분 간격은 `minuteStep`, 범위 순서는 `rangeOrder`
|
|
1919
|
+
|
|
1920
|
+
`STimePicker`·`STimeRangePicker` 는 `[오전/오후] | 시 | 분` 리스트에서 고른다 (직접 타이핑하지 않는다).
|
|
1921
|
+
|
|
1922
|
+
- **분 간격은 `minuteStep` 으로 정한다.** 분 리스트에 그 간격의 분만 나열되므로, 고른 값을 앱에서 다시 반올림하거나 `rules` 로 간격을 검사하지 않는다.
|
|
1923
|
+
- **`STimeRangePicker` 의 "종료가 시작보다 이르면 안 된다" 는 앱이 검증하지 않는다.** 기본 `rangeOrder="strict"` 가 종료 리스트에서 그 시각을 비활성으로 막는다. 자정을 넘는 범위(야간 근무 22:00~02:00 등)를 받아야 할 때만 `rangeOrder="allow-cross-day"` 를 준다.
|
|
1924
|
+
|
|
1900
1925
|
##### 값을 지울 수 있게 하려면 `clearable`
|
|
1901
1926
|
|
|
1902
1927
|
`SSelect` · `SDatePicker` · `SDateRangePicker` · `STimePicker` · `STimeRangePicker` 가 같은 규칙으로 갖는다. 값이 있을 때만 지우기 버튼이 나타나고, 누르면 **`onValueChange` 로 `null` 이 온다** (빈 문자열이 아니다). 받는 쪽 상태도 `null` 을 담을 수 있어야 한다.
|
package/dist/styles.css
CHANGED
|
@@ -731,6 +731,9 @@
|
|
|
731
731
|
.isolate {
|
|
732
732
|
isolation: isolate;
|
|
733
733
|
}
|
|
734
|
+
.z-1 {
|
|
735
|
+
z-index: 1;
|
|
736
|
+
}
|
|
734
737
|
.z-10 {
|
|
735
738
|
z-index: 10;
|
|
736
739
|
}
|
|
@@ -764,6 +767,9 @@
|
|
|
764
767
|
.z-\[7\] {
|
|
765
768
|
z-index: 7;
|
|
766
769
|
}
|
|
770
|
+
.z-\[8\] {
|
|
771
|
+
z-index: 8;
|
|
772
|
+
}
|
|
767
773
|
.z-\[30\] {
|
|
768
774
|
z-index: 30;
|
|
769
775
|
}
|
|
@@ -917,9 +923,6 @@
|
|
|
917
923
|
.mt-sd-36 {
|
|
918
924
|
margin-top: var(--spacing-sd-36);
|
|
919
925
|
}
|
|
920
|
-
.-mr-px {
|
|
921
|
-
margin-right: -1px;
|
|
922
|
-
}
|
|
923
926
|
.mr-\[6px\] {
|
|
924
927
|
margin-right: 6px;
|
|
925
928
|
}
|
|
@@ -1211,9 +1214,6 @@
|
|
|
1211
1214
|
.h-\[var\(--cmp-table-header-height\)\] {
|
|
1212
1215
|
height: var(--cmp-table-header-height);
|
|
1213
1216
|
}
|
|
1214
|
-
.h-\[var\(--cmp-textinput-sm-height\)\] {
|
|
1215
|
-
height: var(--cmp-textinput-sm-height);
|
|
1216
|
-
}
|
|
1217
1217
|
.h-\[var\(--sys-size-\.\.\.\)\] {
|
|
1218
1218
|
height: var(--sys-size-...);
|
|
1219
1219
|
}
|
|
@@ -1379,9 +1379,6 @@
|
|
|
1379
1379
|
.w-\[48px\] {
|
|
1380
1380
|
width: 48px;
|
|
1381
1381
|
}
|
|
1382
|
-
.w-\[61px\] {
|
|
1383
|
-
width: 61px;
|
|
1384
|
-
}
|
|
1385
1382
|
.w-\[72px\] {
|
|
1386
1383
|
width: 72px;
|
|
1387
1384
|
}
|
|
@@ -1673,14 +1670,6 @@
|
|
|
1673
1670
|
--tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
|
|
1674
1671
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1675
1672
|
}
|
|
1676
|
-
.-translate-x-full {
|
|
1677
|
-
--tw-translate-x: -100%;
|
|
1678
|
-
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1679
|
-
}
|
|
1680
|
-
.translate-x-0 {
|
|
1681
|
-
--tw-translate-x: 0;
|
|
1682
|
-
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1683
|
-
}
|
|
1684
1673
|
.translate-x-1\/2 {
|
|
1685
1674
|
--tw-translate-x: calc(1 / 2 * 100%);
|
|
1686
1675
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -2535,10 +2524,6 @@
|
|
|
2535
2524
|
border-top-left-radius: 4px;
|
|
2536
2525
|
border-bottom-left-radius: 4px;
|
|
2537
2526
|
}
|
|
2538
|
-
.rounded-l-\[var\(--cmp-select-sm-radius\)\] {
|
|
2539
|
-
border-top-left-radius: var(--cmp-select-sm-radius);
|
|
2540
|
-
border-bottom-left-radius: var(--cmp-select-sm-radius);
|
|
2541
|
-
}
|
|
2542
2527
|
.rounded-tl {
|
|
2543
2528
|
border-top-left-radius: 0.25rem;
|
|
2544
2529
|
}
|
|
@@ -2550,10 +2535,6 @@
|
|
|
2550
2535
|
border-top-right-radius: 4px;
|
|
2551
2536
|
border-bottom-right-radius: 4px;
|
|
2552
2537
|
}
|
|
2553
|
-
.rounded-r-\[var\(--cmp-select-sm-radius\)\] {
|
|
2554
|
-
border-top-right-radius: var(--cmp-select-sm-radius);
|
|
2555
|
-
border-bottom-right-radius: var(--cmp-select-sm-radius);
|
|
2556
|
-
}
|
|
2557
2538
|
.rounded-tr {
|
|
2558
2539
|
border-top-right-radius: 0.25rem;
|
|
2559
2540
|
}
|
|
@@ -2809,12 +2790,6 @@
|
|
|
2809
2790
|
.border-\[var\(--cmp-table-border-color\)\] {
|
|
2810
2791
|
border-color: var(--cmp-table-border-color);
|
|
2811
2792
|
}
|
|
2812
|
-
.border-\[var\(--cmp-timepicker-border-default\)\] {
|
|
2813
|
-
border-color: var(--cmp-timepicker-border-default);
|
|
2814
|
-
}
|
|
2815
|
-
.border-\[var\(--cmp-timepicker-border-focus\)\] {
|
|
2816
|
-
border-color: var(--cmp-timepicker-border-focus);
|
|
2817
|
-
}
|
|
2818
2793
|
.border-border-default {
|
|
2819
2794
|
border-color: var(--color-border-default);
|
|
2820
2795
|
}
|
|
@@ -3013,6 +2988,9 @@
|
|
|
3013
2988
|
.bg-\(--cmp-tree-item-bg-default\) {
|
|
3014
2989
|
background-color: var(--cmp-tree-item-bg-default);
|
|
3015
2990
|
}
|
|
2991
|
+
.bg-\(--cmp-tree-item-bg-hover\) {
|
|
2992
|
+
background-color: var(--cmp-tree-item-bg-hover);
|
|
2993
|
+
}
|
|
3016
2994
|
.bg-\(--gsb-bg\) {
|
|
3017
2995
|
background-color: var(--gsb-bg);
|
|
3018
2996
|
}
|
|
@@ -4463,12 +4441,6 @@
|
|
|
4463
4441
|
.text-\[color\:var\(--sys-color-field-text-default\)\] {
|
|
4464
4442
|
color: var(--sys-color-field-text-default);
|
|
4465
4443
|
}
|
|
4466
|
-
.text-\[var\(--cmp-field-hint-color\)\] {
|
|
4467
|
-
color: var(--cmp-field-hint-color);
|
|
4468
|
-
}
|
|
4469
|
-
.text-\[var\(--cmp-timepicker-border-focus\)\] {
|
|
4470
|
-
color: var(--cmp-timepicker-border-focus);
|
|
4471
|
-
}
|
|
4472
4444
|
.text-\[var\(--cmp-timepicker-selector-range-heading-color\)\] {
|
|
4473
4445
|
color: var(--cmp-timepicker-selector-range-heading-color);
|
|
4474
4446
|
}
|
|
@@ -4684,6 +4656,9 @@
|
|
|
4684
4656
|
outline-style: var(--tw-outline-style);
|
|
4685
4657
|
outline-width: 2px;
|
|
4686
4658
|
}
|
|
4659
|
+
.outline-offset-\[-2px\] {
|
|
4660
|
+
outline-offset: -2px;
|
|
4661
|
+
}
|
|
4687
4662
|
.outline-\(--sys-color-border-default\) {
|
|
4688
4663
|
outline-color: var(--sys-color-border-default);
|
|
4689
4664
|
}
|