sellmate-design-system-react 9.0.0-beta.62 → 9.0.0-beta.63
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 +483 -129
- package/dist/components/SPage/README.md +19 -0
- package/dist/components/SPage/SPage.d.ts +11 -2
- package/dist/components/SPage/index.d.ts +1 -1
- package/dist/components/SPage/page.config.d.ts +8 -0
- package/dist/docs/RecipeGallery.d.ts +13 -0
- package/dist/index.cjs +9 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/llms-full.txt +502 -129
- package/dist/llms.txt +483 -129
- package/dist/recipes/AppShell.d.ts +21 -0
- package/dist/recipes/ExcelFilePopupPage.d.ts +5 -0
- package/dist/recipes/LoginPage.d.ts +6 -0
- package/dist/recipes/ProductCreatePage.d.ts +1 -0
- package/dist/recipes/ProductCreateSectionsPage.d.ts +5 -0
- package/dist/recipes/ProductDetailInlineEditPage.d.ts +9 -0
- package/dist/recipes/ProductDetailPage.d.ts +1 -0
- package/dist/recipes/ProductListChipFilterPage.d.ts +1 -0
- package/dist/recipes/ProductListPage.d.ts +1 -0
- package/dist/recipes/TransferOrderPopupPage.d.ts +2 -0
- package/dist/recipes/api.d.ts +91 -0
- package/dist/recipes/recipe-story.d.ts +33 -0
- package/dist/recipes/router.d.ts +9 -0
- package/dist/styles.css +15 -0
- package/package.json +3 -1
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
|------|------|---------|-------------|
|
|
29
29
|
| `background?` | `SPageBackground` | `'frame'` | 페이지 배경 표면. frame=흰 콘텐츠 면, neutral=옅은 회색 면, screen=앱 바탕. 스크롤바 처리도 여기 묶여 있다 — 셋 다 구분선+트랙 배경이고, 트랙 색만 neutral 에서 흰색이 된다. |
|
|
30
30
|
| `scrollEndSpacing?` | `boolean` | `false` | 스크롤 끝 여백. 마지막 항목이 창 하단에 붙어 "여기서 끝"이 안 읽히는 것을 막는다. **기본은 꺼져 있다.** 페이지 스크롤 자체가 예외이기 때문이다 — 대부분의 화면은 본문이 창을 꽉 채우고 스크롤은 각 영역 안에서 일어난다. 여백을 조건 없이 붙이면 내용이 화면에 거의 딱 맞는 페이지까지 그 여백 때문에 스크롤되게 만든다. 페이지가 실제로 스크롤되는 화면(`contentHeight="auto"` + 내용이 창보다 김)에서만 켠다. 페이지네이션처럼 끝을 알려주는 것이 이미 있으면 켜지 않는다. |
|
|
31
|
+
| `padding?` | `SPagePadding` | `'default'` | 본문 안쪽 여백. 기본은 `default` — `--cmp-pageBody-padding-default` 를 사방에 넣는다. `none` 은 필터 바처럼 **가장자리까지 차는 블록이 맨 위에 서는** 화면용이다. 패딩을 끄면 그 아래 블록이 `p-[var(--cmp-pageBody-padding-default)]` 로 같은 토큰의 여백을 직접 잡는다 — `p-sd-*` 로 적으면 토큰이 바뀌어도 따라가지 않는다. 사방 패딩만 끄고 `scrollEndSpacing` 은 그대로다. (`SPopup`·`SSectionHeaderCard` 의 `padding="none"` 과 같은 관용구) |
|
|
31
32
|
| `overlayScrollbar?` | `boolean` | `false` | true면 네이티브 스크롤바를 숨기고 SPage 위에 오버레이 스크롤바를 얹는다. 스크롤바가 레이아웃 폭을 차지하지 않아 내부 콘텐츠 폭이 줄어들지 않는다. |
|
|
32
33
|
| `contentHeight?` | `SPageContentHeight` | `'auto'` | 본문 높이 모드. 기본은 `auto` — 콘텐츠가 흐르고 넘치면 페이지가 스크롤한다. `fill` 은 본문이 남은 높이를 정확히 채우고 페이지는 스크롤하지 않는다. 표가 자기 안에서 스크롤하고 페이지네이션이 하단에 고정되는 목록 화면용이다. 본문 루트에 `h-full` 이 먹으므로 `<div className="flex h-full min-h-0 flex-col">` + `<STable className="min-h-0 flex-1" />` 구성이 성립한다. `fill` 에서는 페이지가 스크롤하지 않으므로 `scrollEndSpacing` 이 무시된다. |
|
|
33
34
|
| `contentWidth?` | `SPageContentWidth` | `'full'` | 본문 가로 폭 모드. 기본은 `full` — 창이 넓어지면 본문도 같이 넓어진다(반응형). `fixed`·`fixedCenter` 는 본문을 **레이아웃 최소 폭일 때의 폭**으로 고정한다. 최소 폭 기준으로 그린 시안이 넓은 모니터에서 늘어나 성기어지는 것을 막는 모드다. 남는 폭은 `fixed` 면 오른쪽에, `fixedCenter` 면 좌우로 나뉘어 페이지 배경으로 남는다. 고정 폭은 GNB 폭·접힘을 반영해 저절로 따라오므로 앱이 숫자를 쓸 일은 없다. 창이 최소 폭보다 좁아지면 세 모드가 모두 같다 — 남는 폭이 없어 규칙이 꺼지고, 모자란 몫을 지금까지처럼 이 영역이 가로 스크롤로 삼킨다. 같은 열에 `SPageHeader` 가 있으면 헤더도 같은 폭·정렬을 따른다(제목과 본문의 좌우 끝이 맞는다). `SLayout` 밖에서는 기준이 될 최소 폭이 없으므로 무시된다. |
|
|
@@ -46,6 +47,12 @@ export type SPageHeaderVariant = (typeof PAGE_HEADER_VARIANTS)[number];
|
|
|
46
47
|
export type SPageBackground = (typeof PAGE_BACKGROUNDS)[number];
|
|
47
48
|
```
|
|
48
49
|
|
|
50
|
+
### SPagePadding
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
export type SPagePadding = (typeof PAGE_PADDINGS)[number];
|
|
54
|
+
```
|
|
55
|
+
|
|
49
56
|
### SPageContentHeight
|
|
50
57
|
|
|
51
58
|
```ts
|
|
@@ -82,6 +89,18 @@ export const PAGE_HEADER_VARIANTS = ['plain', 'bar'] as const;
|
|
|
82
89
|
export const PAGE_BACKGROUNDS = ['frame', 'neutral', 'screen'] as const;
|
|
83
90
|
```
|
|
84
91
|
|
|
92
|
+
### PAGE_PADDINGS
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
/**
|
|
96
|
+
* 본문 안쪽 여백 모드.
|
|
97
|
+
* - default: SPage 가 --cmp-pageBody-padding-default 로 사방 패딩을 넣는다
|
|
98
|
+
* - none: 패딩을 끈다. 가장자리까지 차는 블록(필터 바 등)이 맨 위에 서고, 그 아래 블록이
|
|
99
|
+
* 같은 토큰으로 여백을 직접 잡는 화면용. SPopup·SSectionHeaderCard 의 padding="none" 과 같은 관용구.
|
|
100
|
+
*/
|
|
101
|
+
export const PAGE_PADDINGS = ['default', 'none'] as const;
|
|
102
|
+
```
|
|
103
|
+
|
|
85
104
|
### PAGE_CONTENT_HEIGHTS
|
|
86
105
|
|
|
87
106
|
```ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type HTMLAttributes } from 'react';
|
|
2
|
-
import type { SPageBackground, SPageContentHeight, SPageContentWidth } from './page.config';
|
|
2
|
+
import type { SPageBackground, SPageContentHeight, SPageContentWidth, SPagePadding } from './page.config';
|
|
3
3
|
export interface SPageProps extends HTMLAttributes<HTMLElement> {
|
|
4
4
|
/**
|
|
5
5
|
* 페이지 배경 표면. frame=흰 콘텐츠 면, neutral=옅은 회색 면, screen=앱 바탕.
|
|
@@ -17,6 +17,15 @@ export interface SPageProps extends HTMLAttributes<HTMLElement> {
|
|
|
17
17
|
* 페이지네이션처럼 끝을 알려주는 것이 이미 있으면 켜지 않는다.
|
|
18
18
|
*/
|
|
19
19
|
scrollEndSpacing?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 본문 안쪽 여백. 기본은 `default` — `--cmp-pageBody-padding-default` 를 사방에 넣는다.
|
|
22
|
+
*
|
|
23
|
+
* `none` 은 필터 바처럼 **가장자리까지 차는 블록이 맨 위에 서는** 화면용이다. 패딩을 끄면
|
|
24
|
+
* 그 아래 블록이 `p-[var(--cmp-pageBody-padding-default)]` 로 같은 토큰의 여백을 직접 잡는다 —
|
|
25
|
+
* `p-sd-*` 로 적으면 토큰이 바뀌어도 따라가지 않는다. 사방 패딩만 끄고 `scrollEndSpacing` 은
|
|
26
|
+
* 그대로다. (`SPopup`·`SSectionHeaderCard` 의 `padding="none"` 과 같은 관용구)
|
|
27
|
+
*/
|
|
28
|
+
padding?: SPagePadding;
|
|
20
29
|
/**
|
|
21
30
|
* true면 네이티브 스크롤바를 숨기고 SPage 위에 오버레이 스크롤바를 얹는다.
|
|
22
31
|
* 스크롤바가 레이아웃 폭을 차지하지 않아 내부 콘텐츠 폭이 줄어들지 않는다.
|
|
@@ -53,7 +62,7 @@ export interface SPageProps extends HTMLAttributes<HTMLElement> {
|
|
|
53
62
|
* SPage — SLayout 안에서 남은 공간을 채우는 스크롤 콘텐츠 영역.
|
|
54
63
|
* 스크롤은 SLayout(overflow:hidden)이 잡아둔 경계 안에서 이 영역에만 생긴다.
|
|
55
64
|
* 창이 SLayout 의 최소 폭보다 좁을 때 생기는 가로 스크롤도 여기 걸린다(문서는 스크롤되지 않는다).
|
|
56
|
-
* 패딩은
|
|
65
|
+
* 패딩은 padding 으로, 배경은 background 로 정한다(둘 다 className 으로도 덮어쓸 수 있다).
|
|
57
66
|
*
|
|
58
67
|
* - header="fix": flex 자식으로 남은 가로 공간을 채운다.
|
|
59
68
|
* - header="full": SLayout 이 깐 grid 의 "page" 영역 = 상단바 아래·메뉴 오른쪽 자리를 차지한다.
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { SPage, type SPageProps } from './SPage';
|
|
2
|
-
export { PAGE_BACKGROUNDS, type SPageBackground, PAGE_CONTENT_HEIGHTS, type SPageContentHeight, PAGE_CONTENT_WIDTHS, type SPageContentWidth, PAGE_HEADER_VARIANTS, type SPageHeaderVariant, } from './page.config';
|
|
2
|
+
export { PAGE_BACKGROUNDS, type SPageBackground, PAGE_CONTENT_HEIGHTS, type SPageContentHeight, PAGE_CONTENT_WIDTHS, type SPageContentWidth, PAGE_PADDINGS, type SPagePadding, PAGE_HEADER_VARIANTS, type SPageHeaderVariant, } from './page.config';
|
|
3
3
|
export { SPageHeader, type SPageHeaderProps } from './SPageHeader';
|
|
@@ -14,6 +14,14 @@ export type SPageBackground = (typeof PAGE_BACKGROUNDS)[number];
|
|
|
14
14
|
*/
|
|
15
15
|
export declare const PAGE_CONTENT_HEIGHTS: readonly ["auto", "fill"];
|
|
16
16
|
export type SPageContentHeight = (typeof PAGE_CONTENT_HEIGHTS)[number];
|
|
17
|
+
/**
|
|
18
|
+
* 본문 안쪽 여백 모드.
|
|
19
|
+
* - default: SPage 가 --cmp-pageBody-padding-default 로 사방 패딩을 넣는다
|
|
20
|
+
* - none: 패딩을 끈다. 가장자리까지 차는 블록(필터 바 등)이 맨 위에 서고, 그 아래 블록이
|
|
21
|
+
* 같은 토큰으로 여백을 직접 잡는 화면용. SPopup·SSectionHeaderCard 의 padding="none" 과 같은 관용구.
|
|
22
|
+
*/
|
|
23
|
+
export declare const PAGE_PADDINGS: readonly ["default", "none"];
|
|
24
|
+
export type SPagePadding = (typeof PAGE_PADDINGS)[number];
|
|
17
25
|
/**
|
|
18
26
|
* 본문 가로 폭 모드 — 창이 레이아웃 최소 폭보다 **넓을 때** 본문이 어떻게 설지.
|
|
19
27
|
* - full: 남는 폭을 본문이 다 쓴다 (반응형)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "페이지 레시피" 상단의 카드 그리드 — 레시피를 화면으로 먼저 보고 골라 들어가게 한다.
|
|
3
|
+
*
|
|
4
|
+
* 미리보기는 그림이 아니라 **레시피 파일 그 자체**를 축소해 렌더한 것이다. 그래서 레시피 코드가
|
|
5
|
+
* 바뀌면 카드도 함께 바뀌고, 따로 갱신할 자산이 없다. 규칙 설명은 이 아래에 AGENTS.md §4 가
|
|
6
|
+
* 그대로 렌더되므로 여기에는 쓰지 않는다.
|
|
7
|
+
*
|
|
8
|
+
* 레시피는 페이지 **안**의 골격이라 GNB·레이아웃은 그리지 않는다 — 셸 조합은 Layout Builder 의 몫이다.
|
|
9
|
+
*
|
|
10
|
+
* 새 레시피를 `src/recipes/` 에 만들면 여기에 한 줄을 더한다.
|
|
11
|
+
*/
|
|
12
|
+
import type { ReactNode } from 'react';
|
|
13
|
+
export default function RecipeGallery(): ReactNode;
|
package/dist/index.cjs
CHANGED
|
@@ -12761,6 +12761,10 @@ var BACKGROUND_CLASS = {
|
|
|
12761
12761
|
neutral: "bg-[var(--sys-color-bg-neutralLight)]",
|
|
12762
12762
|
screen: "bg-[var(--sys-color-bg-screen)]"
|
|
12763
12763
|
};
|
|
12764
|
+
var PADDING_CLASS2 = {
|
|
12765
|
+
default: "p-[var(--cmp-pageBody-padding-default)]",
|
|
12766
|
+
none: "p-0"
|
|
12767
|
+
};
|
|
12764
12768
|
var NATIVE_SCROLLBAR_BACKGROUND_CLASS = {
|
|
12765
12769
|
frame: `${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_CLASS}`,
|
|
12766
12770
|
neutral: `${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_WHITE_CLASS}`,
|
|
@@ -12776,6 +12780,7 @@ var setForwardedRef = (ref, node) => {
|
|
|
12776
12780
|
var SPage = /* @__PURE__ */ react.forwardRef(function SPage2({
|
|
12777
12781
|
background = "frame",
|
|
12778
12782
|
scrollEndSpacing = false,
|
|
12783
|
+
padding = "default",
|
|
12779
12784
|
overlayScrollbar = false,
|
|
12780
12785
|
contentHeight = "auto",
|
|
12781
12786
|
contentWidth = "full",
|
|
@@ -12814,7 +12819,8 @@ var SPage = /* @__PURE__ */ react.forwardRef(function SPage2({
|
|
|
12814
12819
|
{
|
|
12815
12820
|
ref: setMainRef,
|
|
12816
12821
|
className: cn(
|
|
12817
|
-
"box-border min-h-0 min-w-0 flex-1 overflow-auto
|
|
12822
|
+
"box-border min-h-0 min-w-0 flex-1 overflow-auto",
|
|
12823
|
+
PADDING_CLASS2[padding],
|
|
12818
12824
|
overlayScrollbar && "h-full",
|
|
12819
12825
|
!fill && scrollEndSpacing && "pb-[var(--cmp-pageBody-padding-scrollEnd)]",
|
|
12820
12826
|
overlayScrollbar ? SCROLLBAR_HIDDEN_CLASS : `${SCROLLBAR_CLASS} ${NATIVE_SCROLLBAR_BACKGROUND_CLASS[background]}`,
|
|
@@ -12854,6 +12860,7 @@ var SPage = /* @__PURE__ */ react.forwardRef(function SPage2({
|
|
|
12854
12860
|
// src/components/SPage/page.config.ts
|
|
12855
12861
|
var PAGE_BACKGROUNDS = ["frame", "neutral", "screen"];
|
|
12856
12862
|
var PAGE_CONTENT_HEIGHTS = ["auto", "fill"];
|
|
12863
|
+
var PAGE_PADDINGS = ["default", "none"];
|
|
12857
12864
|
var PAGE_CONTENT_WIDTHS = ["full", "fixed", "fixedCenter"];
|
|
12858
12865
|
var PAGE_HEADER_VARIANTS = ["plain", "bar"];
|
|
12859
12866
|
var SPageHeader = /* @__PURE__ */ withDisplayName(
|
|
@@ -27009,6 +27016,7 @@ exports.PAGE_BACKGROUNDS = PAGE_BACKGROUNDS;
|
|
|
27009
27016
|
exports.PAGE_CONTENT_HEIGHTS = PAGE_CONTENT_HEIGHTS;
|
|
27010
27017
|
exports.PAGE_CONTENT_WIDTHS = PAGE_CONTENT_WIDTHS;
|
|
27011
27018
|
exports.PAGE_HEADER_VARIANTS = PAGE_HEADER_VARIANTS;
|
|
27019
|
+
exports.PAGE_PADDINGS = PAGE_PADDINGS;
|
|
27012
27020
|
exports.RangeCalendar = RangeCalendar;
|
|
27013
27021
|
exports.SAccountListBox = SAccountListBox;
|
|
27014
27022
|
exports.SActionModal = SActionModal;
|