@highpixel-co/palda-design-system 0.5.0 → 0.8.0
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/dist/{chunk-Q4UXASZH.js → chunk-3OXUONDZ.js} +34 -10
- package/dist/{chunk-GPCPGABI.js → chunk-PWAQFOM3.js} +113 -42
- package/dist/guide/README.md +3 -3
- package/dist/guide/catalog/components.yml +71 -4
- package/dist/guide/catalog/drafts.yml +46 -0
- package/dist/guide/catalog/patterns.yml +20 -5
- package/dist/guide/docs/ACCESSIBILITY.md +27 -1
- package/dist/guide/docs/AI_UI_DESIGNER_HANDOFF.md +6 -4
- package/dist/guide/docs/COMPONENT_POLICY.md +2 -2
- package/dist/guide/docs/CONTENT.md +1 -1
- package/dist/guide/docs/DESIGN_GRAMMAR.md +239 -37
- package/dist/guide/docs/DESIGN_PRINCIPLES.md +18 -9
- package/dist/guide/docs/FIGMA_ALIGNMENT_DELTA.md +4 -4
- package/dist/guide/docs/FIGMA_NAME_MAPPING.md +4 -4
- package/dist/guide/docs/FIGMA_WORKFLOW.md +3 -3
- package/dist/guide/docs/ICON_POLICY.md +3 -3
- package/dist/guide/docs/LAYOUT.md +17 -11
- package/dist/guide/docs/TOKEN_POLICY.md +27 -16
- package/dist/harness/check.mjs +13 -7
- package/dist/harness/metadata.json +38 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -2
- package/dist/patterns.d.ts +27 -3
- package/dist/patterns.js +2 -2
- package/dist/scripts/check-examples.mjs +262 -57
- package/dist/styles.css +105 -35
- package/dist/ui.d.ts +73 -6
- package/dist/ui.js +5 -1
- package/package.json +1 -1
|
@@ -50,8 +50,10 @@ Palda가 목표로 하는 것은 단순히 컴포넌트를 많이 보유하는
|
|
|
50
50
|
### 2. 정보 위계와 Primary action 배치 — 확정됨
|
|
51
51
|
|
|
52
52
|
**타이포 위계**는 [`TOKEN_POLICY.md`](TOKEN_POLICY.md) §타이포가 갖는다 — 페이지 `headline`(24)
|
|
53
|
-
→ 섹션·카드 `body1`(16) → 행 `body2`(14) → 보조 `label`(12). 화면이 고르는 것은 페이지
|
|
54
|
-
|
|
53
|
+
→ 섹션·카드 `body1`(16) → 행 `body2`(14) → 보조 `label`(12). 화면이 고르는 것은 페이지 제목과
|
|
54
|
+
**본문 목록 여부** 둘이고 나머지는 pattern이 이미 갖고 있다. 선언서의 본문 문장이 가리키는
|
|
55
|
+
목록은 `ListRow`의 `emphasis="strong"`으로 제목 `body1`(16) + 설명 `body2`(14)가 된다
|
|
56
|
+
([`decisions/0034`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0034-the-body-list-lifts-one-step.md)).
|
|
55
57
|
|
|
56
58
|
**주 액션의 자리**는 [`DESIGN_GRAMMAR.md`](DESIGN_GRAMMAR.md) §주 액션을 어디 두나가 갖는다 —
|
|
57
59
|
페이지 헤더 우측과 `BottomBar` 둘 다 맞는 자리이고, 읽다가 가끔 누르는 화면은 위, 채워 넣고
|
|
@@ -83,7 +85,7 @@ AI에게 가장 효과적인 기준은 긴 설명보다 실제 정답 화면이
|
|
|
83
85
|
- 데스크톱과 모바일에서 달라지는 부분
|
|
84
86
|
- loading·empty·error 처리 방식
|
|
85
87
|
|
|
86
|
-
산출물은 [`../examples/approved/`](https://github.com/highpixel-co/palda-design-system/tree/
|
|
88
|
+
산출물은 [`../examples/approved/`](https://github.com/highpixel-co/palda-design-system/tree/abee826d0afda16bd3776f015931e0a820a8876e/examples/approved)에 보관한다.
|
|
87
89
|
|
|
88
90
|
**완료 기준:** AI가 새 화면을 만들 때 가장 가까운 승인 화면을 골라 구조와 판단 기준을 재사용할
|
|
89
91
|
수 있다.
|
|
@@ -101,7 +103,7 @@ AI가 자주 만들 수 있는 잘못된 화면도 시각적으로 남긴다.
|
|
|
101
103
|
- 모바일에서 버튼이나 긴 한글이 잘리는 화면
|
|
102
104
|
|
|
103
105
|
각 사례에는 문제가 되는 이유와 올바른 대안을 함께 기록한다. 산출물은
|
|
104
|
-
[`../examples/anti-patterns/`](https://github.com/highpixel-co/palda-design-system/tree/
|
|
106
|
+
[`../examples/anti-patterns/`](https://github.com/highpixel-co/palda-design-system/tree/abee826d0afda16bd3776f015931e0a820a8876e/examples/anti-patterns)에 보관한다.
|
|
105
107
|
|
|
106
108
|
**완료 기준:** AI가 동일한 실수를 반복하지 않고, 잘못된 구현을 구체적인 사례와 비교해 수정할 수
|
|
107
109
|
있다.
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
적는다. prop 이름과 기본값은 타입이 원본이므로 문서로 옮겨 적지 않는다.
|
|
16
16
|
|
|
17
17
|
**새 컴포넌트는 코드보다 먼저 property 목록과 상태 배치표를 낸다.** 상태는
|
|
18
|
-
[`decisions/0004`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
18
|
+
[`decisions/0004`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0004-component-state-naming.md)의 다섯 종류(상호작용 · 네이티브 ·
|
|
19
19
|
값에서 파생 · 컴포넌트 소유 · 부모가 정함)에 배치하고, **prop으로 빼도 되는 것은 "부모가 정함"
|
|
20
20
|
하나뿐이다.** `hovered`·`focused`·`filled` 같은 prop은 만들지 않는다. pattern에서 어느 것이
|
|
21
21
|
상태를 소유하는지는 [`DESIGN_GRAMMAR.md`](DESIGN_GRAMMAR.md)의 §상태는 누가 갖나에 있다.
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
([`DESIGN_GRAMMAR.md`](DESIGN_GRAMMAR.md) §자리는 시스템이 정하지 않는다). 컴포넌트 시안은 셸이 없어 이 검사를 받지 않는다.
|
|
45
45
|
- **렌더해서 흐리게 본다.** 시안을 실제로 그린 뒤, 스크린샷을 흐리게 봤을 때 가장 먼저 보이는
|
|
46
46
|
것이 본문이어야 한다. 상태 배너·경고처럼 면적이 큰 것이 본문보다 먼저 보이면 그것을 뺀다
|
|
47
|
-
([`decisions/0024`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
47
|
+
([`decisions/0024`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0024-state-belongs-to-the-nearest-owner.md)). 검사가 읽지
|
|
48
48
|
못하는 자리라 이 확인은 사람이 한다.
|
|
49
49
|
- **시안은 자기 클래스만 정의한다.** 시스템 클래스(`.palda-*`)를 셀렉터에 쓰지 않는다 — 붙이는
|
|
50
50
|
것은 마크업이 하고, 늘리거나 자리를 잡는 것은 감싸는 자리가 한다. pattern은 `className`을 받지
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
`Toast`다.
|
|
61
61
|
|
|
62
62
|
**진행 중은 글자가 아니라 `disabled`로 표현한다.** `Button`에 로딩 전용 prop이 없는 것이
|
|
63
|
-
그래서다([`components/src/Button/Button.tsx`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
63
|
+
그래서다([`components/src/Button/Button.tsx`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/components/src/Button/Button.tsx)).
|
|
64
64
|
|
|
65
65
|
### "~기"로 끝난다
|
|
66
66
|
|
|
@@ -16,10 +16,14 @@
|
|
|
16
16
|
| 이거 하면 안 되는 건가? | 같은 문서 §6 지양할 디자인 — 시각·구조 두 표 |
|
|
17
17
|
| 규칙끼리 부딪히면? | 같은 문서 §7 판단이 충돌할 때 |
|
|
18
18
|
| 이 화면의 틀은? | [`LAYOUT.md`](LAYOUT.md) §셸 — 모든 화면이 같다. 한 번만 읽으면 된다 |
|
|
19
|
+
| 이 화면이 무엇을 만지나? | 아래 §무엇을 그리기 전에 세나 — 섹션은 이 표의 조회 결과다 |
|
|
20
|
+
| 비슷한 화면이 이미 있나? | 아래 §자매 화면 — 자매면 섹션 집합을 공유한다 |
|
|
19
21
|
| 페이지인가 모달인가? | 아래 §띄우나 마나 §언제 모달인가 — 세 관문 |
|
|
20
22
|
| 무엇으로 조립하나? | 아래 §어느 pattern을 고르나 |
|
|
21
23
|
| 이 자리에 이 패턴이 맞나? | [`catalog/patterns.yml`](../catalog/patterns.yml)의 `use_for`·`avoid_for` |
|
|
22
24
|
| 이게 이 화면 것인가? | 아래 §곁을 어디 두나 — 박스 질문보다 **먼저** 묻는다 |
|
|
25
|
+
| 무엇을 크게 그리나? | 아래 §층이 무게를 정한다 — 그리기 전에 기능 위계부터 |
|
|
26
|
+
| 값이 나쁠 때는? | 아래 §값이 나쁘면 잠깐 올라온다 |
|
|
23
27
|
| 박스로 감싸나? | 아래 §판단 한 줄 → §쓰는 경우 |
|
|
24
28
|
| 면인가 행인가? | [`TOKEN_POLICY.md`](TOKEN_POLICY.md) §간격 마지막 줄 + §라운드 표 |
|
|
25
29
|
| 이 카드는 눌리나? | 아래 §세 번째 질문 — 고르는 카드 / 담는 카드 |
|
|
@@ -31,7 +35,7 @@
|
|
|
31
35
|
| 좁아지면? | [`LAYOUT.md`](LAYOUT.md) §좁아질 때 |
|
|
32
36
|
|
|
33
37
|
**ADR은 여기서 읽지 않는다.** 근거 보관소지 지시서가 아니고, 대체된 값이 그대로 남아 있다.
|
|
34
|
-
기준은 [`AGENTS.md`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
38
|
+
기준은 [`AGENTS.md`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/AGENTS.md)의 §ADR은 화면 만들 때 읽지 않는다에 있다.
|
|
35
39
|
|
|
36
40
|
### 아직 답할 문서가 없는 질문
|
|
37
41
|
|
|
@@ -39,7 +43,10 @@
|
|
|
39
43
|
|
|
40
44
|
**지금은 비어 있다.** 마지막으로 남아 있던 제목·본문·보조 정보의 위계는 2026-09-02에
|
|
41
45
|
[`TOKEN_POLICY.md`](TOKEN_POLICY.md) §타이포가 받았다 — 페이지 `headline`(24) → 섹션·카드
|
|
42
|
-
`body1`(16) → 행 `body2`(14) → 보조 `label`(12)이다.
|
|
46
|
+
`body1`(16) → 행 `body2`(14) → 보조 `label`(12)이다. 2026-09-03에 행이 두 칸으로 갈렸다.
|
|
47
|
+
**화면의 본문인 목록은 제목 `body1`(16) + 설명 `body2`(14)로 한 칸 올라간다**
|
|
48
|
+
([`decisions/0034`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0034-the-body-list-lifts-one-step.md)) — `ListRow`의 `emphasis`가
|
|
49
|
+
그것이고, 판정은 "선언서의 본문 문장이 가리키는 목록인가" 하나다.
|
|
43
50
|
|
|
44
51
|
### 주 액션을 어디 두나
|
|
45
52
|
|
|
@@ -51,10 +58,15 @@
|
|
|
51
58
|
같은 액션을 두 번 두지 않는다. 근거는
|
|
52
59
|
[`DESIGN_PRINCIPLES.md`](DESIGN_PRINCIPLES.md) §4의 주 액션의 자리에 있다.
|
|
53
60
|
|
|
61
|
+
**0개도 된다.** 목록을 훑고 행을 눌러 들어가는 화면은 행이 곧 액션이라 세울 것이 없다. 선언서에
|
|
62
|
+
`없음`이라 적는다 ([`decisions/0033`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0033-a-screen-may-have-no-primary-action.md)).
|
|
63
|
+
**자리를 채우려고 다른 층의 기능을 끌어올리지 않는다** — 스토어 알림톡 목록이 그렇게 결제
|
|
64
|
+
기능(3층)을 헤더 우측(1층)으로 올렸다가 되돌렸다.
|
|
65
|
+
|
|
54
66
|
## 곁을 어디 두나
|
|
55
67
|
|
|
56
68
|
**박스를 두를지 묻기 전에 이것부터 묻는다.** 같은 블록이라도 이 화면 것이냐 아니냐로 규칙이
|
|
57
|
-
갈린다. 근거는 [`decisions/0022`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
69
|
+
갈린다. 근거는 [`decisions/0022`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0022-screens-declare-their-body.md)에 있다.
|
|
58
70
|
|
|
59
71
|
> 이것은 **이 화면이 선언한 본문**인가?
|
|
60
72
|
|
|
@@ -64,6 +76,10 @@
|
|
|
64
76
|
**선언에 들지 않은 것은 전부 곁이다.** 다른 기능의 요약이거나 그리로 가는 입구다. 판단이 아니라
|
|
65
77
|
뺄셈이라, 그릴 때마다 다시 고르지 않는다.
|
|
66
78
|
|
|
79
|
+
선언 표의 행은 넷이다 — `본문` · `주 액션` · `갈래` · `곁`. `갈래`는 본문을 무엇으로 가르는지이고
|
|
80
|
+
(`탭`·`섹션`·`탭+섹션`·`없음`) 아래 §탭은 하나다가 그 판정을 갖는다. 자매 화면이 있으면 `자매`
|
|
81
|
+
행이 하나 더 붙는다 ([`0036`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0036-sibling-screens-share-their-sections.md)).
|
|
82
|
+
|
|
67
83
|
### 손잡이가 둘이다
|
|
68
84
|
|
|
69
85
|
하나로 보면 자리는 많이 먹으면서 눈에는 안 띄는 블록이 나온다.
|
|
@@ -73,16 +89,103 @@
|
|
|
73
89
|
| 무게 | 자리를 얼마나 먹고 얼마나 강조되나 | 내린다 |
|
|
74
90
|
| 구분 | 다른 종류로 읽히나 | 낸다 |
|
|
75
91
|
|
|
76
|
-
### 곁의 규칙
|
|
92
|
+
### 곁의 규칙 넷
|
|
77
93
|
|
|
78
|
-
1.
|
|
94
|
+
1. **기능 하나에 블록 하나다.** 기능이 다르면 블록도 다르다. 묶는 기준은 기능이지 층이
|
|
95
|
+
아니다 — 발송 채널과 잔여 알림톡은 둘 다 곁이지만 다른 기능이라 블록이 나뉜다. (구분)
|
|
79
96
|
2. **본문이 쓰는 pattern을 쓰지 않는다.** 본문이 행 나열이면 곁은 행이 아니다. (구분)
|
|
80
97
|
3. **강조 예산을 쓰지 않는다.** `primary`·`accent` 채움을 주지 않는다.
|
|
81
98
|
[`DESIGN_PRINCIPLES.md`](DESIGN_PRINCIPLES.md) §4의 "강한 강조는 하나"는 본문이 갖는다. (무게)
|
|
99
|
+
4. **stroke 없이 shade만.** `surface/raised` 필에 `radius/container`, **보더는 주지 않는다.**
|
|
100
|
+
(구분)
|
|
101
|
+
|
|
102
|
+
**면이 층을 가른다.** 본문은 흰 캔버스 위에서 디바이더로 갈리고 곁은 회색 면에 얹힌다. 글자는
|
|
103
|
+
양쪽 다 `text/primary`라 대비를 낮추지 않고도 층이 갈린다 — 규칙 1이 "세로로 한 줄이다"였을 때는
|
|
104
|
+
곁이 쓸 수 있는 것이 텍스트와 `Link`뿐이라 색 말고 가를 것이 없었다. 근거는
|
|
105
|
+
[`decisions/0032`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0032-asides-are-one-filled-block.md)에 있다.
|
|
106
|
+
|
|
107
|
+
| 자리 | 면 | 경계 | 글자 | 대비 |
|
|
108
|
+
| ---- | ---------------- | -------- | -------------- | --------- |
|
|
109
|
+
| 본문 | `surface/base` | 디바이더 | `text/primary` | `12.76:1` |
|
|
110
|
+
| 곁 | `surface/raised` | **없음** | `text/primary` | `11.72:1` |
|
|
111
|
+
|
|
112
|
+
**`ListRow`의 `tone="filled"`를 쓰지 않는다.** 같은 면이지만 본문 pattern이라 규칙 2에 걸린다.
|
|
113
|
+
곁 블록은 화면이 자기 클래스로 만든다.
|
|
114
|
+
|
|
115
|
+
**무게는 블록 개수가 아니라 줄 수가 지킨다.** 각 블록은 한두 줄을 넘지 않는다. 넘으면 그것은
|
|
116
|
+
곁이 아니라 본문이거나 다른 화면으로 가야 할 것이다.
|
|
117
|
+
|
|
118
|
+
### 층이 무게를 정한다
|
|
119
|
+
|
|
120
|
+
**규칙 셋은 "본문보다 가볍게"만 말하고 얼마나 가볍게는 말하지 않는다.** 그리기 전에 **기능
|
|
121
|
+
위계**를 정한다 — 이 페이지가 하는 일에 얼마나 직접 기여하는가. 근거는
|
|
122
|
+
[`decisions/0031`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0031-function-hierarchy-before-drawing.md)에 있다.
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
1. 페이지의 기능·텍스트를 **기능 단위로** 묶는다
|
|
126
|
+
2. 각 그룹이 페이지 목적에 얼마나 직접 기여하는지로 층을 정한다 ← 여기까지가 위계
|
|
127
|
+
3. 층이 UI 배정을 정한다 — pattern · 자리 · 면적 · 채움 · 타이포
|
|
128
|
+
4. 배정된 값이 읽히는지 확인한다 ← 위계와 무관한 하한
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
판정은 화면이 선언한 본문(0022)을 기준으로 한다.
|
|
132
|
+
|
|
133
|
+
| 층 | 판정 질문 | pattern | 나가는 자리 |
|
|
134
|
+
| ---------------------- | ------------------------------------- | -------------------- | ---------------------- |
|
|
135
|
+
| **1 · 이 페이지의 일** | 본문 문장이 말하는 그것인가? | 목록·폼·카드 그리드 | 주 액션 `primary` 하나 |
|
|
136
|
+
| **2 · 일의 전제** | 아래 셋 중 하나라도 예인가? | 상태 바 또는 곁 블록 | **`outline` Button** |
|
|
137
|
+
| **3 · 다른 곳의 일** | 참조하거나 그리로 나가는 문일 뿐인가? | 곁 블록 | **`Link`** |
|
|
138
|
+
|
|
139
|
+
**2층과 3층은 셋으로 가른다.** "여기서 하느냐"만 물으면 애매한 자리가 남아서다.
|
|
140
|
+
|
|
141
|
+
| 기준 | 묻는 것 | 발송 채널 | 잔여 알림톡 |
|
|
142
|
+
| ----------- | -------------------------------------------- | ------------------------ | ------------------- |
|
|
143
|
+
| **1. 소유** | 이 기능의 설정 화면이 이 페이지 아래에 있나? | 예 — `/alimtalk/channel` | 아니오 — `/payment` |
|
|
144
|
+
| **2. 변형** | 값이 바뀌면 본문의 **형태**가 바뀌나? | 예 — 템플릿 고르는 법 | 아니오 |
|
|
145
|
+
| **3. 성립** | 없으면 본문이 아예 안 뜨나? | 예 — `EmptyState` | 아니오 |
|
|
146
|
+
|
|
147
|
+
**하나라도 예면 2층, 셋 다 아니면 3층이다.** "잔액이 조건을 잠그지 않나"는 이 축의 물음이
|
|
148
|
+
아니다 — 잠그는 것은 **나쁜 값일 때**의 일이고 아래 §값이 나쁘면 잠깐 올라온다가 받는다.
|
|
149
|
+
|
|
150
|
+
**2층과 3층은 나가는 자리의 모양으로 갈린다.** 형태를 가진 버튼이 텍스트 링크보다 위다.
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
primary 채움 > outline 버튼 > subtle 버튼 > 텍스트 링크
|
|
154
|
+
1층 2층 3층
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
곁은 `primary`·`accent` 채움을 쓰지 못하므로 2층이 쓸 수 있는 가장 높은 칸이 `outline`이다.
|
|
158
|
+
**버튼의 보더는 곁 규칙 4와 부딪히지 않는다** — 그 규칙은 블록의 경계에 대한 것이고 버튼은 블록
|
|
159
|
+
안의 컨트롤이다. 2층이 셋을 넘으면 곁이 본문과 겨루기 시작하므로 한둘로 둔다.
|
|
160
|
+
|
|
161
|
+
**화면이 고르는 것은 층뿐이다.** "얼마나 눈에 띄게 그릴까"를 그리면서 판단하지 않는다. 안 보이면
|
|
162
|
+
색을 올리고 튀면 내리는 식으로는 화면마다 값이 달라진다.
|
|
163
|
+
|
|
164
|
+
**대비는 위계가 아니다.** 3층도 `text/primary`(12.76:1)를 쓴다 — `text/primary-sub`는 3.62:1로
|
|
165
|
+
14px 본문의 하한에 미달한다([`ACCESSIBILITY.md`](ACCESSIBILITY.md) §대비). 층 차이는 색이 아니라
|
|
166
|
+
pattern·자리·면적·채움이 낸다.
|
|
167
|
+
|
|
168
|
+
### 값이 나쁘면 잠깐 올라온다
|
|
169
|
+
|
|
170
|
+
곁에 실리는 정보는 시점에 따라 값이 다르다. **나쁜 값의 기준은 하나다 — 사용자가 무언가 해야만
|
|
171
|
+
정상으로 돌아가는가.** 잔액 `0개`, 구독 `만료`, 연동 `실패`가 그것이다.
|
|
172
|
+
|
|
173
|
+
| 값 | 무엇으로 |
|
|
174
|
+
| ------- | -------------------------------------------- |
|
|
175
|
+
| 좋은 값 | 자기 층의 무게 그대로. 대개 곁 한 줄 |
|
|
176
|
+
| 나쁜 값 | `Alert`. 무엇을 해야 하는지 액션을 함께 둔다 |
|
|
177
|
+
|
|
178
|
+
**올라온 것은 화면에 하나다.** 나쁜 값이 둘이면 더 먼저 손대야 하는 것만 올린다. 근거는
|
|
179
|
+
[`decisions/0030`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0030-asides-rise-only-on-bad-values.md)에 있다.
|
|
180
|
+
|
|
181
|
+
> 위계가 자리와 무게를 정하고, 상태는 그 자리에서 잠깐 올라올 뿐 위계를 바꾸지 않는다.
|
|
182
|
+
|
|
183
|
+
"잔액이 0이면 발송이 멈추니 항상 무겁게"는 틀렸다. 잔액이 0이 됐다고 잔액 관리가 이 페이지의
|
|
184
|
+
주요 기능이 되지 않는다.
|
|
82
185
|
|
|
83
186
|
### 자리는 시스템이 정하지 않는다
|
|
84
187
|
|
|
85
|
-
화면이 고르고 선언서에 밝힌다. 규칙
|
|
188
|
+
화면이 고르고 선언서에 밝힌다. 규칙 넷을 지키면 위든 아래든 무게는 이미 내려가 있고, 구분은
|
|
86
189
|
자리가 아니라 문법이 낸다.
|
|
87
190
|
|
|
88
191
|
**곁은 본문보다 먼저 올 수 있다. 넷째 규칙은 없다.** 순서를 규칙으로 세우면 "무게를 내리면 자리는
|
|
@@ -126,7 +229,7 @@ pattern을 쓰고 있거나, 강조를 갖고 있다.
|
|
|
126
229
|
| 섹션 안 | 행·요소 | `inset/md`(16) | `control`(10) | `ListRow tone="filled"` |
|
|
127
230
|
|
|
128
231
|
**층을 가르는 것은 라운드다.** 안쪽 여백은 둘 다 16이라 층을 가르지 못한다 — 행의 상하 여백을
|
|
129
|
-
16으로 올리면서 같아졌다([`decisions/0019`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
232
|
+
16으로 올리면서 같아졌다([`decisions/0019`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0019-list-row-vertical-inset.md)). 값의
|
|
130
233
|
근거는 [`TOKEN_POLICY.md`](TOKEN_POLICY.md) §라운드 표이고, 여백은 같은 문서 §간격에 있다.
|
|
131
234
|
|
|
132
235
|
**첫 질문은 상호작용만 가르고 층위는 가르지 않는다.** 고르지도 열리지도 떠 있지도 않은 요약
|
|
@@ -183,7 +286,7 @@ pattern을 쓰고 있거나, 강조를 갖고 있다.
|
|
|
183
286
|
|
|
184
287
|
**채운 면은 `Card`든 `ListRow`든 같은 회색이다.** `tone="filled"`가 두 곳에서 같은 뜻이고 같은
|
|
185
288
|
값이며, 갈리는 것은 색이 아니라 층이다 — 여백과 라운드가 다르다
|
|
186
|
-
([`decisions/0018`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
289
|
+
([`decisions/0018`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0018-summary-row-shares-the-filled-surface.md)).
|
|
187
290
|
|
|
188
291
|
### 쓰지 않는 경우 — 기본값
|
|
189
292
|
|
|
@@ -222,23 +325,40 @@ pattern을 쓰고 있거나, 강조를 갖고 있다.
|
|
|
222
325
|
|
|
223
326
|
### pattern에 어떻게 들어가 있나
|
|
224
327
|
|
|
225
|
-
| pattern | 보더 | 그림자 | 자리
|
|
226
|
-
| ------------- | ---- | ------ |
|
|
227
|
-
| `FormSection` | 없음 | 없음 | **설정·정보 섹션의 기본**. 제목 + 설명 +
|
|
228
|
-
| `ListRow` | 없음 | 없음 | 행 사이 디바이더만. 박스로 감싸지 않는다
|
|
229
|
-
| `Card` | 있음 | 없음 | 고를 수 있는 객체 · 페이지 최상위 요약 블록. 채움은 `tone`(기본 흰색)
|
|
230
|
-
| `LivePreview` | 있음 | 있음 | 떠 있는 표면
|
|
231
|
-
| `BottomBar` | 있음 | 있음 | 화면 아래에 떠 있는 바
|
|
232
|
-
| `AppShell` | — | — | 사이드바 + 콘텐츠 틀
|
|
328
|
+
| pattern | 보더 | 그림자 | 자리 |
|
|
329
|
+
| ------------- | ---- | ------ | ------------------------------------------------------------------------- |
|
|
330
|
+
| `FormSection` | 없음 | 없음 | **설정·정보 섹션의 기본**. 제목 + 설명 + 콘텐츠. 채움은 `tone`(기본 없음) |
|
|
331
|
+
| `ListRow` | 없음 | 없음 | 행 사이 디바이더만. 박스로 감싸지 않는다 |
|
|
332
|
+
| `Card` | 있음 | 없음 | 고를 수 있는 객체 · 페이지 최상위 요약 블록. 채움은 `tone`(기본 흰색) |
|
|
333
|
+
| `LivePreview` | 있음 | 있음 | 떠 있는 표면 |
|
|
334
|
+
| `BottomBar` | 있음 | 있음 | 화면 아래에 떠 있는 바 |
|
|
335
|
+
| `AppShell` | — | — | 사이드바 + 콘텐츠 틀 |
|
|
233
336
|
|
|
234
337
|
`Card`를 섹션 묶기에 쓰지 않는다. 섹션은 `FormSection`이다. 근거는
|
|
235
|
-
[`decisions/0011`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
338
|
+
[`decisions/0011`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0011-no-over-carding.md)에 있다.
|
|
339
|
+
|
|
340
|
+
**섹션이 여럿 쌓여 제목과 여백만으로 안 갈리면 `FormSection`의 `tone="filled"`를 쓴다.** 내용만
|
|
341
|
+
회색 면에 담고 제목은 캔버스에 남는다 — 제목까지 담으면 곁과 모양이 같아져 곁이 흡수된다
|
|
342
|
+
([`0032`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0032-asides-are-one-filled-block.md)). 면 위에서 입력과 요약 행은 흰 면으로 한
|
|
343
|
+
단계 밝아진다. 기본값은 여전히 `plain`이고, 근거는
|
|
344
|
+
[`decisions/0037`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0037-stacked-sections-fill-their-content.md)에 있다.
|
|
345
|
+
|
|
346
|
+
면을 켜는 조건 둘은 `pnpm check:examples`가 센다.
|
|
347
|
+
|
|
348
|
+
| 조건 | 무엇 |
|
|
349
|
+
| ------------------------- | ---------------------------------------------- |
|
|
350
|
+
| 형제가 있을 때만 | 섹션이 하나뿐이면 가를 것이 없고 곁만 흡수된다 |
|
|
351
|
+
| 내용이 덩어리가 아닐 때만 | 카드 그리드는 이미 덩어리라 면이 두 겹이 된다 |
|
|
352
|
+
|
|
353
|
+
**본문을 무엇으로 가르는지는 선언서의 `갈래` 행이 밝힌다** — `탭`·`섹션`·`탭+섹션`·`없음`.
|
|
354
|
+
같은 종류의 갈래면 탭이고 서로 다른 종류의 나열이면 섹션이다. 적은 값과 마크업이 어긋나면
|
|
355
|
+
같은 검사가 잡는다.
|
|
236
356
|
|
|
237
357
|
## 띄우나 마나
|
|
238
358
|
|
|
239
359
|
**깊이와 끊김은 다른 축이다.** 위 §두 번째 질문은 페이지 **안쪽** 층(면인가 행인가)을 가르고,
|
|
240
360
|
이 절은 페이지 **위로** 뜨는 층을 가른다. 근거는
|
|
241
|
-
[`decisions/0020`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
361
|
+
[`decisions/0020`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0020-modal-depth-and-scrim.md)에 있다.
|
|
242
362
|
|
|
243
363
|
### 층
|
|
244
364
|
|
|
@@ -260,7 +380,7 @@ pattern을 쓰고 있거나, 강조를 갖고 있다.
|
|
|
260
380
|
|
|
261
381
|
**딤은 `overlay/dim`(70% 검정)이다.** 시안에서 온 값은 아니지만 2026-08-31에 이대로 확정했다.
|
|
262
382
|
옅게 잡으면 두 가지가 같이 무너진다 — 4층을 3층과 가르는 시각 신호가 딤뿐이고, **모달 카드가
|
|
263
|
-
흰색인 것**([`decisions/0013`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
383
|
+
흰색인 것**([`decisions/0013`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0013-surface-base-is-white.md))**이 짙은 딤 위에서만
|
|
264
384
|
성립한다.** 카드와 딤 처리된 뒤 캔버스의 대비가 70%에서 8.5:1인데 30%에서는 2.1:1로 떨어져,
|
|
265
385
|
카드가 떠 있는 것으로 읽히지 않는다. 뒤 본문 대비도 70%에서 2.25:1이라 내용을 읽을 수 없고,
|
|
266
386
|
그래서 아래 1번 관문의 기준선이 흐려지지 않는다.
|
|
@@ -296,26 +416,100 @@ pattern을 쓰고 있거나, 강조를 갖고 있다.
|
|
|
296
416
|
이긴다** — 규칙과 반대다. `Toaster`를 stacking context를 만드는 조상 안에 두면 이 값도 듣지
|
|
297
417
|
않으므로, 앱 최상위에 하나만 둔다.
|
|
298
418
|
|
|
419
|
+
## 무엇을 그리기 전에 세나
|
|
420
|
+
|
|
421
|
+
**아래 §어느 pattern을 고르나의 입력을 만드는 자리다.** pattern 표는 "하려는 것"을 받아 pattern을
|
|
422
|
+
주는데, 그 "하려는 것"을 누가 어떻게 뽑는지가 없었다. 근거는
|
|
423
|
+
[`decisions/0035`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0035-screens-count-what-they-touch.md)에 있다.
|
|
424
|
+
|
|
425
|
+
**화면이 만지는 것을 표로 적는다. 훑는 자리를 정하지 않으면 손에 잡히는 것을 훑는다** — 같은
|
|
426
|
+
화면을 두 번 그리면 한 번은 도메인 상수를, 한 번은 훅의 반환 모양을 훑어서 다른 화면이 나온다.
|
|
427
|
+
|
|
428
|
+
| 열 | 값 |
|
|
429
|
+
| ------ | ----------------------------------------------- |
|
|
430
|
+
| `대상` | 사람이 부르는 이름 |
|
|
431
|
+
| `종류` | `켠다` · `정한다` · `고른다` **셋뿐이다** |
|
|
432
|
+
| `단위` | 이 값이 걸리는 범위 (화면 · 조건 · 항목 하나 …) |
|
|
433
|
+
| `출처` | 이 값의 정의가 어디 있나 |
|
|
434
|
+
|
|
435
|
+
셋에 안 들어가는 것이 나오면 지어내지 말고 멈춘다 ([`AGENTS.md`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/AGENTS.md) §항상). 액션은
|
|
436
|
+
종류가 아니라 이 셋에 붙는 동사라 `액션`으로 적고, 섹션이 될지는 `단위`가 정한다.
|
|
437
|
+
|
|
438
|
+
### 종류 × 단위가 섹션을 정한다
|
|
439
|
+
|
|
440
|
+
**표가 채워지면 섹션은 조회다.** 여기서 다시 판단하지 않는다.
|
|
441
|
+
|
|
442
|
+
| 종류 × 단위 | 나오는 것 |
|
|
443
|
+
| ------------------ | -------------------------------------------------------------------------------------------- |
|
|
444
|
+
| 켠다 × 화면·조건 | `FormSection` 하나, 맨 위 |
|
|
445
|
+
| 정한다 × 화면·조건 | `FormSection` 하나 |
|
|
446
|
+
| 고른다 × 화면·조건 | 목록·그리드 `FormSection` |
|
|
447
|
+
| 켠다·정한다 × 항목 | 그 항목의 카드 안 ([`decisions/0024`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0024-state-belongs-to-the-nearest-owner.md)) |
|
|
448
|
+
| 고른다 × 항목 | 다음 뎁스 |
|
|
449
|
+
|
|
450
|
+
**`단위`가 화면·조건이면 섹션이 되고, 항목이면 그 항목 안으로 내려간다.** 카드 하나를 끄는 것은
|
|
451
|
+
그 카드의 일이고, 조건 전체를 끄는 것은 화면의 일이다.
|
|
452
|
+
|
|
453
|
+
### 같은 대상은 같은 출처를 갖는다
|
|
454
|
+
|
|
455
|
+
두 화면이 같은 `대상`을 다른 `출처`에서 읽으면 정의가 둘이라는 뜻이다. 지금은 우연히 값이 같아도
|
|
456
|
+
한쪽만 고치면 갈라진다. **`출처` 열이 없으면 이것이 안 보인다.**
|
|
457
|
+
|
|
458
|
+
이 표는 시안 HTML 맨 위 주석의 화면 선언 표 바로 아래에 둔다. 형식은
|
|
459
|
+
[`examples/approved/README.md`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/examples/approved/README.md)에 있다.
|
|
460
|
+
|
|
461
|
+
## 자매 화면
|
|
462
|
+
|
|
463
|
+
**같은 도메인 개념을 다루는 두 화면은 자매다.** 조건 화면 둘이 같은 `ConditionType` 하나를 받으면
|
|
464
|
+
자매다. 근거는 [`decisions/0036`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0036-sibling-screens-share-their-sections.md)에 있다.
|
|
465
|
+
|
|
466
|
+
**이름이 비슷한 것이 아니라 다루는 개념이 같은 것이다.** "스토어 알림톡"과 "상품 알림톡"은 이름만
|
|
467
|
+
보면 다른 화면으로 읽힌다 — 유사도로 판정하면 놓친다.
|
|
468
|
+
|
|
469
|
+
**자매는 섹션 집합을 공유한다. 다른 섹션은 선언에 적어야 한다.** 차이를 금지하지 않고, 적지 않은
|
|
470
|
+
차이만 막는다.
|
|
471
|
+
|
|
472
|
+
```
|
|
473
|
+
스토어 { 발송, 템플릿, 테스트 발송 }
|
|
474
|
+
상품 { 발송, 상품 템플릿 }
|
|
475
|
+
|
|
476
|
+
등록된 차이
|
|
477
|
+
1. [템플릿] ↔ [상품 템플릿] — 조건당 택1 하나 대 최대 10개 관리
|
|
478
|
+
2. [테스트 발송] — 상품 쪽은 템플릿 단위라 카드 안으로 내려간다 (0024)
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
**양쪽 다 적는다.** 한쪽만 적으면 반대편에서 그리는 사람이 모른다. `check:examples`가 짝이 맞는지
|
|
482
|
+
센다.
|
|
483
|
+
|
|
484
|
+
**섹션 이름이 같아야 같은 섹션이다.** `템플릿`과 `상품 템플릿`은 다른 섹션으로 센다 — 접두어를
|
|
485
|
+
넘어가게 만들면 어디까지 넘어갈지가 다시 판단이 된다. 뒤에 붙는 개수 표기(`상품 템플릿 3/10`)만
|
|
486
|
+
떼고 비교한다.
|
|
487
|
+
|
|
299
488
|
## 어느 pattern을 고르나
|
|
300
489
|
|
|
301
490
|
**하려는 일에서 고른다. 생김새가 비슷하다고 고르지 않는다.** 아래 오른쪽 열은 같은 자리에서
|
|
302
491
|
잘못 고르기 쉬운 것이다.
|
|
303
492
|
|
|
304
|
-
| 하려는 것 | pattern
|
|
305
|
-
| ----------------------------------- |
|
|
306
|
-
| 화면의 틀 (사이드바 + 콘텐츠 3단) | `AppShell`
|
|
307
|
-
| 설정·정보 섹션을 제목 아래로 묶기 | `FormSection`
|
|
308
|
-
| 정보 나열, 통계, 목록의 한 줄 | `ListRow` + 디바이더
|
|
309
|
-
|
|
|
310
|
-
|
|
|
311
|
-
|
|
|
312
|
-
|
|
|
313
|
-
|
|
|
314
|
-
|
|
|
315
|
-
|
|
|
316
|
-
|
|
|
317
|
-
|
|
318
|
-
|
|
493
|
+
| 하려는 것 | pattern | 여기에 쓰지 않는 것 |
|
|
494
|
+
| ----------------------------------- | --------------------------- | --------------------------------- |
|
|
495
|
+
| 화면의 틀 (사이드바 + 콘텐츠 3단) | `AppShell` | — |
|
|
496
|
+
| 설정·정보 섹션을 제목 아래로 묶기 | `FormSection` | `Card` |
|
|
497
|
+
| 정보 나열, 통계, 목록의 한 줄 | `ListRow` + 디바이더 | `Card` |
|
|
498
|
+
| 그 목록이 화면의 본문일 때 | `ListRow emphasis="strong"` | 행마다 크기를 따로 고르는 것 |
|
|
499
|
+
| 섹션 안의 요약 행 | `ListRow tone="filled"` | `Card` (흰 카드가 아니라 회색 필) |
|
|
500
|
+
| 페이지 바디 최상위의 요약 블록 | `Card` | `ListRow tone="filled"` |
|
|
501
|
+
| 고를 수 있는 개별 객체 | `Card` | — |
|
|
502
|
+
| 같은 자리에서 갈래를 갈아 끼우기 | `Tab` | `Chip` |
|
|
503
|
+
| 여러 개를 동시에 거는 토글 | `Chip` | `Tab` |
|
|
504
|
+
| 폼 옆에서 입력 결과를 그대로 비추기 | `LivePreview` | — |
|
|
505
|
+
| 페이지 전체의 액션 | `BottomBar` | — |
|
|
506
|
+
| 목록·검색 결과가 비었을 때 | `EmptyState` | — |
|
|
507
|
+
|
|
508
|
+
**`emphasis="strong"`과 `tone="filled"`를 겹쳐 쓰지 않는다.** 곁의 요약 행이 본문 크기를 갖는
|
|
509
|
+
일이고 [`0032`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0032-asides-are-one-filled-block.md)와 어긋난다. 한 화면에 `strong`
|
|
510
|
+
목록은 하나다 ([`0034`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0034-the-body-list-lifts-one-step.md)).
|
|
511
|
+
|
|
512
|
+
`Card`를 섹션 묶기에 쓰지 않는 근거는 [`decisions/0011`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0011-no-over-carding.md)에 있다.
|
|
319
513
|
`Tab`과 `Chip`이 갈리는 이유는 위 §절대 규칙의 "필터는 탭이다"와 같다 — 필터는 고르는 객체가
|
|
320
514
|
아니라 갈래 전환이라 선택된 카드와 같은 문법을 쓰지 않는다.
|
|
321
515
|
|
|
@@ -324,7 +518,7 @@ pattern을 쓰고 있거나, 강조를 갖고 있다.
|
|
|
324
518
|
**한때 둘이었다.** `Tab`(컴포넌트)과 `FilterTabs`(pattern)가 "내용이 바뀌나, 같은 내용이
|
|
325
519
|
좁혀지나"로 갈렸는데 그 구분을 없앴다 — Figma 원본에 탭 컴포넌트 세트가 하나뿐이고, 두 자리는
|
|
326
520
|
실제로 같이 쓰인다. 어느 값이 남았는지와 근거는
|
|
327
|
-
[`decisions/0023`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
521
|
+
[`decisions/0023`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0023-one-tab.md)에 있다.
|
|
328
522
|
|
|
329
523
|
| 무엇 | 값 |
|
|
330
524
|
| ---------- | --------------------------------------------------------- |
|
|
@@ -341,6 +535,14 @@ pattern을 쓰고 있거나, 강조를 갖고 있다.
|
|
|
341
535
|
**갈래를 제목으로 세우지 않는다.** 같은 종류가 여러 갈래로 나뉜 목록은 제목을 갈래 수만큼 세우는
|
|
342
536
|
대신 탭이 가른다. 서로 다른 종류의 섹션은 그대로 제목과 여백으로 가른다(위 §쓰지 않는 경우).
|
|
343
537
|
|
|
538
|
+
**갈리는 지점은 선언서의 본문 문장이다.** 그 문장이 목록 하나를 가리키면 갈래는 그 목록의 분류라
|
|
539
|
+
탭이고(스토어 알림톡 — "어떤 주문 상황에 알림톡을 보낼지 고른다"), 서로 다른 것을 나열하면
|
|
540
|
+
섹션이다(내 계정 — "내 정보와 구독을 확인하고 바꾼다"). 탭은 하나만 보여주고 나머지를 숨기는
|
|
541
|
+
장치라, **숨겨도 본문 문장이 깨지지 않아야** 쓸 수 있다.
|
|
542
|
+
|
|
543
|
+
고른 결과는 선언 표의 `갈래` 행에 적고, 적은 값과 마크업이 어긋나면 `pnpm check:examples`가
|
|
544
|
+
잡는다. 판정 자체는 검사하지 않는다 — 몇 갈래부터 탭인지는 수치로 정하지 않았다.
|
|
545
|
+
|
|
344
546
|
## 상태는 누가 갖나
|
|
345
547
|
|
|
346
548
|
**틀은 상태를 갖지 않는다. 늘 그려지고, 상태는 안에 놓인 것이 가진다.** `AppShell`과 `Card`에
|
|
@@ -362,10 +564,10 @@ loading·empty·error를 두지 않는 이유다. 틀에 상태를 두면 같은
|
|
|
362
564
|
**상태는 그것을 가진 것에 가장 가까운 자리가 든다.** 한 단계 위로 올리는 것은 그 단계 전체가 못
|
|
363
565
|
쓰게 되었을 때뿐이다. 행 하나가 실패한 것을 섹션 배너로 올리면 같은 사실을 두 번 말하게 되고,
|
|
364
566
|
면적이 큰 배너가 본문보다 강해져 정작 봐야 할 목록을 덮는다. 근거는
|
|
365
|
-
[`decisions/0024`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
567
|
+
[`decisions/0024`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0024-state-belongs-to-the-nearest-owner.md)에 있다.
|
|
366
568
|
|
|
367
569
|
위 표는 pattern에서 **누가 소유하는가**만 정한다. 소유가 정해진 상태를 컴포넌트 하나 안에서
|
|
368
|
-
어떻게 표현하는지는 [`decisions/0004`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
570
|
+
어떻게 표현하는지는 [`decisions/0004`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0004-component-state-naming.md)의 5분류를
|
|
369
571
|
따른다 — 그중 prop으로 빼는 것은 "부모가 정함"(`selected`·`error`) 하나뿐이고, 나머지는 CSS
|
|
370
572
|
의사클래스·네이티브 속성·값에서 파생·내부 state다.
|
|
371
573
|
|
|
@@ -70,12 +70,12 @@
|
|
|
70
70
|
(`Alert` · `FormSection`의 `error`)는 폭이 본문과 같고 면을 가져서 본문과 무게를 겨룬다. 한
|
|
71
71
|
화면에 하나이고, 본문보다 먼저 보이면 뺀다. 어느 자리가 상태를 드는지는
|
|
72
72
|
[`DESIGN_GRAMMAR.md`](DESIGN_GRAMMAR.md) §상태는 누가 갖나와
|
|
73
|
-
[`decisions/0024`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
73
|
+
[`decisions/0024`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0024-state-belongs-to-the-nearest-owner.md)에 있다.
|
|
74
74
|
|
|
75
75
|
**곁은 강조 예산을 쓰지 않는다.** 이 화면이 선언한 본문에 들지 않은 것 — 다른 기능의 요약이나
|
|
76
76
|
그리로 가는 입구 — 에는 `primary`·`accent` 채움을 주지 않는다. 강조 하나는 본문이 갖는다.
|
|
77
77
|
곁이 무엇이고 어떻게 그리는지는 [`DESIGN_GRAMMAR.md`](DESIGN_GRAMMAR.md) §곁을 어디 두나에 있고,
|
|
78
|
-
근거는 [`decisions/0022`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
78
|
+
근거는 [`decisions/0022`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0022-screens-declare-their-body.md)다.
|
|
79
79
|
|
|
80
80
|
**뉴트럴이 대부분이다.** 퍼플은 핵심 액션과 선택 상태에만, 오렌지는 CTA·알림 같은 최소한의
|
|
81
81
|
순간에만 쓴다.
|
|
@@ -95,8 +95,13 @@
|
|
|
95
95
|
**지키는 것은 개수다. 한 화면에 주 액션은 하나이고, 선언한 자리도 하나다.** 위아래에 같은 액션을
|
|
96
96
|
두 번 두지 않는다. 자리를 고르는 것은 자유지만 강조 하나 규칙(위 §4)은 그대로다.
|
|
97
97
|
|
|
98
|
+
**0개도 된다.** 고르는 행위가 본문 안에서 끝나는 화면 — 목록을 훑고 행을 눌러 들어가는 화면은
|
|
99
|
+
행이 곧 액션이라 헤더나 하단에 세울 것이 없다. 그때는 선언서에 `없음`이라 적는다
|
|
100
|
+
([`decisions/0033`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0033-a-screen-may-have-no-primary-action.md)). **자리를 채우려고
|
|
101
|
+
다른 층의 기능을 끌어올리지 않는다.**
|
|
102
|
+
|
|
98
103
|
**화면 단위 선언은 둘이다.** 주 액션의 자리가 하나이고, **이 화면의 본문**이 나머지 하나다
|
|
99
|
-
([`decisions/0022`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
104
|
+
([`decisions/0022`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0022-screens-declare-their-body.md)). 같은 장치를 두 축에 쓴다 —
|
|
100
105
|
시스템이 정해 주는 대신 화면이 고르고 밝히고, 지키는 것은 개수다. 둘 다 승인 화면 문서가 받는다.
|
|
101
106
|
|
|
102
107
|
슬롯은 이미 둘 다 있다 — 페이지 헤더 우측 상단은 바디 안이고, 아래는 `AppShell`의 `footer`에
|
|
@@ -104,7 +109,11 @@
|
|
|
104
109
|
|
|
105
110
|
> **타이포 위계는 확정됐다.** 페이지 `headline`(24) → 섹션·카드 `body1`(16) → 행 `body2`(14) →
|
|
106
111
|
> 보조 `label`(12)이고, 표는 [`TOKEN_POLICY.md`](TOKEN_POLICY.md) §타이포에 있다. 화면이 고르는
|
|
107
|
-
> 것은 페이지
|
|
112
|
+
> 것은 페이지 제목과 **본문 목록 여부** 둘이며 나머지는 pattern이 갖고 있다.
|
|
113
|
+
>
|
|
114
|
+
> **본문인 목록은 행이 한 칸 올라간다** — 제목 `body1`(16) + 설명 `body2`(14)
|
|
115
|
+
> ([`decisions/0034`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0034-the-body-list-lifts-one-step.md)). 선언서의 본문 문장이
|
|
116
|
+
> 가리키는 목록 하나에만 쓴다. 곁·요약·참조 나열은 그대로다.
|
|
108
117
|
|
|
109
118
|
## 5. Palda다운 대표 특징
|
|
110
119
|
|
|
@@ -148,7 +157,7 @@ subtle 3켤레로 움직이고, 알리기만 하는 색(그린·앰버)은 눌
|
|
|
148
157
|
[`TOKEN_POLICY.md`](TOKEN_POLICY.md) §패밀리·§켤레에 있다.
|
|
149
158
|
|
|
150
159
|
> **값의 원본은 `tokens/color.tokens.json`이고 이 표는 사본이다.** 어긋나면 토큰이 옳다
|
|
151
|
-
> ([`decisions/0001`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
160
|
+
> ([`decisions/0001`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0001-design-system-ssot.md)). 색 이름은 제안이며 디자이너가
|
|
152
161
|
> 확정한다. CSS에는 hex를 쓰지 않는다 — 언제나 `var(--token)`이다.
|
|
153
162
|
|
|
154
163
|
### 타이포
|
|
@@ -195,7 +204,7 @@ Pretendard, 절제된 무게. **강조는 크기가 아니라 계층과 무게
|
|
|
195
204
|
|
|
196
205
|
| 하지 않는 것 | 대신 | 어디 |
|
|
197
206
|
| ------------------------------ | ------------------------------- | ------------------------------------------- |
|
|
198
|
-
| 모든 것을 카드로 감싸기 | 여백 + 디바이더 + 제목 | [`0011`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
207
|
+
| 모든 것을 카드로 감싸기 | 여백 + 디바이더 + 제목 | [`0011`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0011-no-over-carding.md) |
|
|
199
208
|
| 컨테이너 중첩 (카드 안 보더) | 디바이더. 최대 1 depth | `DESIGN_GRAMMAR.md` §절대 규칙 |
|
|
200
209
|
| 정적인 블록을 보더로 둘러 강조 | 상태·타이포·색 | 〃 |
|
|
201
210
|
| 필터를 채운 칩 박스로 | 언더라인 탭(`Tab`) | 〃 |
|
|
@@ -223,13 +232,13 @@ Pretendard, 절제된 무게. **강조는 크기가 아니라 계층과 무게
|
|
|
223
232
|
| ---------------------------------- | ----------------- | ------------------------------------------------------------ |
|
|
224
233
|
| 강조를 하나 더 넣고 싶다 | 하나로 둔다 | 둘이면 어느 것도 강조가 아니다 (§4) |
|
|
225
234
|
| 시안이 "카드 전체 클릭"을 요구한다 | 문법 | `DESIGN_GRAMMAR.md` §세 번째 질문 |
|
|
226
|
-
| 시안의 색·값이 코드와 다르다 | 코드 | 코드가 SSOT ([`0001`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
235
|
+
| 시안의 색·값이 코드와 다르다 | 코드 | 코드가 SSOT ([`0001`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0001-design-system-ssot.md)) |
|
|
227
236
|
| 브랜드색이 예뻐서 넓게 깔고 싶다 | 뉴트럴 | 브랜드색은 강조와 포인트 전용 (§4) |
|
|
228
237
|
| 글자가 배경에 묻힌다 | 읽히는 쪽 | 수치 기준은 없어도 안 읽히면 시각 표현이 아니다 (2 > 3) |
|
|
229
|
-
| 필요한 토큰·variant·아이콘이 없다 | 멈추고 확인받는다 | 지어내지 않는다 ([`AGENTS.md`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
238
|
+
| 필요한 토큰·variant·아이콘이 없다 | 멈추고 확인받는다 | 지어내지 않는다 ([`AGENTS.md`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/AGENTS.md) §항상) |
|
|
230
239
|
|
|
231
240
|
**시안이 코드를 이기는 경우는 값의 다툼이 아니라 결정을 뒤집을 때뿐이다.** 그때는 ADR을 새로 쓴다
|
|
232
|
-
([`0000-template`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
241
|
+
([`0000-template`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0000-template.md)).
|
|
233
242
|
|
|
234
243
|
## 하지 않기로 한 것
|
|
235
244
|
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
둔 것이다. 여기 적힌 것은 코드에서 고칠 일이 아니다. 코드는 이미 오른쪽 열의 값을 갖고 있다.
|
|
7
7
|
|
|
8
8
|
이 저장소에서는 Figma를 편집할 수 없다. 그래서 "Figma가 이렇게 바뀌어야 한다"를 코드 변경 대신
|
|
9
|
-
문서로 내보낸다. 근거는 [`decisions/0001`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
9
|
+
문서로 내보낸다. 근거는 [`decisions/0001`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0001-design-system-ssot.md)이다.
|
|
10
10
|
|
|
11
11
|
**뉴트럴 스케일 자체는 더 이상 delta가 아니다.** primitive `gray-50`~`gray-900`을 Figma와 같은
|
|
12
|
-
차가운 회색으로 옮겼다([`decisions/0015`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
12
|
+
차가운 회색으로 옮겼다([`decisions/0015`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0015-neutral-scale-adopts-figma-cool-gray.md)).
|
|
13
13
|
값의 방향을 다시 정한 것이지 SSOT가 바뀐 것은 아니고, 아래 남은 항목은 여전히 **Figma가 코드에
|
|
14
14
|
맞춰야 할 것**이다.
|
|
15
15
|
|
|
@@ -35,7 +35,7 @@ primitive는 양쪽이 같아졌고, 아래 셋은 **semantic이 어느 단계
|
|
|
35
35
|
단계가 맞다. `#86868d`는 보조 문구(`color/text/primary-sub`)의 자리다.
|
|
36
36
|
|
|
37
37
|
`color/surface/base`와 `color/surface/sunken`은 배경 위계를 뒤집으면서 한 단계씩 옮겨졌다
|
|
38
|
-
([`decisions/0013`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
38
|
+
([`decisions/0013`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0013-surface-base-is-white.md)). 캔버스가 흰색이고 떠 있는 면과
|
|
39
39
|
요약 행이 회색이다.
|
|
40
40
|
|
|
41
41
|
## 남은 항목 — Figma에 아직 없는 것
|
|
@@ -85,7 +85,7 @@ Badge의 status variant는 틴트 배경 위 조합이다 — 배경 `{status}/s
|
|
|
85
85
|
|
|
86
86
|
`ListRow`의 `tone="filled"`는 `Card`의 `tone="filled"`와 같은 회색이 된다. 두 곳의 `filled`가 같은
|
|
87
87
|
뜻이라 값도 같아야 하고, 층은 색이 아니라 여백·라운드로 갈린다
|
|
88
|
-
([`decisions/0018`](https://github.com/highpixel-co/palda-design-system/blob/
|
|
88
|
+
([`decisions/0018`](https://github.com/highpixel-co/palda-design-system/blob/abee826d0afda16bd3776f015931e0a820a8876e/docs/decisions/0018-summary-row-shares-the-filled-surface.md)).
|
|
89
89
|
|
|
90
90
|
### 새 컴포넌트 2종
|
|
91
91
|
|