sellmate-design-system-react 9.0.0-beta.25 → 9.0.0-beta.26

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.
@@ -2662,8 +2662,7 @@ export type SCheckboxValue = boolean | unknown[] | null;
2662
2662
  | `fields?` | `SChipFilterGroup[]` | — | 필터 정의 목록. 묶을 것이 없어도 한 그룹으로 감싸 넘긴다 — `[{ fields: [...] }]`. 그룹은 rule로 함께 검증하거나 divider로 갈라 놓을 때 나눈다. |
2663
2663
  | `value?` | `SChipFilterValueMap` | — | 필터 값 맵 |
2664
2664
  | `activeKeys?` | `string[]` | — | 노출 필터 key 목록. 지정하면 제어 컴포넌트로 동작 — "필터 추가"로 고른 필드를 이 배열에 직접 넣어줘야 칩이 나타난다(onActiveKeysChange에서 받은 keys로 갱신). 지정하지 않으면 fixed·required 필드만 노출된 상태로 시작해 컴포넌트가 내부 상태로 관리하는 비제어 방식으로 동작한다. fixed·required 필드는 이 배열에 없어도 항상 노출된다 |
2665
- | `label?` | `string` | `'검색 필터'` | 좌측 태그 텍스트 |
2666
- | `showLabel?` | `boolean` | `false` | 좌측 태그(label)·구분선 표시 여부 |
2665
+ | `label?` | `string` | — | 좌측 태그 텍스트. 지정하면 태그와 그 뒤 구분선이 함께 노출되고, 지정하지 않으면(undefined) 둘 다 생략된다 |
2667
2666
  | `showReset?` | `boolean` | `true` | 검색 초기화 링크 표시 여부 |
2668
2667
  | `disabled?` | `boolean` | `false` | 바 비활성 상태 |
2669
2668
  | `className?` | `string` | — | |
@@ -2675,7 +2674,7 @@ export type SCheckboxValue = boolean | unknown[] | null;
2675
2674
  |-------|------|-------------|
2676
2675
  | `onValueChange` | `(value: SChipFilterValueMap) => void` | 전체 값 변경 — 편집 중인 값이 바뀔 때마다(선택할 때마다) 호출된다. 실제 검색 실행은 onSearch를 쓴다 |
2677
2676
  | `onFilterChange` | `(detail: SChipFilterChangeDetail) => void` | 개별 필터 값 변경 |
2678
- | `onSearch` | `(value: SChipFilterValueMap) => void` | 실제 검색을 실행할 시점 — 편집 팝오버의 "검색" 버튼을 누르거나 팝오버가 닫힐 때(바깥 클릭·Esc·다른 칩으로 전환 포함) 그 시점의 전체 값 맵과 함께 호출된다. 팝오버가 없는 필드(인라인 date 프리셋·custom, clearable ×, 검색 초기화)는 값이 바뀌는 즉시 호출된다. keyword 필터에서 Enter 로 키워드를 추가할 때도 그 즉시 호출된다 — 팝오버는 열린 채라 키워드를 이어서 더 넣을 수 있고, 넣을 때마다 조회가 갱신된다. dirty 체크가 기본 적용되어 있어 — 마지막으로 실제 검색이 실행된 값 맵과 비교해 하나라도 달라진 게 없으면(예: 팝오버를 열었다 아무것도 안 바꾸고 닫는 경우) 호출되지 않는다. fields를 그룹으로 넘겼다면 rule을 만족하지 못한 그룹이 있는 동안엔 onSearch가 호출되지 않는다 — 해당 그룹의 경고 툴팁은 이 시점과 무관하게 값이 비어 있는 동안 항상 실시간으로 떠 있다(별도로 validate()를 호출할 필요 없음) |
2677
+ | `onSearch` | `(value: SChipFilterValueMap) => void` | 실제 검색을 실행할 시점 — 편집 팝오버의 "검색" 버튼을 누르거나 팝오버가 닫힐 때(바깥 클릭·Esc·다른 칩으로 전환 포함) 그 시점의 전체 값 맵과 함께 호출된다. 팝오버가 없는 필드(인라인 date 프리셋·custom, clearable ×, 검색 초기화)는 값이 바뀌는 즉시 호출된다. keyword 필터에서 Enter 로 키워드를 추가할 때도 그 즉시 호출된다 — 팝오버는 열린 채라 키워드를 이어서 더 넣을 수 있고, 넣을 때마다 조회가 갱신된다. dirty 체크가 기본 적용되어 있어 — 마지막으로 실제 검색이 실행된 값 맵과 비교해 하나라도 달라진 게 없으면(예: 팝오버를 열었다 아무것도 안 바꾸고 닫는 경우) 호출되지 않는다. fields를 그룹으로 넘겼다면 rule을 만족하지 못한 그룹이 있는 동안엔 onSearch가 호출되지 않는다 — 해당 그룹의 경고 툴팁은 이 시점과 무관하게 값이 비어 있는 동안 항상 실시간으로 떠 있다(별도로 validate()를 호출할 필요 없음). required 필드가 비어 있는 동안에도 마찬가지로 호출되지 않는다 — 정상 설정(내장 기본값 또는 defaultValue)이라면 원래 비워지지 않지만, defaultValue 없는 select-multi·keyword·custom에 required만 준 오설정에서는 "검색 초기화"·clearable이 값을 null로 비울 수 있어 이때의 안전장치다 |
2679
2678
  | `onActiveKeysChange` | `(keys: string[]) => void` | 노출 필터 key 변경(칩 추가·제거) — 비제어 방식에서도 참고용으로 호출된다. activeKeys를 직접 제어할 때는 이 값을 그대로 activeKeys에 반영해야 한다 |
2680
2679
  | `onReset` | `() => void` | "검색 초기화" 클릭 — 모든 필드가 기본값(또는 null)으로 리셋된 뒤 호출된다 |
2681
2680
  | `onAddFilter` | `(key: string) => void` | "필터 추가" 목록에서 항목을 골랐을 때 — activeKeys를 직접 제어 중이면 이 콜백에서 (또는 onActiveKeysChange에서) key를 activeKeys에 추가해줘야 칩이 실제로 나타난다. activeKeys를 넘기지 않았다면(비제어) 별도 처리 없이도 컴포넌트가 알아서 칩을 노출한다 |
@@ -2686,7 +2685,7 @@ export type SCheckboxValue = boolean | unknown[] | null;
2686
2685
  |--------|------|-------------|
2687
2686
  | `open` | `(key: string) => void` | 특정 필터 편집 팝오버를 엽니다. |
2688
2687
  | `reset` | `() => void` | 모든 필터 값을 초기화합니다. |
2689
- | `validate` | `() => boolean` | 현재 값 기준으로 각 그룹의 rule을 만족하는지 반환합니다. rule을 준 그룹이 없으면 항상 true. 경고 툴팁은 이 호출과 무관하게 rule 위반 상태인 동안 항상 실시간으로 떠 있으므로, 이 메서드는 그 상태를 그대로 읽어오는 용도다(예: 검색 버튼을 눌러도 되는지 사전 확인) |
2688
+ | `validate` | `() => boolean` | 현재 값 기준으로 각 그룹의 rule을 만족하는지, 그리고 required 필드가 모두 비어 있지 않은지 반환합니다. rule을 준 그룹이 없고 required 필드도 모두 값이 있으면 항상 true. 경고 툴팁은 이 호출과 무관하게 rule 위반 상태인 동안 항상 실시간으로 떠 있으므로, 이 메서드는 그 상태를 그대로 읽어오는 용도다(예: 검색 버튼을 눌러도 되는지 사전 확인) |
2690
2689
 
2691
2690
  ## Types
2692
2691
 
@@ -2703,7 +2702,8 @@ export interface SChipFilterGroup {
2703
2702
  /** rule을 만족하지 않을 때 그룹 중앙에 띄울 툴팁 메시지. 지정 안 하면 rule 종류에 따른 기본 문구를 쓴다 */
2704
2703
  tooltipMessage?: string;
2705
2704
  /** 이 그룹 앞에 구분선을 넣을지. 검증(rule)과 구분선은 별개라 — 묶어서 검증만 하고 싶으면
2706
- * 주지 않는다. 첫 그룹에는 앞에 가를 것이 없으므로 무시된다(showLabel의 구분선이 이미 있다) */
2705
+ * 주지 않는다. 첫 그룹에는 앞에 가를 것이 없으므로 무시된다(label을 지정했다면 그 구분선이
2706
+ * 이미 있다) */
2707
2707
  divider?: boolean;
2708
2708
  }
2709
2709
  ```
@@ -6435,6 +6435,7 @@ export const SYSTEM_ACTION_BUTTON_COLORS = ['light', 'dark', 'darker'] as const;
6435
6435
  | Prop | Type | Default | Description |
6436
6436
  |------|------|---------|-------------|
6437
6437
  | `columns?` | `STableColumn[]` | `[]` | |
6438
+ | `headerGroups?` | `STableHeaderGroup[]` | — | 상위 그룹 헤더. 지정하면 기존 컬럼 헤더가 두 번째 행에 렌더링된다. |
6438
6439
  | `rows?` | `SRow[]` | `[]` | |
6439
6440
  | `rowKey?` | `string` | `'id'` | 행 식별 필드 |
6440
6441
  | `selectable?` | `boolean` | `false` | 행 선택 체크박스 |
@@ -6504,6 +6505,21 @@ export type STableColumn = STableColumnBase &
6504
6505
  );
6505
6506
  ```
6506
6507
 
6508
+ ### STableHeaderGroup
6509
+
6510
+ ```ts
6511
+ /** 2단 헤더의 상위 셀. columnNames는 visible 컬럼 기준으로 연속되어야 한다. */
6512
+ export interface STableHeaderGroup {
6513
+ label?: ReactNode;
6514
+ columnNames: string[];
6515
+ rowSpan?: 1 | 2;
6516
+ align?: 'left' | 'center' | 'right';
6517
+ className?: string;
6518
+ style?: CSSProperties;
6519
+ render?: () => ReactNode;
6520
+ }
6521
+ ```
6522
+
6507
6523
  ### SRow
6508
6524
 
6509
6525
  ```ts
package/dist/styles.css CHANGED
@@ -2098,6 +2098,10 @@
2098
2098
  border-bottom-style: var(--tw-border-style);
2099
2099
  border-bottom-width: 1px;
2100
2100
  }
2101
+ .border-b-0 {
2102
+ border-bottom-style: var(--tw-border-style);
2103
+ border-bottom-width: 0px;
2104
+ }
2101
2105
  .border-l {
2102
2106
  border-left-style: var(--tw-border-style);
2103
2107
  border-left-width: 1px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sellmate-design-system-react",
3
- "version": "9.0.0-beta.25",
3
+ "version": "9.0.0-beta.26",
4
4
  "description": "Sellmate Design System — React (TypeScript + Tailwind v4) port",
5
5
  "license": "UNLICENSED",
6
6
  "keywords": [