sellmate-design-system-react 9.0.0-beta.98 → 9.0.0-beta.99

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 CHANGED
@@ -1375,6 +1375,7 @@ tableRef.current.scrollToRow(row); // 복원
1375
1375
 
1376
1376
  | 위치 | size |
1377
1377
  | --- | --- |
1378
+ | **본문 텍스트 사이**에 끼워 서는 버튼 (출처 번호·문장 속 바로가기) | `xxs` |
1378
1379
  | 테이블 **행 내부** 인라인 액션 | `xs` |
1379
1380
  | 화면·목록 액션 (툴바, `STableBar`) | `sm` |
1380
1381
  | **모달·드로어·팝업 푸터** | `md` (고정) |
@@ -1385,6 +1386,8 @@ tableRef.current.scrollToRow(row); // 복원
1385
1386
 
1386
1387
  `lg` 는 현재 사용처가 없다. 페이지 골격에서 쓰지 않는다.
1387
1388
 
1389
+ **`xxs` 는 본문 텍스트 사이에만 쓴다.** 높이가 본문 줄 높이와 같아 문장 속에 끼워도 줄이 벌어지지 않는 크기다. 목록·툴바·표 행처럼 버튼끼리 서는 자리에서는 누르기에 작으니 `xs` 이상을 쓴다. 문장 속 알약이면 `pill` 과 함께 준다.
1390
+
1388
1391
  **푸터 버튼의 크기는 버튼이 아니라 푸터가 정한다.** 모달·드로어·팝업은 예외가 없어 타입에 `size` 가 없고, 카드 둘(`SCard`·`SSectionHeaderCard`)만 `footerSize` 로 고른다 — 자세한 기준은 §3-7-8. **`footerLeft` 슬롯에 직접 배치하는 `SButton` 은 그 푸터와 같은 크기를 명시한다**(모달이면 `size="md"`, `footerSize="sm"` 인 카드면 `size="sm"`). 슬롯까지는 타입이 못 막으므로 어긋나면 좌우 버튼 높이가 갈린다.
1389
1392
 
1390
1393
  #### 3-5-3. 파괴적 액션의 채움 / outline
@@ -1485,7 +1488,7 @@ tableRef.current.scrollToRow(row); // 복원
1485
1488
  - 라벨은 **동사(+목적어)** — `저장` · `적치 지시` · `송장 재출력`
1486
1489
  - 완료된 작업 버튼은 제거하지 않고 **`disabled` 로 남긴다.** 자리가 사라지면 행 높이가 흔들린다.
1487
1490
  - **모달 보조 액션은 `color="neutral" outline`** 이 표준이다.
1488
- - **`pill` 은 본문·목록 사이에 끼어 서는 작은 부가 버튼에만 준다** — 추천 질문·출처 바로가기처럼 누르면 동작하는 알약. 보통 `color="neutral" outline size="xs"` 와 함께 쓴다. 화면의 주 액션·폼 제출·하단 버튼은 모서리를 바꾸지 않는다. 값·필터 토큰이면 `SChip`, 누를 수 없는 표시면 `STag` 다. 알약 모양을 `className="rounded-full"` 로 직접 만들지 않는다.
1491
+ - **`pill` 은 본문·목록 사이에 끼어 서는 작은 부가 버튼에만 준다** — 추천 질문·출처 바로가기처럼 누르면 동작하는 알약. 보통 `color="neutral" outline` 과 함께 쓰고, 크기는 목록 사이면 `xs`, 문장 속이면 `xxs` 다(§3-5-2). 화면의 주 액션·폼 제출·하단 버튼은 모서리를 바꾸지 않는다. 값·필터 토큰이면 `SChip`, 누를 수 없는 표시면 `STag` 다. 알약 모양을 `className="rounded-full"` 로 직접 만들지 않는다.
1489
1492
 
1490
1493
  **하단 버튼 배치 (모든 화면 공통)** — 그룹을 모아 정렬하지 않고 **양끝으로 벌린다**(`justify-between`).
1491
1494
 
@@ -10,7 +10,7 @@
10
10
  |------|------|---------|-------------|
11
11
  | `color?` | `SButtonColor` | `'primary'` | 색상 — sd-button preset의 색 계열 |
12
12
  | `outline?` | `boolean` | `false` | 아웃라인(테두리) 스타일. primary·neutral·danger 만 지원 (secondary 는 무시) |
13
- | `size?` | `SButtonSize` | `'sm'` | 크기 |
13
+ | `size?` | `SButtonSize` | `'sm'` | 크기. 놓이는 위치가 정한다(AGENTS.md §3-5-2). `xxs` 는 본문 텍스트 사이에 끼워 서는 버튼 전용 — 높이가 본문 줄 높이와 같아 줄이 벌어지지 않는다. 버튼끼리 서는 자리에서는 `xs` 이상을 쓴다. |
14
14
  | `icon?` | `SIconName` | — | 레이블 왼쪽 아이콘 |
15
15
  | `rightIcon?` | `SIconName` | — | 레이블 오른쪽 아이콘 |
16
16
  | `label?` | `string` | — | 버튼 텍스트 (문자열만 — 아이콘은 icon/rightIcon 사용) |
@@ -47,7 +47,7 @@ export const BUTTON_COLORS = ['primary', 'secondary', 'neutral', 'danger'] as co
47
47
  ### BUTTON_SIZES
48
48
 
49
49
  ```ts
50
- export const BUTTON_SIZES = ['xs', 'sm', 'md', 'lg'] as const;
50
+ export const BUTTON_SIZES = ['xxs', 'xs', 'sm', 'md', 'lg'] as const;
51
51
  ```
52
52
 
53
53
  ## Dependencies
@@ -6,7 +6,10 @@ export interface SButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElemen
6
6
  color?: SButtonColor;
7
7
  /** 아웃라인(테두리) 스타일. primary·neutral·danger 만 지원 (secondary 는 무시) */
8
8
  outline?: boolean;
9
- /** 크기 */
9
+ /**
10
+ * 크기. 놓이는 위치가 정한다(AGENTS.md §3-5-2). `xxs` 는 본문 텍스트 사이에 끼워 서는 버튼 전용 —
11
+ * 높이가 본문 줄 높이와 같아 줄이 벌어지지 않는다. 버튼끼리 서는 자리에서는 `xs` 이상을 쓴다.
12
+ */
10
13
  size?: SButtonSize;
11
14
  /** 레이블 왼쪽 아이콘 */
12
15
  icon?: SIconName;
@@ -25,7 +28,7 @@ export interface SButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElemen
25
28
  }
26
29
  /**
27
30
  * SButton — sd-button 포팅.
28
- * color(4) × outline × 4개 사이즈, 아이콘(icon/rightIcon), pill 모양, 컴포넌트 토큰(--cmp-button-*) 기반.
31
+ * color(4) × outline × 5개 사이즈, 아이콘(icon/rightIcon), pill 모양, 컴포넌트 토큰(--cmp-button-*) 기반.
29
32
  * 텍스트는 label(문자열)로만 받는다. 이벤트: sdClick → 네이티브 onClick.
30
33
  */
31
34
  export declare const SButton: import("react").ForwardRefExoticComponent<SButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -7,7 +7,7 @@
7
7
  * 색상은 theme.css의 `--cmp-button-*` CSS 변수를 참조한다.
8
8
  */
9
9
  export declare const BUTTON_COLORS: readonly ["primary", "secondary", "neutral", "danger"];
10
- export declare const BUTTON_SIZES: readonly ["xs", "sm", "md", "lg"];
10
+ export declare const BUTTON_SIZES: readonly ["xxs", "xs", "sm", "md", "lg"];
11
11
  export type SButtonColor = (typeof BUTTON_COLORS)[number];
12
12
  export type SButtonSize = (typeof BUTTON_SIZES)[number];
13
13
  interface PresetColors {
@@ -32,6 +32,8 @@ export declare const BUTTON_SIZE_CONFIG: Record<SButtonSize, {
32
32
  fontWeight: number;
33
33
  radius: string;
34
34
  minWidth: number;
35
+ /** 라벨 글자만 내리는 위 여백 — 글꼴 상자가 버튼 안에 반 픽셀로 놓이는 크기의 보정 (xxs) */
36
+ labelOffsetTop?: string;
35
37
  }>;
36
38
  export declare const BUTTON_FOCUS_RING = "var(--sys-color-border-accent)";
37
39
  export declare const BUTTON_DISABLED_BG = "var(--cmp-button-bg-disabled, #E1E1E1)";
package/dist/index.cjs CHANGED
@@ -4153,7 +4153,7 @@ var SBadge = /* @__PURE__ */ react.forwardRef(function SBadge2({ color = "blue",
4153
4153
 
4154
4154
  // src/components/SButton/button.config.ts
4155
4155
  var BUTTON_COLORS = ["primary", "secondary", "neutral", "danger"];
4156
- var BUTTON_SIZES = ["xs", "sm", "md", "lg"];
4156
+ var BUTTON_SIZES = ["xxs", "xs", "sm", "md", "lg"];
4157
4157
  var V = (path) => `var(--cmp-button-${path})`;
4158
4158
  function buttonPreset(color, outline) {
4159
4159
  switch (color) {
@@ -4204,6 +4204,25 @@ function buttonPreset(color, outline) {
4204
4204
  }
4205
4205
  }
4206
4206
  var BUTTON_SIZE_CONFIG = {
4207
+ /**
4208
+ * 본문 텍스트 사이에 끼워 서는 버튼 — 높이가 본문 줄 높이(12px/20px)와 같아 줄이 벌어지지 않는다.
4209
+ * 버튼 xxs 컴포넌트 토큰(--cmp-button-xxs-*)이 아직 없어 공용 토큰으로 둔다. 디자인팀이 내면 바꾼다.
4210
+ */
4211
+ xxs: {
4212
+ height: "var(--spacing-sd-20)",
4213
+ paddingX: "var(--spacing-sd-6)",
4214
+ gap: "var(--spacing-sd-4)",
4215
+ iconSize: "var(--cmp-button-xs-icon)",
4216
+ iconOnlyWidth: "var(--spacing-sd-20)",
4217
+ fontSize: 11,
4218
+ fontWeight: 500,
4219
+ radius: "var(--cmp-button-radius-sm)",
4220
+ // 번호 하나·짧은 낱말이 그대로 서야 해서 최소 폭을 두지 않는다
4221
+ minWidth: 0,
4222
+ // 11px 글자의 글꼴 상자(13px)가 안쪽 높이(18px)에 반 픽셀 자리로 놓이고, Pretendard 는 위가 넓어
4223
+ // 한글이 0.8px 위로 쏠린다. 라벨에 위 여백 1px 을 줘 0.5px 내린다 — 글자 크기·높이를 바꾸면 다시 잰다
4224
+ labelOffsetTop: "1px"
4225
+ },
4207
4226
  xs: {
4208
4227
  height: "var(--cmp-button-xs-height)",
4209
4228
  paddingX: "var(--cmp-button-xs-paddingX)",
@@ -4318,7 +4337,14 @@ var SButton = /* @__PURE__ */ react.forwardRef(function SButton2({
4318
4337
  ...props,
4319
4338
  children: [
4320
4339
  iconNode,
4321
- hasLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center justify-center", children: label }),
4340
+ hasLabel && /* @__PURE__ */ jsxRuntime.jsx(
4341
+ "span",
4342
+ {
4343
+ className: "inline-flex items-center justify-center",
4344
+ style: s.labelOffsetTop ? { paddingTop: s.labelOffsetTop } : void 0,
4345
+ children: label
4346
+ }
4347
+ ),
4322
4348
  rightIconNode
4323
4349
  ]
4324
4350
  }