sellmate-design-system-react 9.0.0-beta.39 → 9.0.0-beta.40

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
@@ -26,11 +26,11 @@
26
26
 
27
27
  | 분류 | 컴포넌트 |
28
28
  | --- | --- |
29
- | **버튼·링크** | `SButton` `SGhostButton` `SDropdownButton` `SSystemActionButton` `STextLink` `SSwitch` `SToggle` |
29
+ | **버튼·링크** | `SButton` `SGhostButton` `SDropdownButton` `STextLink` `SSwitch` `SToggle` |
30
30
  | **입력 (폼)** | `SForm` `SField` `SInput` `SSearchInput` `SNumberInput` `STextarea` `SEditor` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SRadioCard` `SRadioCardGroup` `SChip` `SChipInput` `SBarcodeInput` `SFilePicker` |
31
31
  | **날짜·시간** | `SCalendar` `SCalendarBoard`(한 달치 일정 판) `SDatePicker` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` |
32
32
  | **표·목록** | `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SListItem` `SExpansionList` `SDraggableList` `SDraggableItem` `STree` |
33
- | **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
33
+ | **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SSystemActionButton`(GNB system 패널에 한 줄씩 쌓는 액션 행 — 버튼 고르기는 §3-5) `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
34
34
  | **내비게이션** | `STabs` `SPagination` `SStepper` |
35
35
  | **표시·상태** | `STag` `SBadge` `SIcon` `SImage` `SCallout` `SGuide` |
36
36
  | **진행·로딩** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
@@ -0,0 +1,9 @@
1
+ /**
2
+ * "한눈에 보기" 그리드.
3
+ *
4
+ * 이 파일은 **나열 규칙만** 갖는다 — 분류·순서는 `categories.ts`(SSOT)가, 미리보기는
5
+ * `gallery-previews.tsx` 가, 링크 대상은 스토리의 `title` 이 정한다. 새 컴포넌트는
6
+ * 여기를 고치지 않고 그 셋만 채우면 자리를 잡는다.
7
+ */
8
+ import type { ReactNode } from 'react';
9
+ export default function Gallery(): ReactNode;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * "한눈에 보기" 페이지가 쓰는 컴포넌트별 미리보기.
3
+ *
4
+ * 이 저장소에서 **손으로 유지하는 유일한 문서 자산**이다. 그래서 두 가지를 지킨다.
5
+ *
6
+ * 1. **설명을 쓰지 않는다.** 카드에는 미리보기와 이름과 링크만 있다. "언제 쓰나" 는
7
+ * AGENTS.md §3(Guide/컴포넌트 선택)이, Props 는 각 컴포넌트 Docs 탭이 갖는다.
8
+ * 여기에 한 줄 설명을 붙이는 순간 그 둘과 어긋나기 시작한다.
9
+ * 2. **빠지면 CI 가 잡는다.** 스토리가 있는 컴포넌트는 전부 여기 키가 있어야 한다 —
10
+ * `npm run check:categories` 가 강제한다.
11
+ *
12
+ * 미리보기 상자는 `pointer-events-none` 이라 눌리지 않는다(Gallery.tsx). 갤러리는 보는
13
+ * 자리이고 만지는 자리는 각 컴포넌트의 Docs 탭이다 — 덕분에 오버레이가 열리거나 포커스를
14
+ * 뺏는 일 없이 수십 개를 한 화면에 살아 있는 채로 둘 수 있다.
15
+ *
16
+ * 화면 골격(앱 셸·모달·드로어)처럼 카드에 담기지 않는 것은 {@link note} 로 둔다.
17
+ * 억지로 축소해 알아볼 수 없는 그림을 넣느니 무엇인지 한 줄로 적는 편이 낫다.
18
+ */
19
+ import type { ReactNode } from 'react';
20
+ /**
21
+ * 컴포넌트 이름 → 미리보기.
22
+ * 키는 스토리 파일이 있는 컴포넌트와 정확히 같아야 한다 (check:categories).
23
+ */
24
+ export declare const GALLERY_PREVIEWS: Record<string, ReactNode>;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Storybook 의 Guide 문서 페이지가 쓰는 마크다운 슬라이서.
3
+ *
4
+ * Guide 페이지는 **자기 원문을 갖지 않는다.** AGENTS.md·README.md 를 `?raw` 로 읽어
5
+ * 필요한 `## ` 섹션만 잘라 {@link https://storybook.js.org/docs/writing-docs/doc-blocks Markdown 블록}에 넘긴다.
6
+ * 문서를 Storybook 에 복사해 두면 AGENTS.md 가 바뀔 때마다 조용히 낡고,
7
+ * 이 저장소는 이미 한 변경이 네 곳(README·stories·playground·AGENTS.md)에 흩어져 있다 —
8
+ * 다섯 번째 사본을 만들지 않는 것이 이 파일의 존재 이유다.
9
+ *
10
+ * @example
11
+ * import agents from '../../AGENTS.md?raw';
12
+ * <Markdown>{mdSections(agents, '2.')}</Markdown>
13
+ */
14
+ /**
15
+ * `## ` 섹션을 제목 접두어로 잘라 이어 붙인다. 접두어는 번호(`'2.'`)든 제목(`'설치'`)이든 된다.
16
+ *
17
+ * 넘긴 순서가 아니라 **원문 순서**로 이어 붙인다 — 문서 안의 "위에서 말한" 류의 참조가
18
+ * 순서를 뒤집으면 거짓이 되기 때문이다.
19
+ *
20
+ * 찾지 못한 접두어가 하나라도 있으면 던진다. 조용히 빈 페이지가 되면
21
+ * AGENTS.md 의 절 번호가 바뀐 것을 아무도 모른 채 배포된다.
22
+ */
23
+ export declare function mdSections(md: string, ...prefixes: string[]): string;
24
+ /**
25
+ * 원문의 저장소 상대 링크(`./README.md`)를 Storybook 문서 경로로 바꾼다.
26
+ *
27
+ * 원문은 npm 패키지에 그대로 실려 소비 앱의 `node_modules` 에서 읽히는 것이 1차 용도라
28
+ * 링크가 파일 경로다. Storybook 안에서는 그 경로가 404 이므로 여기서만 갈아 끼운다 —
29
+ * 원문은 손대지 않는다.
30
+ *
31
+ * 표에 없는 링크는 그대로 둔다.
32
+ */
33
+ export declare function relinkToDocs(md: string): string;
34
+ /** {@link mdSections} + {@link relinkToDocs} — Guide 페이지가 쓰는 기본 조합 */
35
+ export declare function guideSections(md: string, ...prefixes: string[]): string;
@@ -34,11 +34,11 @@
34
34
 
35
35
  | 분류 | 컴포넌트 |
36
36
  | --- | --- |
37
- | **버튼·링크** | `SButton` `SGhostButton` `SDropdownButton` `SSystemActionButton` `STextLink` `SSwitch` `SToggle` |
37
+ | **버튼·링크** | `SButton` `SGhostButton` `SDropdownButton` `STextLink` `SSwitch` `SToggle` |
38
38
  | **입력 (폼)** | `SForm` `SField` `SInput` `SSearchInput` `SNumberInput` `STextarea` `SEditor` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SRadioCard` `SRadioCardGroup` `SChip` `SChipInput` `SBarcodeInput` `SFilePicker` |
39
39
  | **날짜·시간** | `SCalendar` `SCalendarBoard`(한 달치 일정 판) `SDatePicker` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` |
40
40
  | **표·목록** | `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SListItem` `SExpansionList` `SDraggableList` `SDraggableItem` `STree` |
41
- | **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
41
+ | **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SSystemActionButton`(GNB system 패널에 한 줄씩 쌓는 액션 행 — 버튼 고르기는 §3-5) `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
42
42
  | **내비게이션** | `STabs` `SPagination` `SStepper` |
43
43
  | **표시·상태** | `STag` `SBadge` `SIcon` `SImage` `SCallout` `SGuide` |
44
44
  | **진행·로딩** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
package/dist/llms.txt CHANGED
@@ -35,11 +35,11 @@
35
35
 
36
36
  | 분류 | 컴포넌트 |
37
37
  | --- | --- |
38
- | **버튼·링크** | `SButton` `SGhostButton` `SDropdownButton` `SSystemActionButton` `STextLink` `SSwitch` `SToggle` |
38
+ | **버튼·링크** | `SButton` `SGhostButton` `SDropdownButton` `STextLink` `SSwitch` `SToggle` |
39
39
  | **입력 (폼)** | `SForm` `SField` `SInput` `SSearchInput` `SNumberInput` `STextarea` `SEditor` `SSelect` `SCheckbox` `SRadio` `SRadioGroup` `SRadioButton` `SRadioCard` `SRadioCardGroup` `SChip` `SChipInput` `SBarcodeInput` `SFilePicker` |
40
40
  | **날짜·시간** | `SCalendar` `SCalendarBoard`(한 달치 일정 판) `SDatePicker` `SDatePickerYearListbox` `SDatePickerMonthListbox` `SDateRangePicker` `STimePicker` `STimeRangePicker` |
41
41
  | **표·목록** | `STable` `STableBar` `SChipFilter` `SKeyValueTable` `SList` `SListItem` `SExpansionList` `SDraggableList` `SDraggableItem` `STree` |
42
- | **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
42
+ | **레이아웃** | `SLayout` `SGnb` `SGnbSystem` `SSystemActionButton`(GNB system 패널에 한 줄씩 쌓는 액션 행 — 버튼 고르기는 §3-5) `SAccountListBox`(계정 행을 눌러 뜨는 계정 패널) `SPage` `SPageHeader`(페이지 제목 영역 — `SLayout` 안에서 `SPage` 앞에 둔다) `SSectionHeaderCard` `SCard` `SDivider` `SSplitter` `SScrollArea` `SExpansionItem` |
43
43
  | **내비게이션** | `STabs` `SPagination` `SStepper` |
44
44
  | **표시·상태** | `STag` `SBadge` `SIcon` `SImage` `SCallout` `SGuide` |
45
45
  | **진행·로딩** | `SLinearProgress` `SCircleProgress` `SLoadingContainer` `SLoadingModal` |
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 컴포넌트 분류의 **SSOT**. playground 사이드바와 Storybook 사이드바가 같은 것을 쓴다.
3
+ * - `.storybook/preview.ts` 의 `storySort.order` 는 여기 `label` 목록·순서와 같아야 한다
4
+ * (Storybook 이 그 배열을 정적으로 읽어 가서 import 로는 못 만든다).
5
+ * - 각 스토리의 `title` 접두어는 그 컴포넌트가 속한 `label` 과 같아야 한다 —
6
+ * `npm run check:categories` 가 강제한다.
7
+ * - 카테고리 내부: 알파벳 순.
8
+ * 여기에 없는 컴포넌트는 playground 에서 자동으로 "Other" 그룹으로 묶인다.
9
+ * (SField 컴포넌트는 Storybook 스토리가 없지만 폼 래퍼이므로 SField 그룹에 포함)
10
+ */
11
+ export declare const COMPONENT_CATEGORIES: {
12
+ label: string;
13
+ components: string[];
14
+ }[];
15
+ export type CategoryGroup<T> = {
16
+ label: string;
17
+ items: T[];
18
+ };
19
+ export declare function groupByCategory<T>(items: T[], getName: (item: T) => string): CategoryGroup<T>[];
package/dist/styles.css CHANGED
@@ -888,6 +888,9 @@
888
888
  .ml-auto {
889
889
  margin-left: auto;
890
890
  }
891
+ .ml-sd-8 {
892
+ margin-left: var(--spacing-sd-8);
893
+ }
891
894
  .box-border {
892
895
  box-sizing: border-box;
893
896
  }
@@ -1025,9 +1028,21 @@
1025
1028
  .h-\[80vh\] {
1026
1029
  height: 80vh;
1027
1030
  }
1031
+ .h-\[96px\] {
1032
+ height: 96px;
1033
+ }
1034
+ .h-\[104px\] {
1035
+ height: 104px;
1036
+ }
1037
+ .h-\[124px\] {
1038
+ height: 124px;
1039
+ }
1028
1040
  .h-\[140px\] {
1029
1041
  height: 140px;
1030
1042
  }
1043
+ .h-\[180px\] {
1044
+ height: 180px;
1045
+ }
1031
1046
  .h-\[200px\] {
1032
1047
  height: 200px;
1033
1048
  }
@@ -1265,9 +1280,15 @@
1265
1280
  .w-\[176px\] {
1266
1281
  width: 176px;
1267
1282
  }
1283
+ .w-\[180px\] {
1284
+ width: 180px;
1285
+ }
1268
1286
  .w-\[200px\] {
1269
1287
  width: 200px;
1270
1288
  }
1289
+ .w-\[214px\] {
1290
+ width: 214px;
1291
+ }
1271
1292
  .w-\[220px\] {
1272
1293
  width: 220px;
1273
1294
  }
@@ -1298,9 +1319,15 @@
1298
1319
  .w-\[528px\] {
1299
1320
  width: 528px;
1300
1321
  }
1322
+ .w-\[560px\] {
1323
+ width: 560px;
1324
+ }
1301
1325
  .w-\[600px\] {
1302
1326
  width: 600px;
1303
1327
  }
1328
+ .w-\[640px\] {
1329
+ width: 640px;
1330
+ }
1304
1331
  .w-\[680px\] {
1305
1332
  width: 680px;
1306
1333
  }
@@ -1508,6 +1535,30 @@
1508
1535
  --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
1509
1536
  translate: var(--tw-translate-x) var(--tw-translate-y);
1510
1537
  }
1538
+ .scale-\[0\.3\] {
1539
+ scale: 0.3;
1540
+ }
1541
+ .scale-\[0\.4\] {
1542
+ scale: 0.4;
1543
+ }
1544
+ .scale-\[0\.5\] {
1545
+ scale: 0.5;
1546
+ }
1547
+ .scale-\[0\.6\] {
1548
+ scale: 0.6;
1549
+ }
1550
+ .scale-\[0\.22\] {
1551
+ scale: 0.22;
1552
+ }
1553
+ .scale-\[0\.42\] {
1554
+ scale: 0.42;
1555
+ }
1556
+ .scale-\[0\.62\] {
1557
+ scale: 0.62;
1558
+ }
1559
+ .scale-\[0\.72\] {
1560
+ scale: 0.72;
1561
+ }
1511
1562
  .-rotate-90 {
1512
1563
  rotate: calc(90deg * -1);
1513
1564
  }
@@ -1568,6 +1619,9 @@
1568
1619
  .resize-y {
1569
1620
  resize: vertical;
1570
1621
  }
1622
+ .scroll-mt-sd-24 {
1623
+ scroll-margin-top: var(--spacing-sd-24);
1624
+ }
1571
1625
  .\[scrollbar-width\:none\] {
1572
1626
  scrollbar-width: none;
1573
1627
  }
@@ -1589,6 +1643,9 @@
1589
1643
  .grid-cols-\[repeat\(7\,var\(--cmp-datepicker-calendar-day-width\)\)\] {
1590
1644
  grid-template-columns: repeat(7,var(--cmp-datepicker-calendar-day-width));
1591
1645
  }
1646
+ .grid-cols-\[repeat\(auto-fill\,minmax\(200px\,1fr\)\)\] {
1647
+ grid-template-columns: repeat(auto-fill,minmax(200px,1fr));
1648
+ }
1592
1649
  .grid-rows-\[0fr\] {
1593
1650
  grid-template-rows: 0fr;
1594
1651
  }
@@ -1937,6 +1994,9 @@
1937
1994
  .gap-sd-24 {
1938
1995
  gap: var(--spacing-sd-24);
1939
1996
  }
1997
+ .gap-sd-32 {
1998
+ gap: var(--spacing-sd-32);
1999
+ }
1940
2000
  .space-y-4 {
1941
2001
  :where(& > :not(:last-child)) {
1942
2002
  --tw-space-y-reverse: 0;
@@ -3339,6 +3399,9 @@
3339
3399
  .text-\[14px\] {
3340
3400
  font-size: 14px;
3341
3401
  }
3402
+ .text-\[15px\] {
3403
+ font-size: 15px;
3404
+ }
3342
3405
  .text-\[16px\] {
3343
3406
  font-size: 16px;
3344
3407
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sellmate-design-system-react",
3
- "version": "9.0.0-beta.39",
3
+ "version": "9.0.0-beta.40",
4
4
  "description": "Sellmate Design System — React (TypeScript + Tailwind v4) port",
5
5
  "license": "UNLICENSED",
6
6
  "keywords": [
@@ -71,6 +71,7 @@
71
71
  "check:docs-refs": "node scripts/check-docs-refs.mjs",
72
72
  "check:routing": "node scripts/check-routing.mjs",
73
73
  "check:cn-scales": "node scripts/check-cn-scales.mjs",
74
+ "check:categories": "node scripts/check-story-categories.mjs",
74
75
  "version": "node scripts/version.mjs --prerelease beta --tag",
75
76
  "version:dry": "node scripts/version.mjs --prerelease beta --dry-run",
76
77
  "version:stable": "node scripts/version.mjs --tag",