sh-ui-cli 0.59.1 → 0.59.3

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.
@@ -2,6 +2,34 @@
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.59.3",
7
+ "date": "2026-05-06",
8
+ "title": "접근성 라운드 3 — Card container queries (자기 너비 기준 반응형)",
9
+ "type": "patch",
10
+ "highlights": [
11
+ "**`Card` 가 `container-type: inline-size` 로 컨테이너 컨텍스트 생성** — 자신의 width 기준으로 sub-element padding 조정 가능.",
12
+ "**`@container (max-width: 20rem)` 블록 추가** — Card 자체 너비가 320px 이하일 때 gap/padding 자동 축소 (`--space-6 → --space-4`). viewport 가 아닌 **부모 컨테이너** 기준이라 좁은 사이드바·column 안에 Card 가 들어가도 자연스럽게.",
13
+ "**기존 `max-sm:` viewport 룰과 별개로 동작** — 둘 다 fire 해도 같은 값이라 충돌 없음. 모바일 viewport + 어떤 width 든 / 데스크탑 viewport + 좁은 column 등 모두 커버.",
14
+ "**3 variant 동기화** — plain CSS / CSS Modules / apps/docs. Tailwind variant 는 `container-type` 이 inline class 로 표현 어려워 plain CSS 위주.",
15
+ "**Sidebar 등 다른 컴포넌트로 확장**: 사용자 요청 시 추가 라운드 가능. Card 가 가장 명확한 win 이라 우선 적용."
16
+ ],
17
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.59.3"
18
+ },
19
+ {
20
+ "version": "0.59.2",
21
+ "date": "2026-05-06",
22
+ "title": "접근성 라운드 2 — WCAG audit + prefers-contrast: high 모드",
23
+ "type": "patch",
24
+ "highlights": [
25
+ "**WCAG color contrast audit 수행** — 모든 색 토큰 조합 검증. 결과: foreground / foreground-muted / primary / danger 는 모두 AA 이상 통과. **fail 발견**: foreground-subtle (light 2.52, dark 4.18) / border (1.26~1.31) / border-strong (1.48~1.91) — 모두 stark 의도라 일반 모드에서 변경 안 함 (시각 hierarchy 손실 우려).",
26
+ "**`prefers-contrast: high` 모드 신설** — 사용자가 OS/브라우저에서 \"고대비\" 옵션 켜면 자동 적용. 위 fail 토큰만 AA-compliant 값으로 강화: `foreground-subtle`/`border`/`border-strong` 이 4.5:1 (text) / 3:1 (UI) 이상 보장. 일반 사용자 영향 0, 접근성 사용자만 활성화.",
27
+ "**dark 모드 + 고대비 조합 처리** — 명시 `.dark` 클래스 + 시스템 자동 다크 (`prefers-color-scheme: dark`) 둘 다 nested `@media` 로 매칭.",
28
+ "**4 tokens.css 위치 + pactrack 동기화**",
29
+ "**design 가이드** — 일반 작업에서 \"비활성 텍스트\" 가 필요하면 `foreground-subtle` 대신 `foreground-muted` 사용 권장 (AAA 통과). subtle 은 hint/timestamp 같은 비-critical 정보 한정."
30
+ ],
31
+ "url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.59.2"
32
+ },
5
33
  {
6
34
  "version": "0.59.1",
7
35
  "date": "2026-05-06",
@@ -8,6 +8,22 @@
8
8
  border: 1px solid var(--border);
9
9
  border-radius: var(--radius);
10
10
  box-shadow: var(--shadow-sm);
11
+ /* 자기 너비 기준으로 sub-element padding 조정. */
12
+ container-type: inline-size;
13
+ }
14
+
15
+ /* Card 자체 너비가 좁을 때 padding 자동 축소.
16
+ * viewport 기반 max-sm 과 별개로 — 어떤 viewport 든 Card 자체가 좁으면 적용. */
17
+ @container (max-width: 20rem) {
18
+ .sh-ui-card {
19
+ gap: var(--space-4);
20
+ padding: var(--space-4) 0;
21
+ }
22
+ .sh-ui-card__header,
23
+ .sh-ui-card__content,
24
+ .sh-ui-card__footer {
25
+ padding-inline: var(--space-4);
26
+ }
11
27
  }
12
28
 
13
29
  /* 헤더: 기본은 타이틀/설명 세로 스택. action 있으면 2열 그리드로 전환. */
@@ -8,6 +8,20 @@
8
8
  border: 1px solid var(--border);
9
9
  border-radius: var(--radius);
10
10
  box-shadow: var(--shadow-sm);
11
+ container-type: inline-size;
12
+ }
13
+
14
+ /* Card 자체 너비가 좁을 때 padding 자동 축소. */
15
+ @container (max-width: 20rem) {
16
+ .card {
17
+ gap: var(--space-4);
18
+ padding: var(--space-4) 0;
19
+ }
20
+ .header,
21
+ .content,
22
+ .footer {
23
+ padding-inline: var(--space-4);
24
+ }
11
25
  }
12
26
 
13
27
  /* 헤더: 기본은 타이틀/설명 세로 스택. action 있으면 2열 그리드로 전환. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sh-ui-cli",
3
- "version": "0.59.1",
3
+ "version": "0.59.3",
4
4
  "description": "sh-ui CLI — 프로젝트 스캐폴드(create) + 컴포넌트 추가(add/list/remove) + IDE-내 AI용 MCP 서버",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -145,3 +145,25 @@
145
145
  --control-md: 2.75rem;
146
146
  }
147
147
  }
148
+
149
+ /* WCAG AA 보장 — 사용자가 OS/브라우저에서 "고대비" 접근성 옵션 켰을 때.
150
+ * foreground-subtle, border, border-strong 만 강화 (다른 토큰은 이미 AA 통과). */
151
+ @media (prefers-contrast: high) {
152
+ :root {
153
+ --foreground-subtle: #767676;
154
+ --border: #767676;
155
+ --border-strong: #595959;
156
+ }
157
+ .dark {
158
+ --foreground-subtle: #B3B3B3;
159
+ --border: #757575;
160
+ --border-strong: #999999;
161
+ }
162
+ @media (prefers-color-scheme: dark) {
163
+ :root:not(.light):not(.dark) {
164
+ --foreground-subtle: #B3B3B3;
165
+ --border: #757575;
166
+ --border-strong: #999999;
167
+ }
168
+ }
169
+ }
@@ -145,3 +145,25 @@
145
145
  --control-md: 2.75rem;
146
146
  }
147
147
  }
148
+
149
+ /* WCAG AA 보장 — 사용자가 OS/브라우저에서 "고대비" 접근성 옵션 켰을 때.
150
+ * foreground-subtle, border, border-strong 만 강화 (다른 토큰은 이미 AA 통과). */
151
+ @media (prefers-contrast: high) {
152
+ :root {
153
+ --foreground-subtle: #767676;
154
+ --border: #767676;
155
+ --border-strong: #595959;
156
+ }
157
+ .dark {
158
+ --foreground-subtle: #B3B3B3;
159
+ --border: #757575;
160
+ --border-strong: #999999;
161
+ }
162
+ @media (prefers-color-scheme: dark) {
163
+ :root:not(.light):not(.dark) {
164
+ --foreground-subtle: #B3B3B3;
165
+ --border: #757575;
166
+ --border-strong: #999999;
167
+ }
168
+ }
169
+ }
@@ -145,3 +145,25 @@
145
145
  --control-md: 2.75rem;
146
146
  }
147
147
  }
148
+
149
+ /* WCAG AA 보장 — 사용자가 OS/브라우저에서 "고대비" 접근성 옵션 켰을 때.
150
+ * foreground-subtle, border, border-strong 만 강화 (다른 토큰은 이미 AA 통과). */
151
+ @media (prefers-contrast: high) {
152
+ :root {
153
+ --foreground-subtle: #767676;
154
+ --border: #767676;
155
+ --border-strong: #595959;
156
+ }
157
+ .dark {
158
+ --foreground-subtle: #B3B3B3;
159
+ --border: #757575;
160
+ --border-strong: #999999;
161
+ }
162
+ @media (prefers-color-scheme: dark) {
163
+ :root:not(.light):not(.dark) {
164
+ --foreground-subtle: #B3B3B3;
165
+ --border: #757575;
166
+ --border-strong: #999999;
167
+ }
168
+ }
169
+ }