@highpixel-co/palda-design-system 0.4.1 → 0.6.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/{chunk-GPCPGABI.js → chunk-6JZPK2W5.js} +10 -2
- package/dist/{chunk-Q4UXASZH.js → chunk-QW2SD3XV.js} +13 -5
- 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 +132 -0
- package/dist/guide/catalog/tokens.yml +14 -0
- package/dist/guide/docs/ACCESSIBILITY.md +36 -0
- package/dist/guide/docs/AI_UI_DESIGNER_HANDOFF.md +258 -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 +480 -0
- package/dist/guide/docs/DESIGN_PRINCIPLES.md +263 -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 +266 -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 +1325 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/patterns.d.ts +15 -2
- package/dist/patterns.js +2 -2
- package/dist/scripts/check-examples.mjs +406 -0
- package/dist/styles.css +11 -0
- package/dist/ui.d.ts +6 -1
- package/dist/ui.js +1 -1
- package/package.json +13 -2
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# 앱에서 Palda DS 사용하기
|
|
2
|
+
|
|
3
|
+
패키지 하나에 UI 코드·스타일·타입과 이 설명서, 자산 목록, 앱용 검사 도구가 들어 있다.
|
|
4
|
+
패키지를 빌드할 때 같은 DS 원본에서 함께 생성하므로 다른 DS 저장소를 내려받지 않아도 된다.
|
|
5
|
+
패키지의 `dist/guide/docs/`는 사용 문서, `dist/guide/catalog/`는 자산 목록,
|
|
6
|
+
`dist/harness/metadata.json`은 같은 버전의 export·상태·아이콘 대체표다.
|
|
7
|
+
|
|
8
|
+
## 처음 한 번 연결
|
|
9
|
+
|
|
10
|
+
Node.js 22.12 이상, React 19 이상의 웹 앱을 대상으로 한다. 검사기의 TypeScript와 YAML
|
|
11
|
+
의존성은 패키지 설치에 포함되며 브라우저용 UI import에는 들어가지 않는다.
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
pnpm add --save-exact @highpixel-co/palda-design-system
|
|
15
|
+
pnpm exec palda-ds guide
|
|
16
|
+
pnpm exec palda-ds check
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
npm 프로젝트는 `npm install --save-exact`와 `npm exec -- palda-ds check`를 사용한다.
|
|
20
|
+
과거 비공개 registry 설정이 남아 있다면 프로젝트 `.npmrc`의 `@highpixel-co:registry`를
|
|
21
|
+
`https://registry.npmjs.org/`로 변경한다. 계정 토큰은 필요 없다.
|
|
22
|
+
|
|
23
|
+
앱 시작점에서 `@highpixel-co/palda-design-system/styles.css`를 한 번 import한다. 자산은
|
|
24
|
+
`/ui`, `/patterns`, `/icons`, `/tokens`의 이름 있는 export로 불러온다.
|
|
25
|
+
`palda-ds check`는 앱 manifest와 잠금 파일이 **실행 중인 패키지의 정확한 버전**과 같은지도
|
|
26
|
+
확인한다. pnpm lockfile v9와 npm lockfile v2/v3을 지원한다. 다른 형식은 구성 오류로 실패한다.
|
|
27
|
+
워크스페이스에서는 앱 디렉터리에서 실행하거나 `--root apps/web`처럼 앱 경로를 지정한다.
|
|
28
|
+
|
|
29
|
+
## 작업할 때 읽는 순서
|
|
30
|
+
|
|
31
|
+
- 화면 조립: [디자인 원칙](./DESIGN_PRINCIPLES.md) → [디자인 문법](./DESIGN_GRAMMAR.md)
|
|
32
|
+
- 컴포넌트 선택: [컴포넌트 목록](../catalog/components.yml)과 [패턴 목록](../catalog/patterns.yml)
|
|
33
|
+
- 토큰: [토큰 정책](./TOKEN_POLICY.md)
|
|
34
|
+
- 아이콘: [아이콘 정책](./ICON_POLICY.md)과 [아이콘 목록](../catalog/icons.yml)
|
|
35
|
+
- 키보드·읽기 순서: [접근성](./ACCESSIBILITY.md)
|
|
36
|
+
|
|
37
|
+
Stable 자산을 먼저 사용한다. Draft 자산은 catalog의 사용 조건과 검토 질문을 확인한다.
|
|
38
|
+
catalog의 `source`·`story`는 DS 원본 저장소의 경로다. 설치된 패키지의 prop 타입은
|
|
39
|
+
`dist/ui.d.ts`와 `dist/patterns.d.ts`에서 확인한다.
|
|
40
|
+
`check`는 Draft import 위치를 보고하지만 모든 Draft를 금지하지 않는다. variant별 사용 조건과
|
|
41
|
+
화면 전체의 적절성은 문서·타입·브라우저 검토로 확인한다. Storybook 검토 환경과 DS 제작 전용
|
|
42
|
+
생성·release 검사는 DS 저장소에 있고, 앱용 CLI를 실행하는 데 필요하지 않다.
|
|
43
|
+
|
|
44
|
+
## 검사 명령과 경로
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
pnpm exec palda-ds check --root . --json
|
|
48
|
+
pnpm exec palda-ds screens --root .
|
|
49
|
+
pnpm exec palda-ds --version
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`check`는 기본 `src/`의 JS·JSX·TS·TSX·MJS·CJS·MTS·CTS를 읽는다. test/spec/stories/gen 파일과
|
|
53
|
+
타입 선언 파일, node_modules·dist·coverage·.git 디렉터리는 제외한다. 파일 개수와 제외 개수,
|
|
54
|
+
예외 적용 개수를 출력한다. symlink 소스와 프로젝트 밖 소스 경로는 지원하지 않는다.
|
|
55
|
+
|
|
56
|
+
DS 경계를 우회하는 Radix/CVA import, DS로 대체 가능한 Lucide import, 존재하지 않는 DS
|
|
57
|
+
export를 검사한다. 이름을 숨기는 namespace·동적 import/require·export-star는 DS와 Lucide에
|
|
58
|
+
대해 오류로 보고하므로 명시적인 이름으로 바꾼다. 계산식으로 구성한 모듈 경로까지 추적하는
|
|
59
|
+
번들 분석기는 아니다. 앱의 lint·타입 검사도 함께 유지한다.
|
|
60
|
+
|
|
61
|
+
경로가 다르면 앱에 `palda-ds.config.json`을 한 번 만든다. 경로는 앱 루트 기준이다.
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"source": ["src"],
|
|
66
|
+
"screens": ["preview"],
|
|
67
|
+
"exceptions": []
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
설정 파일 위치를 바꾸려면 `--config config/palda-ds.json`을 사용한다. 알 수 없는 설정 키,
|
|
72
|
+
누락된 디렉터리, 검사 대상 0개는 실패다. 화면 검사는 별도 명령이므로 앱에 HTML 시안이 없으면
|
|
73
|
+
`check`만 연결한다. HTML 시안을 관리한다면 `screens`도 전체 검사에 연결한다.
|
|
74
|
+
|
|
75
|
+
`screens`는 지정 디렉터리의 HTML **화면 시안**을 검사한다. 파일 맨 위 주석의 화면 선언 표와
|
|
76
|
+
`palda-app-shell__band--body` 안의 `data-screen-role` 블록을 기존 디자인 문법으로 검사한다.
|
|
77
|
+
셸이 없는 컴포넌트 조각은 화면 통과로 처리하지 않는다. 컴포넌트 시안은 다른 폴더에 보관한다.
|
|
78
|
+
실행 중인 React 화면의 시각적 결과를 자동 촬영하거나 판정하지는 않는다.
|
|
79
|
+
|
|
80
|
+
## 기존 화면의 예외
|
|
81
|
+
|
|
82
|
+
기존 위반을 단계적으로 전환할 때만 정확한 파일·규칙·심볼과 이유를 기록한다.
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"exceptions": [
|
|
87
|
+
{
|
|
88
|
+
"file": "src/LegacySearch.tsx",
|
|
89
|
+
"rule": "icon-import",
|
|
90
|
+
"symbol": "Search",
|
|
91
|
+
"reason": "기존 검색 화면을 DS로 전환할 때 제거"
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
허용 rule은 `primitive-import`, `icon-import`, `opaque-import`다. primitive·opaque의 symbol은
|
|
98
|
+
모듈 이름, icon의 symbol은 가져온 원래 이름이다. 폴더 prefix와 wildcard 예외는 없다.
|
|
99
|
+
예외 설정은 코드 리뷰 대상으로 두고 전환한 파일의 예외를 제거한다.
|
|
100
|
+
|
|
101
|
+
## AI 작업과 CI 연결
|
|
102
|
+
|
|
103
|
+
앱의 `AGENTS.md` 또는 `CLAUDE.md`에 다음 진입점을 넣는다.
|
|
104
|
+
|
|
105
|
+
```text
|
|
106
|
+
UI 작업 전 설치된 DS 패키지의 dist/guide/docs/CONSUMER_GUIDE.md를 읽는다.
|
|
107
|
+
작업 중 검사 시점과 범위는 변경 내용에 따라 판단한다.
|
|
108
|
+
오류 수정 뒤 실패 검사를 다시 실행하고, 제출 전에는 DS 검사를 포함한 전체 검사를 수행한다.
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
앱의 기존 전체 검사 명령에 `palda-ds check`를 추가한다. 예:
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"scripts": {
|
|
116
|
+
"check:ds": "palda-ds check",
|
|
117
|
+
"verify": "pnpm check:ds && pnpm lint && pnpm typecheck && pnpm test && pnpm build"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
기존 CI에서 의존성 설치 후 `pnpm verify`를 실행하면 작업자나 AI가 바뀌어도 같은 검사로
|
|
123
|
+
확인한다. 프로젝트별 최초 연결은 필요하지만 매 작업마다 연결하지 않는다. 설치 과정에서
|
|
124
|
+
앱 파일이나 GitHub 설정을 자동 변경하지 않는다.
|
|
125
|
+
|
|
126
|
+
CI 실패 시 병합까지 차단하려면 관리자가 해당 job을 필수 상태 검사로 지정해야 한다. 기존
|
|
127
|
+
자동 동기화·bot PR도 검사 완료를 기다릴 수 있는지 먼저 확인한다. CLI는 검사 결과와 exit
|
|
128
|
+
code를 제공하며 GitHub 권한이나 병합 정책을 대신 설정하지 않는다.
|
|
129
|
+
|
|
130
|
+
검사 결과는 실행한 곳의 표준 출력으로만 나온다. 앱 소스·사용처 보고서는 DS 패키지나 공개
|
|
131
|
+
저장소에 수집하지 않는다. JSON 결과를 파일로 저장할 때는 소비 프로젝트의 로컬 산출물로 관리한다.
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Content
|
|
2
|
+
|
|
3
|
+
**제품 문구의 말투와 표기를 정하는 문서다.**
|
|
4
|
+
|
|
5
|
+
읽는 사람은 스마트스토어를 혼자 운영하는 셀러다. 옆에서 대신 봐 줄 사람이 없고, 화면의 문구가
|
|
6
|
+
곧 안내다. 인상은 [`DESIGN_PRINCIPLES.md`](DESIGN_PRINCIPLES.md) §1·§2를 따른다.
|
|
7
|
+
|
|
8
|
+
## 말투
|
|
9
|
+
|
|
10
|
+
**문장은 "요"로 끝난다.** 해요체다. "~습니다"(합쇼체)를 쓰지 않는다.
|
|
11
|
+
|
|
12
|
+
**친절한 서비스직 말투다.** 매장에서 손님을 맞는 사람의 말이지, 공지문이나 약관의 말이 아니다.
|
|
13
|
+
딱딱하게 알리는 대신 옆에서 알려 주듯 쓴다.
|
|
14
|
+
|
|
15
|
+
| 이렇게 | 이렇게 말고 |
|
|
16
|
+
| --------------------------- | ------------------------------- |
|
|
17
|
+
| 변경한 내용을 저장했어요 | 변경사항이 저장되었습니다 |
|
|
18
|
+
| 연동할 스토어를 골라 주세요 | 스토어를 선택하십시오 |
|
|
19
|
+
| 아직 등록한 상품이 없어요 | 등록된 상품이 존재하지 않습니다 |
|
|
20
|
+
| 잠시만 기다려 주세요 | 처리 중입니다 |
|
|
21
|
+
|
|
22
|
+
**높임의 대상은 사람이지 사물이 아니다.** "주문이 있으세요"가 아니라 "주문이 있어요"다.
|
|
23
|
+
|
|
24
|
+
**명령하지 않는다.** "~하십시오"·"~하세요"보다 "~해 주세요"가 기본이고, 그마저 필요 없는 자리는
|
|
25
|
+
평서문으로 끝낸다.
|
|
26
|
+
|
|
27
|
+
## 오류와 성공 — 겁주지 않는다
|
|
28
|
+
|
|
29
|
+
**오류 문구가 무섭지 않아야 한다.** 혼자 쓰는 사람에게 강한 경고는 도움이 아니라 부담이다.
|
|
30
|
+
무슨 일이 있었는지와 지금 무엇을 하면 되는지, 둘만 담는다.
|
|
31
|
+
|
|
32
|
+
| 하지 않는 것 | 대신 |
|
|
33
|
+
| ----------------------------------- | ----------------------------------------------- |
|
|
34
|
+
| 겁주는 단어 — 경고·실패·오류·불가 | 무슨 일이 있었는지 그대로 ("저장하지 못했어요") |
|
|
35
|
+
| 느낌표 | 마침표 없는 평서문 |
|
|
36
|
+
| 사용자를 탓하기 ("잘못 입력했어요") | 조건을 알려 주기 ("숫자만 넣을 수 있어요") |
|
|
37
|
+
| 되돌릴 수 없다는 말을 앞세우기 | 무엇이 사라지는지 담담하게 |
|
|
38
|
+
| 원인만 적고 끝내기 | 다음에 할 일을 한 문장 덧붙이기 |
|
|
39
|
+
|
|
40
|
+
**되돌릴 수 없는 일은 숨기지 않는다.** 겁주지 않는 것과 알리지 않는 것은 다르다. "영구적으로
|
|
41
|
+
삭제됩니다!"가 아니라 "삭제하면 다시 불러올 수 없어요"다.
|
|
42
|
+
|
|
43
|
+
**성공은 짧게.** 한 문장이면 된다. 축하하거나 칭찬하지 않는다.
|
|
44
|
+
|
|
45
|
+
## 버튼
|
|
46
|
+
|
|
47
|
+
### 라벨은 고정이다
|
|
48
|
+
|
|
49
|
+
**버튼의 글자는 어떤 상태에서도 바뀌지 않는다.** 눌렀다고, 값이 정해졌다고, 처리 중이라고 글자가
|
|
50
|
+
바뀌지 않는다.
|
|
51
|
+
|
|
52
|
+
| 자리 | 이렇게 | 이렇게 말고 |
|
|
53
|
+
| -------------------- | ------------------ | ----------------------- |
|
|
54
|
+
| 스토어를 고르는 버튼 | `선택하기` 로 고정 | 고른 뒤 `우리집상회` 로 |
|
|
55
|
+
| 저장 중 | `저장하기` 로 고정 | `저장 중...` 으로 |
|
|
56
|
+
| 이미 연동된 스토어 | `연동하기` 로 고정 | `연동됨` 으로 |
|
|
57
|
+
|
|
58
|
+
버튼은 **누르면 무슨 일이 일어나는지**를 말하는 자리다. 지금 무엇이 골라졌는지, 처리가 어디까지
|
|
59
|
+
갔는지는 버튼 밖에서 말한다 — 고른 값은 버튼 옆이나 아래, 진행 상태는 `ProgressBar`나
|
|
60
|
+
`Toast`다.
|
|
61
|
+
|
|
62
|
+
**진행 중은 글자가 아니라 `disabled`로 표현한다.** `Button`에 로딩 전용 prop이 없는 것이
|
|
63
|
+
그래서다([`components/src/Button/Button.tsx`](https://github.com/highpixel-co/palda-design-system/blob/ad23980481cd81dcf09a1044504d2295f0e4a0f3/components/src/Button/Button.tsx)).
|
|
64
|
+
|
|
65
|
+
### "~기"로 끝난다
|
|
66
|
+
|
|
67
|
+
**버튼 라벨은 동사이고 "~기"로 끝난다.** 명사로 끝내지 않는다.
|
|
68
|
+
|
|
69
|
+
| 이렇게 | 이렇게 말고 |
|
|
70
|
+
| --------- | ----------- |
|
|
71
|
+
| 저장하기 | 저장 |
|
|
72
|
+
| 다시 하기 | 다시 시도 |
|
|
73
|
+
| 더 보기 | 더보기 |
|
|
74
|
+
| 충전하기 | 충전 |
|
|
75
|
+
|
|
76
|
+
## 오류·성공·Empty State 문구 구조
|
|
77
|
+
|
|
78
|
+
**컴포넌트가 칸을 이미 정해 두었다.** 문구는 그 칸에 맞춘다.
|
|
79
|
+
|
|
80
|
+
| 자리 | 칸 | 무엇을 넣나 |
|
|
81
|
+
| --------------------- | --------------------------------------- | --------------------------------------------------- |
|
|
82
|
+
| `EmptyState` | `title` · `description` · `actionLabel` | 무엇이 없는지 · 왜 비어 있는지나 다음 할 일 · "~기" |
|
|
83
|
+
| `Alert` | 제목 · 본문 · action | 무슨 일인지 · 다음에 할 일 · "~기" |
|
|
84
|
+
| `Toast` | 메시지 한 줄 | 끝난 일 하나. 설명을 붙이지 않는다 |
|
|
85
|
+
| `TextField`의 `error` | 한 줄 | 무엇이 맞지 않는지와 어떤 값이면 되는지 |
|
|
86
|
+
|
|
87
|
+
**제목에는 상태를, 설명에는 다음 할 일을 쓴다.** 두 칸에 같은 말을 나눠 쓰지 않는다.
|
|
88
|
+
|
|
89
|
+
**Empty State는 사과하지 않는다.** "아직 없어요"까지가 사실이고, 그다음은 만들 수 있는 길이다.
|
|
90
|
+
|
|
91
|
+
## 설명은 언제 붙이나
|
|
92
|
+
|
|
93
|
+
**기본은 제목만이다.** `Card`·`FormSection`·`ListRow`의 `description`은 비워 둔다. 칸이 있으니
|
|
94
|
+
채우는 것이 화면에 설명이 쌓이는 가장 흔한 이유다.
|
|
95
|
+
|
|
96
|
+
### 붙일지는 사람이 정한다
|
|
97
|
+
|
|
98
|
+
**중복인지 아닌지를 매번 따져서 채우지 않는다.** 한 화면의 설명이 위층과 겹치는지, 아래 값과
|
|
99
|
+
겹치는지, 제목을 뒤집어 말한 것인지를 전부 확인하는 일은 화면마다 어렵고 판단도 갈린다.
|
|
100
|
+
|
|
101
|
+
그래서 절차로 가른다. **시안은 제목만 둔 상태로 만들고, 설명이 필요해 보이는 자리는 묻는다.**
|
|
102
|
+
묻지 않고 채우지 않는다. 붙이기로 정한 자리만 채운다.
|
|
103
|
+
|
|
104
|
+
### 붙이기로 했다면 — 그 자리에서만 할 수 있는 말
|
|
105
|
+
|
|
106
|
+
셋 중 하나가 아니면 설명이 아니다.
|
|
107
|
+
|
|
108
|
+
| 무엇 | 예 |
|
|
109
|
+
| ----------------------- | ---------------------------------------------- |
|
|
110
|
+
| 눈에 안 보이는 사실 | 10분마다 새 주문을 가져와요 |
|
|
111
|
+
| 제목이 원인일 때의 대처 | 스마트스토어에 다시 로그인하면 이어서 수집해요 |
|
|
112
|
+
| 어디로 가야 하는지 | 위의 자동 수집 스위치를 켜면 다시 시작해요 |
|
|
113
|
+
|
|
114
|
+
`Chrome · v1.4.2`나 `MacBook Pro · Chrome 129`처럼 **값을 적는 자리는 설명이 아니다.** 위 규칙의
|
|
115
|
+
대상이 아니고 그대로 둔다.
|
|
116
|
+
|
|
117
|
+
**제목을 다시 말하는 설명은 붙이기로 정한 자리에도 쓰지 않는다.** 뒤집어 말한 것도 다시 말한
|
|
118
|
+
것이다 — "브라우저를 닫아 뒀을 때 / 브라우저가 켜져 있을 때만 움직여요"는 한 문장을 앞뒤로 나눠
|
|
119
|
+
쓴 것이다.
|
|
120
|
+
|
|
121
|
+
**목록의 행 설명은 전부 붙이거나 전부 뺀다.** 한 행만 설명이 없으면 그 행이 덜 중요해 보인다.
|
|
122
|
+
어느 한 행에서 지울 이유가 생기면 지우는 대신 위 셋 중 하나로 고쳐 쓴다.
|
|
123
|
+
|
|
124
|
+
## 아직 확정되지 않은 것
|
|
125
|
+
|
|
126
|
+
**여기 있는 것은 화면에서 마주쳐도 지어내지 않고 멈춘다.**
|
|
127
|
+
|
|
128
|
+
| 무엇 | 상태 |
|
|
129
|
+
| --------------------- | ---------------------------------------------------------------------------------- |
|
|
130
|
+
| 메뉴 라벨 | 지금 코드의 사이드바 항목은 명사다(`배송과정`·`클레임`). 규칙으로 확정된 적은 없다 |
|
|
131
|
+
| 동일 액션의 고정 명칭 | 한 액션에 한 이름을 쓴다는 규칙만 있고, 대조표가 없다. 아래 §제안 참고 |
|
|
132
|
+
| 날짜 표기 | 미확정 |
|
|
133
|
+
| 금액 표기 | 미확정 |
|
|
134
|
+
| 수량 표기 | 미확정 |
|
|
135
|
+
| 대화상자 버튼의 예외 | `취소`·`확인`에도 "~기"를 붙일지 (`취소하기`·`확인하기`) |
|
|
136
|
+
|
|
137
|
+
### 제안 — 고정 명칭 후보
|
|
138
|
+
|
|
139
|
+
**확정 전이다.** 지금 저장소의 스토리·예시에 실제로 쓰인 라벨을 위 규칙에 맞춰 옮긴 것이다.
|
|
140
|
+
|
|
141
|
+
| 지금 코드에 있는 것 | 제안 |
|
|
142
|
+
| ------------------- | --------- |
|
|
143
|
+
| 저장 | 저장하기 |
|
|
144
|
+
| 초기화 | 되돌리기 |
|
|
145
|
+
| 다시 시도 | 다시 하기 |
|
|
146
|
+
| 알림 받기 | 알림 받기 |
|
|
147
|
+
| 확인 | 확인하기 |
|
|
148
|
+
| 취소 | 취소하기 |
|