@highpixel-co/palda-design-system 0.4.1 → 0.5.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/README.md +21 -2
- package/dist/guide/LICENSE +21 -0
- package/dist/guide/NOTICE +29 -0
- package/dist/guide/README.md +57 -0
- package/dist/guide/catalog/components.yml +272 -0
- package/dist/guide/catalog/drafts.yml +333 -0
- package/dist/guide/catalog/icons.yml +309 -0
- package/dist/guide/catalog/patterns.yml +124 -0
- package/dist/guide/catalog/tokens.yml +14 -0
- package/dist/guide/docs/ACCESSIBILITY.md +10 -0
- package/dist/guide/docs/AI_UI_DESIGNER_HANDOFF.md +256 -0
- package/dist/guide/docs/COMPONENT_POLICY.md +105 -0
- package/dist/guide/docs/CONSUMER_GUIDE.md +131 -0
- package/dist/guide/docs/CONTENT.md +148 -0
- package/dist/guide/docs/DESIGN_GRAMMAR.md +378 -0
- package/dist/guide/docs/DESIGN_PRINCIPLES.md +254 -0
- package/dist/guide/docs/FIGMA_ALIGNMENT_DELTA.md +141 -0
- package/dist/guide/docs/FIGMA_NAME_MAPPING.md +84 -0
- package/dist/guide/docs/FIGMA_WORKFLOW.md +33 -0
- package/dist/guide/docs/ICON_POLICY.md +175 -0
- package/dist/guide/docs/LAYOUT.md +221 -0
- package/dist/guide/docs/PATTERN_POLICY.md +13 -0
- package/dist/guide/docs/TOKEN_POLICY.md +255 -0
- package/dist/guide/icons/manifest.json +572 -0
- package/dist/harness/check.mjs +330 -0
- package/dist/harness/cli.mjs +88 -0
- package/dist/harness/metadata.json +1323 -0
- package/dist/scripts/check-examples.mjs +444 -0
- package/package.json +13 -2
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# Design Principles
|
|
2
|
+
|
|
3
|
+
**판단이 부딪힐 때 무엇을 앞에 두는지, Palda가 지향하는 인상과 원칙을 담는 문서다.**
|
|
4
|
+
|
|
5
|
+
> 정돈·편안함으로 셀러의 피로를 덜고, **퍼플의 강조와 오렌지의 포인트로 매출의 방향을 가리킨다.**
|
|
6
|
+
|
|
7
|
+
**이 문서는 "왜"와 "무엇을 앞에 두나"만 갖는다.** 값과 사용 조건은
|
|
8
|
+
[`TOKEN_POLICY.md`](TOKEN_POLICY.md), 화면을 조립하며 갈리는 판단은
|
|
9
|
+
[`DESIGN_GRAMMAR.md`](DESIGN_GRAMMAR.md), 틀과 여백은 [`LAYOUT.md`](LAYOUT.md)가 갖는다. 여기서
|
|
10
|
+
다시 정하지 않는다.
|
|
11
|
+
|
|
12
|
+
## 1. 사용자와 제품 역할
|
|
13
|
+
|
|
14
|
+
**주요 사용자는 스마트스토어를 운영하는 1인 자영업자다.** 파는 일과 그 외의 모든 일을 혼자
|
|
15
|
+
한다. 하루에 여러 번 같은 화면을 지나가고, 옆에서 대신 봐 줄 사람이 없다.
|
|
16
|
+
|
|
17
|
+
여기서 두 가지가 따라온다.
|
|
18
|
+
|
|
19
|
+
- **반복해도 피로하지 않은 것이 한 번의 인상보다 먼저다.** 매일 지나는 화면이라 첫인상보다
|
|
20
|
+
누적이 크다.
|
|
21
|
+
- **혼자 판단할 수 있어야 한다.** 다음 할 일이 화면에서 바로 보여야 하고, 틀렸을 때 무엇이
|
|
22
|
+
틀렸는지 화면이 말해야 한다. 교육이나 안내 문서를 전제하지 않는다.
|
|
23
|
+
|
|
24
|
+
**Palda는 "파는 일을 가볍게" 만든다.** 셀러가 손을 덜 쓰고 다음 할 일을 알아보게 돕는다.
|
|
25
|
+
|
|
26
|
+
## 2. 사용자가 받아야 하는 인상
|
|
27
|
+
|
|
28
|
+
> **정돈 · 편안함 · 생기**
|
|
29
|
+
|
|
30
|
+
**정돈과 편안함을 바탕에 깔고, 생기를 포인트로만 얹는다.** 셋은 대등하지 않다. 생기가 앞의 둘을
|
|
31
|
+
해치면 생기를 뺀다.
|
|
32
|
+
|
|
33
|
+
## 3. 핵심 원칙
|
|
34
|
+
|
|
35
|
+
### 1. 정돈 (Clarity)
|
|
36
|
+
|
|
37
|
+
흩어진 것을 하나로 모은 인상. **강조는 색이 아니라 위계로 만든다.**
|
|
38
|
+
|
|
39
|
+
- **추구** — 넓은 여백, 질서 있는 정렬, 카드 하나에 정보 하나, 명도로 만드는 강조
|
|
40
|
+
- **지양** — 빽빽한 화면, 장식 요소, 여러 색의 나열
|
|
41
|
+
|
|
42
|
+
### 2. 편안함 (Ease)
|
|
43
|
+
|
|
44
|
+
손이 덜 가는, 홀가분하고 순한 인상. (가벼움 + 부드러움)
|
|
45
|
+
|
|
46
|
+
- **추구** — 밝은 뉴트럴 바탕, 순수 검정 대신 먹색, 얇은 라인(1px)과 순한 색조, 둥근 모서리와
|
|
47
|
+
라운드 아이콘
|
|
48
|
+
- **지양** — 어둡고 무거운 배경, 두꺼운 테두리, 쨍한 원색, 과한 굵기
|
|
49
|
+
|
|
50
|
+
### 3. 생기 (Vitality)
|
|
51
|
+
|
|
52
|
+
앞으로 뻗어나가는, 매출을 돕는 인상. **절제된 한 번의 강조로.**
|
|
53
|
+
|
|
54
|
+
- **추구** — 시그니처 퍼플로 또렷한 강조, 오렌지로 행동을 부르는 포인트, 위로 살짝 뜨는 가벼운
|
|
55
|
+
모션
|
|
56
|
+
- **지양** — 강조색의 남발, 무채색만의 정적인 화면, 튀는 네온·요란한 효과
|
|
57
|
+
|
|
58
|
+
## 4. 정보 위계와 강조
|
|
59
|
+
|
|
60
|
+
**가장 강한 것은 색이 아니라 명도와 채움이다.** 그래서 시스템의 최강조(`primary`)는 브랜드색이
|
|
61
|
+
아니라 중립 다크(먹색)이고, 퍼플·오렌지는 **역할이 다를 때만** 얹는다.
|
|
62
|
+
|
|
63
|
+
**한 화면의 강한 강조는 하나다.** 강조를 더 만들어야 하면 색을 늘리지 말고 먹색의 명도 위계로
|
|
64
|
+
먼저 낸다. 강조 액션(`accent`)이 둘이면 하나는 강조가 아니다.
|
|
65
|
+
|
|
66
|
+
**상태 색은 이 한도에 들어가지 않는다.** 성공·주의·위험은 강조가 아니라 알림이고, 대부분
|
|
67
|
+
`subtle` 틴트 배경 위에서 조용히 쓴다. 한 화면에 상태 배지가 여럿 있어도 강조 예산을 쓰지 않는다.
|
|
68
|
+
|
|
69
|
+
**다만 면적이 작은 표시에 한한다.** 배지와 아이콘은 여럿이어도 예산 밖이지만, 풀폭 틴트 배너
|
|
70
|
+
(`Alert` · `FormSection`의 `error`)는 폭이 본문과 같고 면을 가져서 본문과 무게를 겨룬다. 한
|
|
71
|
+
화면에 하나이고, 본문보다 먼저 보이면 뺀다. 어느 자리가 상태를 드는지는
|
|
72
|
+
[`DESIGN_GRAMMAR.md`](DESIGN_GRAMMAR.md) §상태는 누가 갖나와
|
|
73
|
+
[`decisions/0024`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0024-state-belongs-to-the-nearest-owner.md)에 있다.
|
|
74
|
+
|
|
75
|
+
**곁은 강조 예산을 쓰지 않는다.** 이 화면이 선언한 본문에 들지 않은 것 — 다른 기능의 요약이나
|
|
76
|
+
그리로 가는 입구 — 에는 `primary`·`accent` 채움을 주지 않는다. 강조 하나는 본문이 갖는다.
|
|
77
|
+
곁이 무엇이고 어떻게 그리는지는 [`DESIGN_GRAMMAR.md`](DESIGN_GRAMMAR.md) §곁을 어디 두나에 있고,
|
|
78
|
+
근거는 [`decisions/0022`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0022-screens-declare-their-body.md)다.
|
|
79
|
+
|
|
80
|
+
**뉴트럴이 대부분이다.** 퍼플은 핵심 액션과 선택 상태에만, 오렌지는 CTA·알림 같은 최소한의
|
|
81
|
+
순간에만 쓴다.
|
|
82
|
+
|
|
83
|
+
색을 어느 자리에 쓰는지(패밀리·켤레·글자와 아이콘)는 [`TOKEN_POLICY.md`](TOKEN_POLICY.md) §색이
|
|
84
|
+
갖는다.
|
|
85
|
+
|
|
86
|
+
### 주 액션의 자리는 시스템이 고정하지 않는다
|
|
87
|
+
|
|
88
|
+
**둘 다 맞는 자리다.** 페이지 헤더 우측 상단과 화면 아래 `BottomBar`는 서비스 성격에 따라
|
|
89
|
+
갈린다 — 읽다가 가끔 누르는 화면은 위가, 채워 넣고 마지막에 확정하는 화면은 아래가 맞다. 어느
|
|
90
|
+
쪽인지는 제품이 알고 디자인 시스템은 모른다.
|
|
91
|
+
|
|
92
|
+
그래서 시스템은 **자리를 정해 주는 대신 선언하게 한다.** 화면을 만드는 쪽이 둘 중 하나를 고르고,
|
|
93
|
+
고른 것을 화면 단위로 밝힌다.
|
|
94
|
+
|
|
95
|
+
**지키는 것은 개수다. 한 화면에 주 액션은 하나이고, 선언한 자리도 하나다.** 위아래에 같은 액션을
|
|
96
|
+
두 번 두지 않는다. 자리를 고르는 것은 자유지만 강조 하나 규칙(위 §4)은 그대로다.
|
|
97
|
+
|
|
98
|
+
**화면 단위 선언은 둘이다.** 주 액션의 자리가 하나이고, **이 화면의 본문**이 나머지 하나다
|
|
99
|
+
([`decisions/0022`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0022-screens-declare-their-body.md)). 같은 장치를 두 축에 쓴다 —
|
|
100
|
+
시스템이 정해 주는 대신 화면이 고르고 밝히고, 지키는 것은 개수다. 둘 다 승인 화면 문서가 받는다.
|
|
101
|
+
|
|
102
|
+
슬롯은 이미 둘 다 있다 — 페이지 헤더 우측 상단은 바디 안이고, 아래는 `AppShell`의 `footer`에
|
|
103
|
+
얹는 `BottomBar`다. 표는 [`LAYOUT.md`](LAYOUT.md) §셸의 콘텐츠 세로 순서에 있다.
|
|
104
|
+
|
|
105
|
+
> **타이포 위계는 확정됐다.** 페이지 `headline`(24) → 섹션·카드 `body1`(16) → 행 `body2`(14) →
|
|
106
|
+
> 보조 `label`(12)이고, 표는 [`TOKEN_POLICY.md`](TOKEN_POLICY.md) §타이포에 있다. 화면이 고르는
|
|
107
|
+
> 것은 페이지 제목 하나뿐이며 나머지는 pattern이 갖고 있다.
|
|
108
|
+
|
|
109
|
+
## 5. Palda다운 대표 특징
|
|
110
|
+
|
|
111
|
+
다른 제품과 구분되는 자리다.
|
|
112
|
+
|
|
113
|
+
- **최강조가 브랜드색이 아니다.** 주력 액션은 퍼플이 아니라 먹색이다. 브랜드색은 강조와 포인트에만
|
|
114
|
+
얹는다.
|
|
115
|
+
- **읽는 면이 가장 밝다.** 캔버스가 흰색이고 틀(사이드바·모달·드롭다운·입력)이 회색으로 물러난다.
|
|
116
|
+
"조작하는 것"과 "읽는 것"이 밝기로 갈린다.
|
|
117
|
+
- **박스가 없는 것이 기본값이다.** 정보는 여백·디바이더·타이포 위계로 구조화한다.
|
|
118
|
+
- **선은 항상 1px이다.** 포커스 링까지 같다.
|
|
119
|
+
- **아이콘은 색을 갖지 않는다.** outline 전용, `currentColor`로 부모 색을 상속한다.
|
|
120
|
+
|
|
121
|
+
### 브랜드 색 이름
|
|
122
|
+
|
|
123
|
+
색 이름은 브랜드 쪽 언어이고, 값과 사용 조건은 토큰이 갖는다.
|
|
124
|
+
|
|
125
|
+
**바탕과 글자**
|
|
126
|
+
|
|
127
|
+
| 역할 | 이름(제안) | HEX | 토큰 |
|
|
128
|
+
| ---------------------- | -------------- | --------- | ------------------------------------------------------------ |
|
|
129
|
+
| 최강조·본문(중립 다크) | 딥 잉크 (먹색) | `#323236` | `--color-primary-default` / `--color-text-primary` (gray900) |
|
|
130
|
+
| 바탕(캔버스·읽는 면) | 퓨어 화이트 | `#FFFFFF` | `--color-surface-base` (gray00) |
|
|
131
|
+
| 바탕(틀·채운 면) | 에어 그레이 | `#F5F5F7` | `--color-surface-raised` (gray50) |
|
|
132
|
+
| 바탕(눌린 컨트롤 안쪽) | 미스트 | `#EDEDF2` | `--color-surface-sunken` (gray100) |
|
|
133
|
+
| 텍스트(보조) | 소프트 잉크 | `#86868D` | `--color-text-primary-sub` (gray500) |
|
|
134
|
+
|
|
135
|
+
**역할색**
|
|
136
|
+
|
|
137
|
+
| 역할 | 이름(제안) | HEX | 토큰 |
|
|
138
|
+
| ----------------- | ------------- | --------- | --------------------------------------- |
|
|
139
|
+
| 주색(브랜드 강조) | 시그니처 퍼플 | `#6466FA` | `--color-accent-default` (purple500) |
|
|
140
|
+
| 포인트(CTA·알림) | 에너지 오렌지 | `#F77520` | `--color-secondary-default` (orange600) |
|
|
141
|
+
| 위험·경고 | 소프트 레드 | `#DE7661` | `--color-danger-default` (red400) |
|
|
142
|
+
| 성공 | 프레시 그린 | `#45922C` | `--color-success-default` (green700) |
|
|
143
|
+
| 주의 | 앰버 오렌지 | `#D9671C` | `--color-warning-default` (orange700) |
|
|
144
|
+
|
|
145
|
+
**액션 색과 상태 색은 다르게 움직인다.** 누르는 색(퍼플·오렌지·레드)은 default / hover-pressed /
|
|
146
|
+
subtle 3켤레로 움직이고, 알리기만 하는 색(그린·앰버)은 눌리지 않으므로 `hover-pressed`가 없다.
|
|
147
|
+
레드는 액션이면서 상태이기도 한 유일한 색이라 켤레를 그대로 쓴다. 켤레 표는
|
|
148
|
+
[`TOKEN_POLICY.md`](TOKEN_POLICY.md) §패밀리·§켤레에 있다.
|
|
149
|
+
|
|
150
|
+
> **값의 원본은 `tokens/color.tokens.json`이고 이 표는 사본이다.** 어긋나면 토큰이 옳다
|
|
151
|
+
> ([`decisions/0001`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0001-design-system-ssot.md)). 색 이름은 제안이며 디자이너가
|
|
152
|
+
> 확정한다. CSS에는 hex를 쓰지 않는다 — 언제나 `var(--token)`이다.
|
|
153
|
+
|
|
154
|
+
### 타이포
|
|
155
|
+
|
|
156
|
+
Pretendard, 절제된 무게. **강조는 크기가 아니라 계층과 무게로.**
|
|
157
|
+
|
|
158
|
+
- **무게** — Medium(500) 본문 · Semibold(600) 강조·라벨 · Bold(700) 제목 전용
|
|
159
|
+
- **자간** — 약간 타이트하게(-0.5% ~ -1%), 제목일수록 더 타이트
|
|
160
|
+
- **행간** — 한 줄 UI는 좁게(100%), 읽는 문장(본문·설명)은 넉넉하게(140%)
|
|
161
|
+
|
|
162
|
+
스케일과 semantic 이름은 [`TOKEN_POLICY.md`](TOKEN_POLICY.md) §타이포에 있다.
|
|
163
|
+
|
|
164
|
+
### 아이콘
|
|
165
|
+
|
|
166
|
+
가볍고 순한 라인 세트. outline 전용, 단일 굵기, 부모 색 상속. 그리기 규칙과 고르는 법은
|
|
167
|
+
[`ICON_POLICY.md`](ICON_POLICY.md)가 갖는다.
|
|
168
|
+
|
|
169
|
+
### 이미지
|
|
170
|
+
|
|
171
|
+
밝고 채광 좋은 톤, 흰 여백. **어수선한 매대보다 정돈된 한 컷.**
|
|
172
|
+
|
|
173
|
+
### 모션
|
|
174
|
+
|
|
175
|
+
가볍고 빠른 전환, 위로 살짝 뜨는 상승감. 튀지 않되 생기 있게. 빠름·보통 두 단계와 감속 이징을
|
|
176
|
+
쓰고, `prefers-reduced-motion`을 존중한다([`ACCESSIBILITY.md`](ACCESSIBILITY.md)). 값은
|
|
177
|
+
`tokens/motion.tokens.json`이다.
|
|
178
|
+
|
|
179
|
+
## 6. 지양할 디자인
|
|
180
|
+
|
|
181
|
+
**시각** — 위 §3의 각 원칙 §지양이 원본이고, 자주 어기는 것을 모았다.
|
|
182
|
+
|
|
183
|
+
| 하지 않는 것 | 대신 |
|
|
184
|
+
| ------------------------- | ------------------------------------------ |
|
|
185
|
+
| 강조색을 여러 개 나열 | 강조 하나 + 먹색의 명도 위계 |
|
|
186
|
+
| 쨍한 원색·네온 | 순한 색조. 브랜드색도 `default` 단계까지다 |
|
|
187
|
+
| 순수 검정 | 먹색(gray-900) |
|
|
188
|
+
| 두꺼운 테두리 | 1px |
|
|
189
|
+
| 어둡고 무거운 배경 | 밝은 뉴트럴 |
|
|
190
|
+
| 의미 없는 장식 | 여백 |
|
|
191
|
+
| 크기를 키워서 만드는 강조 | 계층과 무게 |
|
|
192
|
+
|
|
193
|
+
**구조** — 이미 결정된 anti-pattern이다. 판단 기준은 [`DESIGN_GRAMMAR.md`](DESIGN_GRAMMAR.md)에
|
|
194
|
+
있고, 여기서는 "하지 않는다"만 적는다.
|
|
195
|
+
|
|
196
|
+
| 하지 않는 것 | 대신 | 어디 |
|
|
197
|
+
| ------------------------------ | ------------------------------- | ------------------------------------------- |
|
|
198
|
+
| 모든 것을 카드로 감싸기 | 여백 + 디바이더 + 제목 | [`0011`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0011-no-over-carding.md) |
|
|
199
|
+
| 컨테이너 중첩 (카드 안 보더) | 디바이더. 최대 1 depth | `DESIGN_GRAMMAR.md` §절대 규칙 |
|
|
200
|
+
| 정적인 블록을 보더로 둘러 강조 | 상태·타이포·색 | 〃 |
|
|
201
|
+
| 필터를 채운 칩 박스로 | 언더라인 탭(`Tab`) | 〃 |
|
|
202
|
+
| 설정 폼·정보 패널을 벤토로 | `FormSection` | 〃 |
|
|
203
|
+
| 카드 전체를 눌러 무언가 열기 | 카드 안의 `Button` | `DESIGN_GRAMMAR.md` §세 번째 질문 |
|
|
204
|
+
| 회색 카드를 여러 장 세우기 | 기본은 흰 카드, 강조는 한 장만 | 〃 §쓰는 경우 |
|
|
205
|
+
| 그림자로 붙어 있는 블록 띄우기 | `shadow/100`은 떠 있는 표면에만 | 〃 |
|
|
206
|
+
| 색만으로 상태 전달 | 색 + 글자·아이콘 | [`ACCESSIBILITY.md`](ACCESSIBILITY.md) |
|
|
207
|
+
| CSS에 hex 리터럴 | `var(--token)` | [`TOKEN_POLICY.md`](TOKEN_POLICY.md) |
|
|
208
|
+
|
|
209
|
+
## 7. 판단이 충돌할 때
|
|
210
|
+
|
|
211
|
+
**순서다. 위가 아래를 이긴다.**
|
|
212
|
+
|
|
213
|
+
1. 사용자의 이해와 과업 완수
|
|
214
|
+
2. 접근성과 일관성
|
|
215
|
+
3. 시각적 표현
|
|
216
|
+
|
|
217
|
+
브랜드 키워드끼리 부딪히면 **정돈 · 편안함 → 생기** 순이다. 생기는 앞의 둘 위에 얹는 것이지 앞의
|
|
218
|
+
둘과 겨루지 않는다.
|
|
219
|
+
|
|
220
|
+
자주 부딪히는 자리다.
|
|
221
|
+
|
|
222
|
+
| 부딪히는 것 | 이기는 쪽 | 왜 |
|
|
223
|
+
| ---------------------------------- | ----------------- | ------------------------------------------------------------ |
|
|
224
|
+
| 강조를 하나 더 넣고 싶다 | 하나로 둔다 | 둘이면 어느 것도 강조가 아니다 (§4) |
|
|
225
|
+
| 시안이 "카드 전체 클릭"을 요구한다 | 문법 | `DESIGN_GRAMMAR.md` §세 번째 질문 |
|
|
226
|
+
| 시안의 색·값이 코드와 다르다 | 코드 | 코드가 SSOT ([`0001`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0001-design-system-ssot.md)) |
|
|
227
|
+
| 브랜드색이 예뻐서 넓게 깔고 싶다 | 뉴트럴 | 브랜드색은 강조와 포인트 전용 (§4) |
|
|
228
|
+
| 글자가 배경에 묻힌다 | 읽히는 쪽 | 수치 기준은 없어도 안 읽히면 시각 표현이 아니다 (2 > 3) |
|
|
229
|
+
| 필요한 토큰·variant·아이콘이 없다 | 멈추고 확인받는다 | 지어내지 않는다 ([`AGENTS.md`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/AGENTS.md) §항상) |
|
|
230
|
+
|
|
231
|
+
**시안이 코드를 이기는 경우는 값의 다툼이 아니라 결정을 뒤집을 때뿐이다.** 그때는 ADR을 새로 쓴다
|
|
232
|
+
([`0000-template`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0000-template.md)).
|
|
233
|
+
|
|
234
|
+
## 하지 않기로 한 것
|
|
235
|
+
|
|
236
|
+
**빠진 것이 아니라 정한 것이다.** 아래를 요구하는 시안이 오면 만들기 전에 이 절이 뒤집혔는지
|
|
237
|
+
먼저 묻는다.
|
|
238
|
+
|
|
239
|
+
| 무엇 | 지금 |
|
|
240
|
+
| ---------------------- | ------------------------------------------------------------------------------- |
|
|
241
|
+
| 다크 모드 | **쓰지 않는다.** 토큰은 라이트 한 벌이고 두 벌로 늘리지 않는다 |
|
|
242
|
+
| 파란색(`info`) | **만들지 않는다.** primitive에 파랑이 없고, 정보성 배너는 `neutral`로 받는다 |
|
|
243
|
+
| 대비 수치 기준(AA/AAA) | **세우지 않는다.** [`ACCESSIBILITY.md`](ACCESSIBILITY.md)의 "확인한다" 선까지다 |
|
|
244
|
+
|
|
245
|
+
## 아직 확정되지 않은 것
|
|
246
|
+
|
|
247
|
+
이 문서가 답해야 하는데 아직 못 답하는 것들이다. **여기 있는 항목은 화면에서 마주쳐도 지어내지
|
|
248
|
+
않고 멈춘다.**
|
|
249
|
+
|
|
250
|
+
| 무엇 | 상태 |
|
|
251
|
+
| ----------------------- | ------------------------------------------------------------------ |
|
|
252
|
+
| 표기(날짜·금액·수량) | [`CONTENT.md`](CONTENT.md) §아직 확정되지 않은 것. 말투는 확정됐다 |
|
|
253
|
+
| 로고·일러스트 사용 규칙 | `assets/` 아래에서 작업 예정. 지금은 README뿐이다 |
|
|
254
|
+
| 색 이름 | §5의 이름은 제안이다 |
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Figma 정렬 delta
|
|
2
|
+
|
|
3
|
+
**코드와 값이 어긋나는 자리를 모아, Figma 쪽에서 해야 할 변경으로 내보내는 목록이다.**
|
|
4
|
+
|
|
5
|
+
**코드가 정답이다.** 이 문서는 Figma를 코드에 맞추기 위해 **Figma 쪽에서 해야 할 변경**을 모아
|
|
6
|
+
둔 것이다. 여기 적힌 것은 코드에서 고칠 일이 아니다. 코드는 이미 오른쪽 열의 값을 갖고 있다.
|
|
7
|
+
|
|
8
|
+
이 저장소에서는 Figma를 편집할 수 없다. 그래서 "Figma가 이렇게 바뀌어야 한다"를 코드 변경 대신
|
|
9
|
+
문서로 내보낸다. 근거는 [`decisions/0001`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0001-design-system-ssot.md)이다.
|
|
10
|
+
|
|
11
|
+
**뉴트럴 스케일 자체는 더 이상 delta가 아니다.** primitive `gray-50`~`gray-900`을 Figma와 같은
|
|
12
|
+
차가운 회색으로 옮겼다([`decisions/0015`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0015-neutral-scale-adopts-figma-cool-gray.md)).
|
|
13
|
+
값의 방향을 다시 정한 것이지 SSOT가 바뀐 것은 아니고, 아래 남은 항목은 여전히 **Figma가 코드에
|
|
14
|
+
맞춰야 할 것**이다.
|
|
15
|
+
|
|
16
|
+
## 반영 방법
|
|
17
|
+
|
|
18
|
+
1. Figma Variables에서 아래 변수의 값을 "코드 값" 열로 바꾼다.
|
|
19
|
+
2. 반영이 끝난 줄은 이 문서에서 지운다. 남아 있는 줄이 곧 미반영 목록이다.
|
|
20
|
+
3. 값이 아니라 **이름**이 다른 항목은 이 문서가 아니라
|
|
21
|
+
[`FIGMA_NAME_MAPPING.md`](FIGMA_NAME_MAPPING.md)에 있다.
|
|
22
|
+
|
|
23
|
+
## 남은 항목 — 값이 어긋나는 자리
|
|
24
|
+
|
|
25
|
+
primitive는 양쪽이 같아졌고, 아래 셋은 **semantic이 어느 단계를 가리키는지**가 다르다. 색을
|
|
26
|
+
바꾸는 것이 아니라 참조를 옮기는 일이다.
|
|
27
|
+
|
|
28
|
+
| semantic token | Figma 현재 값 | 코드 값 (정답) | 코드의 primitive |
|
|
29
|
+
| ---------------------- | ------------- | -------------- | ---------------- |
|
|
30
|
+
| `color/text/primary` | `#86868d` | `#323236` | `gray-900` |
|
|
31
|
+
| `color/surface/base` | `#f5f5f7` | `#FFFFFF` | `gray-00` |
|
|
32
|
+
| `color/surface/sunken` | `#c8c8cc` | `#EDEDF2` | `gray-100` |
|
|
33
|
+
|
|
34
|
+
`color/text/primary`는 Figma가 `gray-500`을, 코드가 `gray-900`을 가리킨다. 본문 글자라 가장 어두운
|
|
35
|
+
단계가 맞다. `#86868d`는 보조 문구(`color/text/primary-sub`)의 자리다.
|
|
36
|
+
|
|
37
|
+
`color/surface/base`와 `color/surface/sunken`은 배경 위계를 뒤집으면서 한 단계씩 옮겨졌다
|
|
38
|
+
([`decisions/0013`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0013-surface-base-is-white.md)). 캔버스가 흰색이고 떠 있는 면과
|
|
39
|
+
요약 행이 회색이다.
|
|
40
|
+
|
|
41
|
+
## 남은 항목 — Figma에 아직 없는 것
|
|
42
|
+
|
|
43
|
+
값이 어긋난 것이 아니라 **코드에만 있고 Figma에 없는** 자산이다. 위 표와 달리 변수 값을 바꾸는
|
|
44
|
+
일이 아니라 Figma에서 새로 만들거나 기존 컴포넌트를 고치는 일이다.
|
|
45
|
+
|
|
46
|
+
전부 `status: draft`이고, 아래 §시안 없이 만든 것에 적힌 항목은 **시안이 나오면 코드가 바뀔 수
|
|
47
|
+
있다.** 그때는 코드가 정답이라는 규칙이 아니라 `docs/FIGMA_WORKFLOW.md`의 반영 절차를 따른다.
|
|
48
|
+
|
|
49
|
+
### 색 semantic 6개 — 새 변수
|
|
50
|
+
|
|
51
|
+
primitive는 양쪽에 이미 있다. **새로 만들 것은 semantic 6개뿐이고, 값이 아니라 참조를 거는
|
|
52
|
+
일이다.**
|
|
53
|
+
|
|
54
|
+
| semantic token | 참조할 primitive | 값 |
|
|
55
|
+
| ----------------------- | ---------------- | --------- |
|
|
56
|
+
| `color/success/default` | `green-700` | `#45922C` |
|
|
57
|
+
| `color/success/subtle` | `green-50` | `#F3F7F0` |
|
|
58
|
+
| `color/warning/default` | `orange-700` | `#D9671C` |
|
|
59
|
+
| `color/warning/subtle` | `orange-50` | `#FDF9F7` |
|
|
60
|
+
| `color/text/success` | `green-800` | `#40772E` |
|
|
61
|
+
| `color/text/warning` | `orange-800` | `#A7531B` |
|
|
62
|
+
|
|
63
|
+
`success`·`warning`은 상태 색이라 `hover-pressed`를 만들지 않는다. 눌리는 것이 아니기 때문이고,
|
|
64
|
+
근거는 [`TOKEN_POLICY.md`](TOKEN_POLICY.md)의 §패밀리에 있다. `danger`는 이미 있는 켤레를 그대로
|
|
65
|
+
쓴다 — 액션 색이면서 status이기도 한 유일한 패밀리다.
|
|
66
|
+
|
|
67
|
+
### 기존 컴포넌트에 반영할 변경 4건
|
|
68
|
+
|
|
69
|
+
| Figma 컴포넌트 | 무엇 |
|
|
70
|
+
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
71
|
+
| `Badge` | variant에 `success`·`warning`·`danger` 3종 추가 (기존 3종 → 6종) |
|
|
72
|
+
| `Card` | `tone` property 신설(`plain`/`filled`)하고 **기본값을 `filled`→`plain`으로** |
|
|
73
|
+
| `Modal` | 배경을 `surface/raised`(`#F5F5F7`) → `surface/base`(`#FFFFFF`) |
|
|
74
|
+
| `ListRow` | `tone="filled"` 배경을 `surface/sunken`(`#EDEDF2`) → `surface/raised`(`#F5F5F7`). 상하 여백 8 → 16은 `filled`만이 아니라 **모든 행**에 적용한다 |
|
|
75
|
+
|
|
76
|
+
Badge의 status variant는 틴트 배경 위 조합이다 — 배경 `{status}/subtle`, 글자 `text/{status}`,
|
|
77
|
+
아이콘 `{status}/default`이고 보더는 없다.
|
|
78
|
+
|
|
79
|
+
**`Card`의 기본값 뒤집기가 이 목록에서 가장 넓게 번진다.** Card를 쓴 시안 전부가 흰 면으로
|
|
80
|
+
바뀐다. 카드가 여럿 선 화면에서 회색 면이 반복되면 어느 것도 앞에 서지 못해서이고, 강조는
|
|
81
|
+
기본값이 아니라 한 화면에서 하나를 골라 `filled`로 올려서 낸다.
|
|
82
|
+
|
|
83
|
+
`Modal`은 스크림 위에 뜨는 유일한 면이라 흰색이다. 드롭다운·토스트·프리뷰·사이드바는 `raised`
|
|
84
|
+
그대로다.
|
|
85
|
+
|
|
86
|
+
`ListRow`의 `tone="filled"`는 `Card`의 `tone="filled"`와 같은 회색이 된다. 두 곳의 `filled`가 같은
|
|
87
|
+
뜻이라 값도 같아야 하고, 층은 색이 아니라 여백·라운드로 갈린다
|
|
88
|
+
([`decisions/0018`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0018-summary-row-shares-the-filled-surface.md)).
|
|
89
|
+
|
|
90
|
+
### 새 컴포넌트 2종
|
|
91
|
+
|
|
92
|
+
| 코드 | Figma에서 만들 것 |
|
|
93
|
+
| ------------- | -------------------------------------------------------------------------------------------------------- |
|
|
94
|
+
| `Alert` | variant 4종 — `neutral`(기본) · `accent` · `warning` · `danger`. 제목·본문·아이콘·action 슬롯. 보더 없음 |
|
|
95
|
+
| `ProgressBar` | variant·size 없음. 높이 8px 한 종류, 채움은 `primary`, label 필수 |
|
|
96
|
+
|
|
97
|
+
`Alert`에 `info` variant가 없다. 파랑 계열 primitive가 코드에 없어서이고, 명세의 파란 배너는
|
|
98
|
+
`neutral`로 받는다. **파란 배너가 필요하면 Figma에서 파랑 스케일을 먼저 정해야 한다.**
|
|
99
|
+
|
|
100
|
+
### 새 아이콘 7종
|
|
101
|
+
|
|
102
|
+
`shield-check` · `unplug` · `pause` · `message` · `success` · `store` · `loading`
|
|
103
|
+
|
|
104
|
+
원본은 `icons/svg/`이고, 그리기 규칙(24px 그리드 · 코너 radius 2px)은
|
|
105
|
+
[`ICON_POLICY.md`](ICON_POLICY.md)에 있다.
|
|
106
|
+
|
|
107
|
+
### 시안 없이 만든 것
|
|
108
|
+
|
|
109
|
+
아래는 Figma 시안 없이 코드에서 먼저 만든 초안이라, **Figma에 옮기기 전에 디자이너 확정이 먼저
|
|
110
|
+
필요하다.** 각 항목의 미정 사항은 `catalog/`의 `planned` 필드에 적혀 있다.
|
|
111
|
+
|
|
112
|
+
- `Alert` — `info` variant 없음, 닫기 버튼 없음
|
|
113
|
+
- `ProgressBar` — 높이 8px이 명세 실측값이고 대응 토큰이 없음
|
|
114
|
+
- 아이콘 7종 — 전부 `status: draft`
|
|
115
|
+
|
|
116
|
+
## 해결됨 — 뉴트럴 4건
|
|
117
|
+
|
|
118
|
+
아래는 0015로 primitive를 옮기면서 양쪽 값이 같아졌다. Figma에서 할 일이 없다.
|
|
119
|
+
|
|
120
|
+
`color/border/default`(`#ededf2`) · `color/border/strong`(`#c8c8cc`) ·
|
|
121
|
+
`color/primary/default`(`#323236`) · `color/primary/hover-pressed`(`#47474c`).
|
|
122
|
+
|
|
123
|
+
`border`는 값이 같아진 것과 별개로 참조 단계도 함께 내렸다 — `default`는 `gray-200` → `gray-100`,
|
|
124
|
+
`strong`은 `gray-300` → `gray-200`이다. 박스를 걷어낸 뒤 화면의 구분이 디바이더 하나에 걸려서
|
|
125
|
+
이전 단계는 너무 진했다.
|
|
126
|
+
|
|
127
|
+
## 해결됨 — `color/accent/subtle`
|
|
128
|
+
|
|
129
|
+
이 항목은 처음에 위 표에 있었으나 **코드를 고쳐서 없앴다.** delta가 아니라 코드의 결함이었다.
|
|
130
|
+
|
|
131
|
+
Figma의 purple 스케일은 `50 #F3F3FF` · `100 #EBEBFE` · `200 #B3B4FC`로 갈라져 있는데, 코드는
|
|
132
|
+
`50`과 `100`이 둘 다 `#EBEBFE`였다. `50` 자리에 `100`의 값이 들어가 있었고, `200` 이하는 양쪽이
|
|
133
|
+
일치하므로 어긋난 것은 `purple-50` 한 칸이었다.
|
|
134
|
+
|
|
135
|
+
양쪽 모두 `accent/subtle → purple-50`으로 매핑은 같았다. semantic의 이견이 아니라 primitive 한
|
|
136
|
+
칸의 값 사고였으므로, **코드를 정답으로 두는 규칙의 예외가 아니다.** 코드의 `purple-50`을
|
|
137
|
+
`#F3F3FF`로 고쳐 양쪽이 같아졌다.
|
|
138
|
+
|
|
139
|
+
`color/accent/subtle`이 한 단계 밝아지면서 이 토큰을 쓰는 Chip·Button·IconButton·Badge의 틴트와
|
|
140
|
+
`ListRow`의 선택 배경이 함께 밝아졌다. 배경이 밝아진 방향이라 그 위 `text/accent`(purple-600)의
|
|
141
|
+
대비는 올라간다.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Figma → 코드 이름 매핑
|
|
2
|
+
|
|
3
|
+
**같은 것을 Figma와 코드가 다르게 부르는 자리의 대조표다.**
|
|
4
|
+
|
|
5
|
+
**코드 이름이 정답이다.** Figma에서 다른 이름을 쓰고 있는 항목을 여기 모은다. 시안을 읽고 코드를
|
|
6
|
+
쓸 때 이 표로 옮기고, Figma 쪽을 정리할 때도 이 표를 목표로 삼는다.
|
|
7
|
+
|
|
8
|
+
값이 다른 항목은 이 문서가 아니라 [`FIGMA_ALIGNMENT_DELTA.md`](FIGMA_ALIGNMENT_DELTA.md)에 있다.
|
|
9
|
+
여기는 **이름만** 다루고, 근거는 [`decisions/0001`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0001-design-system-ssot.md)이다.
|
|
10
|
+
|
|
11
|
+
## CSS 변수 접두사
|
|
12
|
+
|
|
13
|
+
코드의 CSS 변수는 Figma가 선언한 `cssVar`에 `palda-` 접두사를 붙인 것이다
|
|
14
|
+
(`--radius-md` ↔ `--palda-radius-md`). 무접두사 이름이 소비 앱의 전역 변수와 충돌해서다
|
|
15
|
+
([`decisions/0017`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0017-css-variable-prefix.md)). Figma에서 변수 이름을 검색해
|
|
16
|
+
코드로 올 때는 접두사만 붙이면 되고, 그 외 규칙은 아래 표와 같다. 이 문서에서 패밀리를
|
|
17
|
+
뭉뚱그려 부를 때는 `--layout-*`처럼 접두사 없이 쓰고, 코드에 실재하는 변수를 가리킬 때는
|
|
18
|
+
`--palda-layout-inset`처럼 전체 이름을 쓴다.
|
|
19
|
+
|
|
20
|
+
## 색 패밀리
|
|
21
|
+
|
|
22
|
+
| Figma 이름 | 코드 이름 (정답) | 값 |
|
|
23
|
+
| ---------- | ---------------- | ------ |
|
|
24
|
+
| `point` | `secondary` | orange |
|
|
25
|
+
|
|
26
|
+
오렌지 패밀리는 `secondary`다. Figma의 `point`는 채택하지 않는다. `point`는 "강조"라는 뜻이라
|
|
27
|
+
`accent`와 구분되지 않고, Palda에서 강조 액션은 `accent`(퍼플) 하나다.
|
|
28
|
+
|
|
29
|
+
## 텍스트 색 — 매핑이 뒤바뀐 자리
|
|
30
|
+
|
|
31
|
+
**주의: 이름이 서로 바뀌어 있다.** 기계적으로 같은 이름끼리 옮기면 색이 뒤집힌다.
|
|
32
|
+
|
|
33
|
+
| Figma | 코드 (정답) | 값 |
|
|
34
|
+
| ---------------- | ---------------- | ------------------- |
|
|
35
|
+
| `text/accent` | `text/secondary` | `orange-500` (주황) |
|
|
36
|
+
| `text/secondary` | `text/accent` | `purple-600` (퍼플) |
|
|
37
|
+
|
|
38
|
+
코드는 패밀리 이름과 텍스트 이름을 맞춰 두었다. `secondary` 패밀리가 주황이므로 `text/secondary`도
|
|
39
|
+
주황이고, `accent` 패밀리가 퍼플이므로 `text/accent`도 퍼플이다. Figma는 이 둘이 어긋나 있다.
|
|
40
|
+
|
|
41
|
+
## 상태 접미사
|
|
42
|
+
|
|
43
|
+
| Figma | 코드 (정답) |
|
|
44
|
+
| --------- | ----------------- |
|
|
45
|
+
| `*-hover` | `*-hover-pressed` |
|
|
46
|
+
|
|
47
|
+
코드는 hover와 pressed를 한 상태로 다룬다. `docs/TOKEN_POLICY.md`의 켤레 규칙에서 정한 것이고,
|
|
48
|
+
`color/{family}/hover-pressed` 하나가 두 상태를 모두 덮는다. Figma의 `*-hover`는 pressed가 빠진
|
|
49
|
+
이름이라 채택하지 않는다.
|
|
50
|
+
|
|
51
|
+
대상: `color/primary/hover-pressed` · `color/accent/hover-pressed` ·
|
|
52
|
+
`color/secondary/hover-pressed` · `color/danger/hover-pressed` · `color/state/hover-pressed`.
|
|
53
|
+
|
|
54
|
+
## 폰트 웨이트
|
|
55
|
+
|
|
56
|
+
**주의: 이름은 겹치는데 가리키는 값이 다르다.** `medium`이 양쪽에 있고 값이 500과 600으로 다르다.
|
|
57
|
+
|
|
58
|
+
| Figma | 값 | 코드 (정답) | 값 |
|
|
59
|
+
| --------- | --- | ----------- | --- |
|
|
60
|
+
| `regular` | 500 | `medium` | 500 |
|
|
61
|
+
| `medium` | 600 | `semibold` | 600 |
|
|
62
|
+
| — | 700 | `bold` | 700 |
|
|
63
|
+
|
|
64
|
+
코드는 CSS `font-weight` 숫자의 관례 이름을 따른다. 500은 medium, 600은 semibold, 700은 bold다.
|
|
65
|
+
Figma의 `regular`는 관례상 400이므로 500에 붙으면 다른 곳에서 읽을 때 어긋난다.
|
|
66
|
+
|
|
67
|
+
`palda-text-*` 클래스 이름에도 이 이름이 그대로 들어간다
|
|
68
|
+
(`palda-text-body2-regular-medium`의 뒷부분이 웨이트다).
|
|
69
|
+
|
|
70
|
+
## 그림자
|
|
71
|
+
|
|
72
|
+
| Figma | 코드 (정답) |
|
|
73
|
+
| ---------- | ------------ |
|
|
74
|
+
| `depth100` | `shadow/100` |
|
|
75
|
+
|
|
76
|
+
단계 번호는 그대로 두고 접두어만 코드 컨벤션에 맞춘다. 근거는
|
|
77
|
+
[`decisions/0009`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0009-elevation-shadow-tokens.md)에 있다.
|
|
78
|
+
|
|
79
|
+
## 이 표에 없는 것
|
|
80
|
+
|
|
81
|
+
레이아웃 여백·치수 토큰(`--layout-*` 패밀리와 `--palda-space-gap-xl` 등)은 Figma에 대응하는 변수가 없다. Figma
|
|
82
|
+
실측값을 코드에서 처음 토큰화한 것이라 매핑할 짝이 없다.
|
|
83
|
+
[`decisions/0008`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0008-layout-scale-separate-from-component-scale.md)과
|
|
84
|
+
[`LAYOUT.md`](LAYOUT.md)를 본다.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Figma Workflow
|
|
2
|
+
|
|
3
|
+
**Figma에서 정한 것을 저장소에 반영하고, 시안 코드를 읽어 구현으로 옮기는 절차다.**
|
|
4
|
+
|
|
5
|
+
**원본은 저장소이고 Figma는 미러다**([`decisions/0016`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0016-asset-ssot-boundary.md)).
|
|
6
|
+
그래서 이 문서의 절차는 한 방향이다 — Figma에서 정한 것을 저장소에 **반영해야** 끝나고, 반영되기
|
|
7
|
+
전까지는 확정이 아니다. 값이 어긋나면 코드가 옳고, Figma가 바뀌어야 할 목록은
|
|
8
|
+
[`FIGMA_ALIGNMENT_DELTA.md`](FIGMA_ALIGNMENT_DELTA.md)에 낸다.
|
|
9
|
+
|
|
10
|
+
1. `figma/LIBRARY_LINKS.md`에서 디자인 시스템 파일의 placeholder 이름을 확인한다. 실제 URL은 저장소가 아니라 각자의 `figma.local.config.json`에 있다([`decisions/0026`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0026-figma-keys-stay-out-of-the-repository.md)).
|
|
11
|
+
2. Variables는 `tokens/`와 같은 이름과 의미를 사용한다. 이름이 다른 자리는
|
|
12
|
+
[`FIGMA_NAME_MAPPING.md`](FIGMA_NAME_MAPPING.md)에 있고, 정답은 `tokens/` 쪽 이름이다.
|
|
13
|
+
3. 반복 요소는 Component와 Variant로 만든다.
|
|
14
|
+
4. Auto Layout과 semantic layer name을 사용한다.
|
|
15
|
+
5. Figma에서 정한 변경은 저장소의 원본(`tokens/`·`icons/svg/`·`components/src/`·`catalog/`)에
|
|
16
|
+
반영해야 확정된다. 값을 옮기더라도 "Figma가 옳으니 따른다"가 아니라 저장소에서 다시 정한
|
|
17
|
+
것으로 기록한다 — 전례는 [`decisions/0015`](https://github.com/highpixel-co/palda-design-system/blob/0504d8eaa033955d7a70414616ee999e447a0ced/docs/decisions/0015-neutral-scale-adopts-figma-cool-gray.md)다.
|
|
18
|
+
6. Library publish 전에 Storybook의 실제 브라우저 결과를 확인한다. 승인은 Figma가 아니라
|
|
19
|
+
Storybook과 `contact-sheet`에서 난다.
|
|
20
|
+
|
|
21
|
+
## 시안 코드 읽는 법
|
|
22
|
+
|
|
23
|
+
Figma가 내보낸 코드는 `box-sizing: border-box` 기준의 **고정 `height`**로 읽는다. Auto Layout 프레임의 높이가 고정이면 export에는 `height`와 padding이 함께 적히지만, 실제 렌더 높이를 결정하는 것은 `height`다.
|
|
24
|
+
|
|
25
|
+
- `height`와 `padding`, 텍스트 `line-height`의 합이 어긋나 보여도 스펙 오류가 아니다. 남는 padding이 압축되고 내용은 flex 정렬로 중앙에 남는다. 예: `height: 24px` + `padding-block: 8px` + `line-height: 12px`는 28px이 아니라 24px로 렌더된다.
|
|
26
|
+
- 이 값들을 `min-height`로 옮기면 계산이 어긋나 실제보다 큰 높이가 나온다. `height`를 그대로 쓰고 padding도 시안 값을 유지한다.
|
|
27
|
+
- 수치가 맞지 않아 보인다고 padding을 임의로 조정하지 않는다.
|
|
28
|
+
|
|
29
|
+
`fontSize`와 같은 `lineHeight`는 `line-height: 100%`를 뜻하므로, 대응하는 텍스트 스타일 token이 있으면 개별 속성 대신 그 스타일을 쓴다.
|
|
30
|
+
|
|
31
|
+
## 시안에 없는 값
|
|
32
|
+
|
|
33
|
+
focus 링, transition, hover 피드백처럼 시안이 다루지 않은 항목은 임의로 정하지 않는다. 구현에 필요해 값을 넣었다면 어떤 값을 왜 넣었는지 함께 알리고 확정을 받는다.
|