sellmate-design-system-react 9.0.0-beta.18 → 9.0.0-beta.19

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.
@@ -2868,7 +2868,6 @@ export interface SChipFilterDatePreset {
2868
2868
  - [SIcon](../SIcon)
2869
2869
  - [SRadio](../SRadio)
2870
2870
  - [SRadioButton](../SRadioButton)
2871
- - [SSelect](../SSelect)
2872
2871
  - [STag](../STag)
2873
2872
  - [STextLink](../STextLink)
2874
2873
  - [STooltip](../STooltip)
@@ -3318,6 +3317,7 @@ export type SDateRangePickerSize = SFieldSize;
3318
3317
  | `supportingText?` | `SDraggableItemSlot` | — | 제목을 보조하는 텍스트 |
3319
3318
  | `supportingTextPosition?` | `SDraggableItemSupportingTextPosition` | `'right'` | 보조 텍스트 위치 |
3320
3319
  | `trailing?` | `SDraggableItemSlot` | — | 타이틀 뒤에 표시할 태그/콘텐츠 |
3320
+ | `depth?` | `number` | `1` | 중첩 단계. `SListItem`·`SExpansionItem` 과 같은 들여쓰기 간격을 사용한다 |
3321
3321
  | `accentStripe?` | `boolean` | `false` | 아이템 왼쪽 accent stripe 표시 여부 |
3322
3322
  | `bordered?` | `boolean` | `false` | 외곽 테두리 사용 여부 |
3323
3323
  | `selected?` | `boolean` | `false` | 선택 상태 여부 |
@@ -3411,6 +3411,10 @@ export interface SDraggableItemRenderState {
3411
3411
  | `selectedKey?` | `string` | — | 외부에서 제어하는 selected 아이템 key |
3412
3412
  | `defaultSelectedKey?` | `string` | — | 초기 selected 아이템 key |
3413
3413
  | `getDisabled?` | `(item: T, index: number) => boolean` | — | disabled 아이템은 선택 및 드래그에서 제외 |
3414
+ | `getDepth?` | `(item: T, index: number) => number` | — | 아이템의 중첩 단계. 기본값은 1 |
3415
+ | `setDepth?` | `(item: T, depth: number) => T` | — | depth 변경이 필요한 드롭에서 다음 아이템을 만드는 함수 |
3416
+ | `getCanHaveChildren?` | `(item: T, index: number) => boolean` | — | 하위 depth 를 가질 수 있는 아이템인지 판정 |
3417
+ | `maxDepth?` | `number` | `3` | 허용할 최대 depth |
3414
3418
  | `listId?` | `string` | — | Provider 안에서 사용할 리스트 식별자 |
3415
3419
  | `group?` | `string` | — | 같은 group 값을 가진 리스트끼리 드래그 이벤트를 공유 |
3416
3420
 
@@ -3450,6 +3454,7 @@ export interface SDraggableGroupMoveEvent {
3450
3454
  export interface SDraggableListRenderState {
3451
3455
  onDragHandleMouseDown: (event: MouseEvent<HTMLDivElement>) => void;
3452
3456
  selected: boolean;
3457
+ depth: number;
3453
3458
  }
3454
3459
  ```
3455
3460
 
package/dist/styles.css CHANGED
@@ -3440,6 +3440,16 @@
3440
3440
  outline-style: var(--tw-outline-style);
3441
3441
  outline-width: 1px;
3442
3442
  }
3443
+ .outline-2 {
3444
+ outline-style: var(--tw-outline-style);
3445
+ outline-width: 2px;
3446
+ }
3447
+ .outline-offset-\[-2px\] {
3448
+ outline-offset: -2px;
3449
+ }
3450
+ .outline-\(--sys-color-border-accent\) {
3451
+ outline-color: var(--sys-color-border-accent);
3452
+ }
3443
3453
  .blur {
3444
3454
  --tw-blur: blur(8px);
3445
3455
  filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
@@ -74,16 +74,25 @@ export function literalString(node) {
74
74
  }
75
75
 
76
76
  /**
77
- * STableColumn 자리인지 — `name` · `label` 두 개만 보고 판정한다.
77
+ * STableColumn 자리인지 — `asColumn` 보다 넓게, 값을 그리지 않는 스페이서 열까지 본다.
78
78
  *
79
- * `asColumn` 과 달리 `field` 를 요구하지 않는다. 남은 폭을 먹는 `autoWidth` 스페이서 열은
80
- * 값을 그리지 않아 `field` 가 없고, 폭 규칙은 바로 그 열까지 봐야 하기 때문이다.
79
+ * `name` · `label` 만으로는 판정하지 않는다. 소비 앱의 검색 필터 필드·상세 모달 키-값 필드가
80
+ * 정확히 같은 모양(`{ name, label, type, ... }`)이라, 그것만 보면 잡히는 것의 대부분이 표와
81
+ * 무관한 객체가 된다 — 실측에서 265건 중 261건이 오탐이었다.
82
+ *
83
+ * 그래서 `STableColumn` 타입의 판별 유니온을 그대로 옮긴다 — 값을 그리는 열은 `field` 를,
84
+ * 값을 그리지 않는 스페이서 열은 `autoWidth` 를 반드시 갖는다. 둘 다 없으면 컬럼이 아니다.
85
+ * 폭 규칙이 봐야 하는 스페이서 열은 `autoWidth` 쪽으로 그대로 들어온다.
86
+ *
87
+ * 놓치는 것: `{ ...base, name, label }` 처럼 `field` 가 스프레드로 들어오는 컬럼. 정적으로는
88
+ * 검색 필터 필드와 구분되지 않아 보고하지 않는다 (`asColumn` 을 쓰는 다른 두 규칙과 같은 한계).
81
89
  * @returns {{ nameProp, labelProp, columnName: string | undefined } | null}
82
90
  */
83
91
  export function asColumnShape(node) {
84
92
  const nameProp = prop(node, "name");
85
93
  const labelProp = prop(node, "label");
86
94
  if (!nameProp || !labelProp) return null;
95
+ if (!prop(node, "field") && !prop(node, "autoWidth")) return null;
87
96
  // name 이 문자열 리터럴이 아니면 컬럼 정의로 단정하지 않는다 (일반 객체 오탐 방지)
88
97
  const columnName = literalString(nameProp);
89
98
  if (columnName === undefined) return null;
@@ -12,8 +12,9 @@
12
12
  * `autoWidth` 는 남은 폭을 흡수하는 스페이서 열 하나에 쓰는 것이라, 값을 그리는 열
13
13
  * (`render` · `format` 이 붙은 열)에 주면 폭이 다른 열에 좌우돼 화면마다 달라진다.
14
14
  *
15
- * 대상은 `name`(문자열 리터럴) · `label` 을 가진 객체 리터럴이다 — `field` 는 요구하지 않는다.
16
- * 스페이서 열에는 `field` 가 없기 때문이다.
15
+ * 대상은 `name`(문자열 리터럴) · `label` 에 더해 `field` 또는 `autoWidth` 를 가진 객체 리터럴이다.
16
+ * `STableColumn` 타입이 값을 그리는 열에는 `field` 를, 스페이서 열에는 `autoWidth` 를 요구하므로
17
+ * 검사 범위는 그대로이면서, 같은 모양(`name` + `label`)인 검색 필터 필드가 걸리지 않는다.
17
18
  *
18
19
  * AGENTS.md §3-4.
19
20
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sellmate-design-system-react",
3
- "version": "9.0.0-beta.18",
3
+ "version": "9.0.0-beta.19",
4
4
  "description": "Sellmate Design System — React (TypeScript + Tailwind v4) port",
5
5
  "license": "UNLICENSED",
6
6
  "keywords": [