케이스 이어하기 UI와 공통 탭·이미지 복구를 반영
This commit is contained in:
parent
72353ecd82
commit
f1b80676c1
38 changed files with 3581 additions and 455 deletions
|
|
@ -20,17 +20,23 @@ function countRawColors(source) {
|
|||
|
||||
const shellPath = "src/components/shell/shell.css";
|
||||
const surfacePath = "src/components/ui/ui.css";
|
||||
const tabsPath = "src/components/ui/Tabs.tsx";
|
||||
const settingsPath = "src/pages/settings/settings.css";
|
||||
const sessionPath = "src/pages/Session.tsx";
|
||||
const learnerHomePath = "src/pages/LearnerHome.tsx";
|
||||
const adminPath = "src/pages/Admin.tsx";
|
||||
const personaStudioPath = "src/pages/PersonaStudio.tsx";
|
||||
const personaViewModelPath = "src/lib/personaViewModel.ts";
|
||||
const appPath = "src/App.tsx";
|
||||
const designDocPath = "../../docs/DESIGN_CONCEPT.md";
|
||||
const shell = await read(shellPath);
|
||||
const surface = await read(surfacePath);
|
||||
const tabs = await read(tabsPath);
|
||||
const settings = await read(settingsPath);
|
||||
const session = await read(sessionPath);
|
||||
const learnerHome = await read(learnerHomePath);
|
||||
const admin = await read(adminPath);
|
||||
const personaStudio = await read(personaStudioPath);
|
||||
const personaViewModel = await read(personaViewModelPath);
|
||||
const app = await read(appPath);
|
||||
const designDoc = await read(designDocPath);
|
||||
|
|
@ -95,6 +101,26 @@ forbid(
|
|||
/#[0-9a-f]{3,8}|rgba?\(/i,
|
||||
"공통 UI 색은 tokens.css 의미 토큰으로만 표현해야 합니다",
|
||||
);
|
||||
forbid(
|
||||
tabsPath,
|
||||
tabs,
|
||||
/surfaceClassName|vg-surface/,
|
||||
"Tabs behavior primitive는 콘텐츠 Surface를 만들면 안 됩니다",
|
||||
);
|
||||
for (const required of [
|
||||
'role="tablist"',
|
||||
'role="tab"',
|
||||
"aria-controls",
|
||||
"aria-labelledby",
|
||||
"tabIndex",
|
||||
'"ArrowRight"',
|
||||
'"Home"',
|
||||
'"End"',
|
||||
]) {
|
||||
if (!tabs.includes(required)) {
|
||||
failures.push(`${tabsPath}: Tabs 접근성 계약 누락 (${required})`);
|
||||
}
|
||||
}
|
||||
forbid(
|
||||
shellPath,
|
||||
shell,
|
||||
|
|
@ -113,6 +139,21 @@ forbid(
|
|||
/#[0-9a-f]{3,8}|rgba?\(/i,
|
||||
"학습자 화면의 아바타 팔레트는 personaViewModel SSOT를 우회하면 안 됩니다",
|
||||
);
|
||||
for (const [relativePath, source, className, owner] of [
|
||||
[adminPath, admin, "vgops-tabs", "관리자 탭 목록"],
|
||||
[personaStudioPath, personaStudio, "ps-tabs", "페르소나 제작 탭 목록"],
|
||||
[adminPath, admin, "vgops-approval", "가입 승인 연속 목록 행"],
|
||||
[adminPath, admin, "vgops-ticket", "지원 티켓 연속 목록 행"],
|
||||
]) {
|
||||
forbid(
|
||||
relativePath,
|
||||
source,
|
||||
new RegExp(
|
||||
`surfaceClassName\\(["'](?:[^"']*\\s)?${className}(?:\\s[^"']*)?["']`,
|
||||
),
|
||||
`${owner}은 콘텐츠 Surface가 아니라 공통 컨트롤 또는 외곽 목록 프레임이 소유해야 합니다`,
|
||||
);
|
||||
}
|
||||
forbid(
|
||||
settingsPath,
|
||||
settings,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue