sh-ui-cli 0.38.0 → 0.39.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/data/changelog/versions.json +17 -0
- package/package.json +1 -1
- package/src/api.d.ts +7 -0
- package/src/create/theme/presets.js +18 -5
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$description": "sh-ui 릴리즈 노트 단일 소스. docs(React)와 showcase(Flutter)가 함께 읽는다. 새 릴리즈마다 맨 앞에 추가.",
|
|
4
4
|
"versions": [
|
|
5
|
+
{
|
|
6
|
+
"version": "0.39.0",
|
|
7
|
+
"date": "2026-04-29",
|
|
8
|
+
"title": "프리셋 정체성 강화 — slate / rose / violet 이 typography·controls·borders 도 차별화",
|
|
9
|
+
"type": "minor",
|
|
10
|
+
"highlights": [
|
|
11
|
+
"0.38.0 까지 5 프리셋이 색·radius 만 차별화 → 이제 typography·controls·borders 까지 프리셋 별 인상이 다름. neutral / emerald 는 디폴트 baseline (변화 없음), 나머지 셋은 정체성 부여",
|
|
12
|
+
"**slate** (정보 밀도) — text-base 14px (xs 11/sm 12/lg 16/xl 18/2xl 21/3xl 26/4xl 32), control-md 36px (sm 28/lg 44). 대시보드/관리자 인상",
|
|
13
|
+
"**rose** (친근·여유) — control-md 44px (sm 36/lg 52). 큼직한 터치 타겟 + 0.75rem 라운드 → 소비자 앱 인상",
|
|
14
|
+
"**violet** (모던·또렷) — control-md 42px (sm 34/lg 50), border-width-strong 3px (디폴트 2px). 약간 두꺼운 강조 보더로 창의·디자인 도구 인상",
|
|
15
|
+
"getThemePreset 시그니처 — 이전 `{light, dark, radius}` 만 → 이제 label 빼고 모든 카테고리 forward. CLI inject 가 자동으로 마커 섹션 교체",
|
|
16
|
+
"api.d.ts ThemePreset 인터페이스에 옵셔널 카테고리 6종 추가 (typography/controls/borders/spacing/weights/durations) — apps/docs 등 외부 사용자가 타입 안전",
|
|
17
|
+
"테스트 111개 (전 104 → +7). end-to-end 검증 — `--theme rose` 가 control-md 40 → 44 로 덮어쓰는지, `--theme slate` 가 text-base 16 → 14 로, `--theme violet` 이 border-width-strong 2 → 3 으로",
|
|
18
|
+
"참고: 기존 사용자가 0.38.0 까지 `--theme rose` 로 만든 프로젝트는 영향 없음 (이미 생성된 tokens.css 는 그대로). 새로 `--theme rose` 하면 0.39.0 정체성 그대로 들어감"
|
|
19
|
+
],
|
|
20
|
+
"url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.39.0"
|
|
21
|
+
},
|
|
5
22
|
{
|
|
6
23
|
"version": "0.38.0",
|
|
7
24
|
"date": "2026-04-29",
|
package/package.json
CHANGED
package/src/api.d.ts
CHANGED
|
@@ -60,6 +60,13 @@ export interface ThemePreset {
|
|
|
60
60
|
dark: Record<ThemeTokenKey, string>;
|
|
61
61
|
/** rem 단위 (0~1.5). */
|
|
62
62
|
radius: number;
|
|
63
|
+
/** v0.39.0+ — 프리셋 별 정체성 차별화 (옵셔널). decode.js SCALAR_CATEGORIES 와 동일 키. */
|
|
64
|
+
typography?: Record<string, number>;
|
|
65
|
+
controls?: Record<string, number>;
|
|
66
|
+
borders?: Record<string, number>;
|
|
67
|
+
spacing?: Record<string, number>;
|
|
68
|
+
weights?: Record<string, number>;
|
|
69
|
+
durations?: Record<string, number>;
|
|
63
70
|
}
|
|
64
71
|
|
|
65
72
|
export const THEME_PRESETS: Record<ThemePresetName, ThemePreset>;
|
|
@@ -50,7 +50,7 @@ export const THEME_PRESETS = {
|
|
|
50
50
|
radius: 0.5,
|
|
51
51
|
},
|
|
52
52
|
slate: {
|
|
53
|
-
label: '슬레이트 — 차분한 슬레이트 + 인디고',
|
|
53
|
+
label: '슬레이트 — 차분한 슬레이트 + 인디고 (정보 밀도)',
|
|
54
54
|
light: {
|
|
55
55
|
'background': '#FFFFFF',
|
|
56
56
|
'background-subtle': '#F8FAFC',
|
|
@@ -86,9 +86,12 @@ export const THEME_PRESETS = {
|
|
|
86
86
|
'danger-foreground': '#450A0A',
|
|
87
87
|
},
|
|
88
88
|
radius: 0.375,
|
|
89
|
+
// 정보 밀도 ↑ — 본문 14px 부터, 컨트롤 36px (대시보드/관리자 인상)
|
|
90
|
+
typography: { xs: 11, sm: 12, base: 14, lg: 16, xl: 18, '2xl': 21, '3xl': 26, '4xl': 32 },
|
|
91
|
+
controls: { sm: 28, md: 36, lg: 44 },
|
|
89
92
|
},
|
|
90
93
|
rose: {
|
|
91
|
-
label: '로즈 — 핑크 강조 + 둥근 모서리',
|
|
94
|
+
label: '로즈 — 핑크 강조 + 둥근 모서리 (친근·여유)',
|
|
92
95
|
light: {
|
|
93
96
|
...NEUTRAL_LIGHT,
|
|
94
97
|
'primary': '#E11D48',
|
|
@@ -102,6 +105,8 @@ export const THEME_PRESETS = {
|
|
|
102
105
|
'primary-hover': '#FDA4AF',
|
|
103
106
|
},
|
|
104
107
|
radius: 0.75,
|
|
108
|
+
// 큰 모서리 + 큼직한 컨트롤 — 소비자 앱 / 캐주얼 인상
|
|
109
|
+
controls: { sm: 36, md: 44, lg: 52 },
|
|
105
110
|
},
|
|
106
111
|
emerald: {
|
|
107
112
|
label: '에메랄드 — 그린 강조',
|
|
@@ -120,7 +125,7 @@ export const THEME_PRESETS = {
|
|
|
120
125
|
radius: 0.5,
|
|
121
126
|
},
|
|
122
127
|
violet: {
|
|
123
|
-
label: '바이올렛 — 퍼플 강조 + 살짝 라운드',
|
|
128
|
+
label: '바이올렛 — 퍼플 강조 + 살짝 라운드 (모던·또렷)',
|
|
124
129
|
light: {
|
|
125
130
|
...NEUTRAL_LIGHT,
|
|
126
131
|
'primary': '#7C3AED',
|
|
@@ -134,14 +139,22 @@ export const THEME_PRESETS = {
|
|
|
134
139
|
'primary-hover': '#C4B5FD',
|
|
135
140
|
},
|
|
136
141
|
radius: 0.625,
|
|
142
|
+
// 살짝 큰 컨트롤 + 진한 강조 보더 (creative/디자인 도구 인상)
|
|
143
|
+
controls: { sm: 34, md: 42, lg: 50 },
|
|
144
|
+
borders: { width: 1, widthStrong: 3 },
|
|
137
145
|
},
|
|
138
146
|
};
|
|
139
147
|
|
|
140
148
|
export const THEME_PRESET_NAMES = Object.keys(THEME_PRESETS);
|
|
141
149
|
|
|
142
|
-
/**
|
|
150
|
+
/**
|
|
151
|
+
* 프리셋 객체에서 ThemeConfig 형태로 변환 — 사용자에게 보이는 label 빼고 모두 forward.
|
|
152
|
+
* v0.39.0 부터 light/dark/radius 외에 옵셔널 카테고리(typography/controls/borders/...)
|
|
153
|
+
* 도 그대로 전달돼 CLI inject 가 카테고리별 마커 섹션을 교체한다.
|
|
154
|
+
*/
|
|
143
155
|
export const getThemePreset = (name) => {
|
|
144
156
|
const preset = THEME_PRESETS[name];
|
|
145
157
|
if (!preset) return null;
|
|
146
|
-
|
|
158
|
+
const { label: _label, ...themeConfig } = preset;
|
|
159
|
+
return themeConfig;
|
|
147
160
|
};
|