React 밖에서도
깨지지 않는 약속.
.axe-* 클래스만 쓰는 Rust maud, Python jinja, 정적 HTML 소비자와의 공개 계약입니다. 예측 가능한 이름과 변경 규율을 문서보다 코드에 가깝게 관리합니다.명명 규칙
prefix 하나 · 변수 하나 — 소비자가 예측 가능하게.
| 패턴 | 의미 | 예 |
|---|---|---|
.axe-<component> | 컴포넌트 루트 | .axe-btn |
.axe-<c>__<part> | 내부 파트 (BEM element) | .axe-card__title |
.axe-<c>--<variant> | 변형 (BEM modifier) | .axe-btn--primary |
--<token> | 디자인 토큰 (CSS 변수) | --accent · --bg-base · --space-4 |
안정성 보장
컴포넌트 문서의 클래스 표에 붙는 stable / internal 배지가 계약 등급.
비-React 소비 절차
서비스별 concat 대신 선언형 config에서 같은 CSS·theme·font·lock을 생성합니다.
| # | 파일 | 역할 |
|---|---|---|
| 1 | tokens/index.css | font import를 최상단에 hoist하고 모든 토큰을 전개 |
| 2 | styles/reset.css | 최소 리셋을 토큰 뒤에 배치 |
| 3 | styles/components.css | 15개 group import를 실제 cascade 순서로 재귀 전개 |
@import 미해석 환경 — managed output, public font base, compatibility profile만 선언합니다. 수동으로 파일을 이어붙이거나 package 내부 경로를 복사하지 않습니다.
{ "$schema": "./node_modules/@axe/ui/consumer-config.schema.json", "out": "static/axe-ui", "assetBase": "fonts", "compatibility": "modern"}# CSS·theme·font·OFL을 stage하고 SHA lock을 마지막에 promotenpx --no-install axe-ui-export --config axe-ui.consumer.json# build/ship gate — 파일을 고치지 않고 drift만 검사npx --no-install axe-ui-export --config axe-ui.consumer.json --check@import 해석 번들러 (Next · webpack · vite) — 진입점 두 개로 충분. components.css 가 그룹 파일을 @import 로 말아올린다. 첫 설치 때 axe-ui-copy-fonts로 same-origin 폰트 자산도 복사한다:
/* Next/webpack/vite 등 @import 해석 번들러 — 두 줄이면 충분. components.css 가 나머지 그룹(form·layout·indicators·document …)을 @import 로 이미 말아올린다. tokens 는 별도 진입점. */import "@axe/ui/tokens"; /* CSS 변수 (light/dark) */import "@axe/ui/components.css"; /* .axe-* 전 그룹 */어느 환경에서나 같은 단일 파일이 필요하면 canonical entry를 사용합니다. 비-React 서비스에서는 이 entry를 직접 복사하지 않고 Consumer Kit의 axe-ui.css를 route에 연결합니다.
/* 번들러 유무와 무관한 단일 정본 — local @import 0 */import "@axe/ui/bundle.css";라이선스에 맞춘 자산 전달
OFL 핵심 폰트는 자체완결하고 ITF FFL 브랜드 폰트는 공식 API가 직접 전달합니다.
버전 · CHANGELOG
현재 계약 버전과 변경 이력의 SSOT.
| 항목 | SSOT | 비고 |
|---|---|---|
| 현재 버전 | src/lib/VERSION | v0.22.1 — semver |
| 변경 이력 | CHANGELOG.md | stable 표면 변경·deprecation 공지 기록 |
| release manifest | packages/ui/package.json | ESM exports · peer · CLI · private publish gate |
| 소비자 증빙 | axe-ui.lock.json | version · payload/selector/file SHA · compatibility |
| 컨벤션 | src/lib/ARCHITECTURE.md | 컴포넌트 작성 규약 |
테마 · 브랜드 오버라이드
같은 계약의 색 축 — 무엇을 갈아끼우면 재스킨이고, 무엇을 바꾸면 시스템이 깨지는가.
색 토큰은 두 층이다. 브랜드층(--brand-* · --accent* · --cta*, 정체성 캐리어)은 테넌트가 theme-template.css 사본을 소유해 값만 바꾼다. 구조층(gray ramp · 보더 · 상태색 · 그림자)은 대비 보장·상태 의미를 지고 있어 전 테넌트 공통 — 이 계약이 보호하는 표면과 같은 원리로 불변이다.