@infomind-ux/infoux-mcp 0.2.0 → 0.2.1
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/manifest.json +4 -4
- package/data/references/accessibility.md +22 -1
- package/data/references/krds-components.md +1 -1
- package/data/references/krds-tokens.md +1 -1
- package/data/references/release-checklist.md +2 -0
- package/data/references/trade-off-rules.md +5 -0
- package/package.json +1 -1
package/data/manifest.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "c43579d",
|
|
3
3
|
"generated": "scripts/build-mcp.js",
|
|
4
4
|
"references": [
|
|
5
5
|
{
|
|
6
6
|
"id": "accessibility",
|
|
7
7
|
"file": "accessibility.md",
|
|
8
|
-
"chars":
|
|
8
|
+
"chars": 6196,
|
|
9
9
|
"summary": "KRDS는 **WCAG 2.1 Level AA 이상 + KWCAG 2.1/2.2** 준수를 강제한다. 본 스킬도 이를 그대로 따른다."
|
|
10
10
|
},
|
|
11
11
|
{
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
{
|
|
60
60
|
"id": "release-checklist",
|
|
61
61
|
"file": "release-checklist.md",
|
|
62
|
-
"chars":
|
|
62
|
+
"chars": 2373,
|
|
63
63
|
"summary": "자동검사가 통과했다고 배포해도 되는 것은 아니다. `npm run check`는 규칙 위반을 잡을 뿐, \"이 화면이 쓸 만한가\"는 판단하지 못한다."
|
|
64
64
|
},
|
|
65
65
|
{
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
{
|
|
78
78
|
"id": "trade-off-rules",
|
|
79
79
|
"file": "trade-off-rules.md",
|
|
80
|
-
"chars":
|
|
80
|
+
"chars": 2127,
|
|
81
81
|
"summary": "좋은 원칙끼리 부딪히는 순간이 실제 작업의 대부분이다. \"접근성도 중요하고 브랜드도 중요하다\"는 말은 결정을 미룰 뿐이다. 아래는 **무엇이 무엇을 이기는지**를 미리 정한 것이다."
|
|
82
82
|
}
|
|
83
83
|
],
|
|
@@ -75,6 +75,24 @@ button:focus { outline: 0; }
|
|
|
75
75
|
|
|
76
76
|
**`div/span 클릭 핸들러 패턴` 절대 금지.** 클릭 가능한 요소는 button 또는 a.
|
|
77
77
|
|
|
78
|
+
### 새 창 링크 (KWCAG)
|
|
79
|
+
|
|
80
|
+
`target="_blank"`는 사용자가 예측하지 못한 맥락 전환이다 — **열기 전에 예고한다.**
|
|
81
|
+
|
|
82
|
+
```html
|
|
83
|
+
<!-- 텍스트에 고지 -->
|
|
84
|
+
<a href="..." target="_blank" rel="noopener">이용약관 <span class="sr-only">(새 창 열림)</span></a>
|
|
85
|
+
|
|
86
|
+
<!-- 아이콘으로 고지할 때 — 아이콘은 장식, 고지는 텍스트가 담당 -->
|
|
87
|
+
<a href="..." target="_blank" rel="noopener" aria-label="이용약관 (새 창 열림)">
|
|
88
|
+
이용약관 <i class="icon-external" aria-hidden="true"></i>
|
|
89
|
+
</a>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
- `target="_blank"`에는 `rel="noopener"` 필수
|
|
93
|
+
- 고지는 시각(아이콘·문구)과 스크린리더(`sr-only`·`aria-label`) 양쪽에 전달한다
|
|
94
|
+
- 예고 없는 새 창은 KWCAG 심사에서 걸린다 — 꼭 필요한 곳에만 쓰고, 기본은 같은 창 이동
|
|
95
|
+
|
|
78
96
|
---
|
|
79
97
|
|
|
80
98
|
## 5. 폼 접근성
|
|
@@ -194,6 +212,7 @@ button:focus { outline: 0; }
|
|
|
194
212
|
- `prefers-reduced-motion: reduce` 미디어 쿼리로 **자동 비활성화** — 불필요한 transition·animation은 모션 감소 시 제거
|
|
195
213
|
- **자동 재생 슬라이드/캐러셀 금지** (사용자가 명시 활성화 안 했으면 OFF) — WCAG 2.2.2
|
|
196
214
|
- 자동 재생 시 **일시정지 버튼 필수**
|
|
215
|
+
- **초당 3회를 넘는 번쩍임 금지** — WCAG 2.3.1 / KWCAG 광과민성 발작 예방. 점멸 배너·경고 강조·로딩 효과 전부 해당하며, 예외 없이 금지다
|
|
197
216
|
|
|
198
217
|
```css
|
|
199
218
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -239,5 +258,7 @@ KRDS는 **light + high-contrast** 두 모드 시스템 차원에서 지원.
|
|
|
239
258
|
- [ ] Skip link 제공?
|
|
240
259
|
- [ ] 다크/고대비 토글 시 깨지지 않음 (raw 색 0건이면 자동)?
|
|
241
260
|
- [ ] `prefers-reduced-motion` 대응?
|
|
261
|
+
- [ ] `target="_blank"` 링크에 새 창 예고 + `rel="noopener"`?
|
|
262
|
+
- [ ] 초당 3회 넘는 번쩍임 0건?
|
|
242
263
|
|
|
243
|
-
위
|
|
264
|
+
위 14개 중 하나라도 No → 작업 미완으로 간주.
|
|
@@ -64,6 +64,8 @@
|
|
|
64
64
|
- [ ] 발주처 개발자가 6개월 뒤 이 코드를 고칠 수 있는 구조인가
|
|
65
65
|
- [ ] 토큰·BEM·카탈로그를 벗어난 부분이 있다면 이유가 주석이나 문서에 남아 있는가
|
|
66
66
|
- [ ] `--deliver`로 만든 납품본이 `npm install` → `npm run build` → `npm run check`로 자립 통과하는가
|
|
67
|
+
- [ ] 외부 origin 리소스(스크립트·스타일·폰트·위젯)가 없는가 — 불가피한 CDN은 버전 고정 + SRI + `crossorigin`인가 (`trade-off-rules.md` §4)
|
|
68
|
+
- [ ] 배포 환경 제약을 확인했는가 — 폐쇄망·CSP 환경이라면 외부 CDN·인라인 스크립트·런타임 컴파일이 그 환경에서 실제로 동작하는가
|
|
67
69
|
|
|
68
70
|
---
|
|
69
71
|
|
|
@@ -38,6 +38,11 @@ WCAG 2.1 AA는 우리 프로젝트에서 **협상 대상이 아니다.** 공공
|
|
|
38
38
|
|
|
39
39
|
카탈로그에 있는 컴포넌트로 풀 수 있으면 그것을 쓴다. 카탈로그 밖 컴포넌트가 정말 필요하다고 판단되면 **임의로 만들지 말고 UX팀 결정으로 확장한다.** 용어도 마찬가지다 — 같은 것을 페이지마다 다르게 부르지 않는다.
|
|
40
40
|
|
|
41
|
+
**외부 라이브러리·스크립트 도입도 같은 원칙이다.** 새 의존을 붙이기 전에 기존 스택(토큰·카탈로그·표준 CSS·이미 쓰는 라이브러리)으로 풀리는지 먼저 검토하고, 도입은 UX팀 결정을 거친다. 도입이 확정되면:
|
|
42
|
+
|
|
43
|
+
- **셀프호스트를 우선한다** — 납품물은 self-contained가 원칙이고, 폐쇄망·내부망 배포에서 외부 CDN은 그대로 장애다.
|
|
44
|
+
- 불가피하게 CDN을 쓰면 **버전 고정 + SRI(`integrity`) + `crossorigin`** 세 가지를 함께 건다. 버전 고정만으로는 공급망 변조를 막지 못한다.
|
|
45
|
+
|
|
41
46
|
## 5. 유지보수 가능성 > 기교
|
|
42
47
|
|
|
43
48
|
우리가 만든 것을 **발주처가 이어받는다.** 영리하지만 우리만 이해하는 해법은 인수인계 시점에 부채가 된다.
|