- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록) - `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록 — 창끼리 공유하되 저장소에는 안 올리는 장부 - 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠) - graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4.5 KiB
4.5 KiB
B07 CAD 테마 통합 완료 아카이브
- 완료일: 2026-08-29
- 상태: 사용자 검증 완료
- 검증:
docs/raw/verification/2026-08-29_verify_B07_CAD_theme.md - 검증 방식: 사용자 실무 검증 채택, Codex 2차 교차검증 생략
완료 범위
B07 CAD 화면 테마 통합 — 앱 디자인 토큰·화이트/블랙 모드 (2026-08-29 구현 완료, 검증 대기)
배경(사용자 지시 2026-08-29): B07은 CAD 프로그램 영역인데 UI가 본 프로그램과 따로 논다. 앱 상단 ☀/☾ 토글로 바꾸는 화이트/블랙 모드가 iframe 안 CAD에는 전혀 반영되지 않는다(App.css에 하드코딩 다크 색 88개).
현황 조사:
- 앱 테마 =
document.documentElement[data-theme]("light"/"dark", 미지정 시prefers-color-scheme) +localStorage["frd_theme"](A00_Common/app_shell.ts:26-40). 토큰 정의처ui_template/ui_template_theme.css(:root/:root[data-theme="dark"]/ media 폴백, 외부 @import·url 없음). - CAD는 별도 vite 빌드(iframe, 동일 오리진) —
openwebcad/src/App.css577줄에#19222d·#202b37등 다크 전용 색이 박혀 있고,index.html은bg-white·bg-slate-950·bg-black유틸로 배경을 고정한다. - 캔버스 색은
App.consts.ts의CANVAS_BACKGROUND_COLOR='#111'1곳 (screenCanvas.drawController.ts:333)과 그리드#242b35(336). - 도면 엔티티 색은 백엔드 생성값(GROUND
#f5f7fa, TABLE_LABEL#e8edf4등 밝은 색 다수) — 라이트 모드 흰 배경에서 안 보인다. 저장 데이터라 값 자체는 못 바꾼다(수정하면 저장본 오염). Button.tsx·DropdownButton.tsx·LayerManager.tsx는 tailwind 색 유틸 (bg-gray-950·text-blue-500·text-white)로 다크 고정.
설계 방향(라이트/다크 단일 소스):
- CAD 빌드가 앱 토큰 파일을 직접 import — 색 정의를 두 벌로 만들지 않는다.
- 테마 전달은 동일 오리진 localStorage +
storage이벤트 — 부모가 토글하며 쓰는frd_theme를 iframe이 그대로 받는다(부모 코드 수정 0, postMessage 불필요). - 도면 엔티티 색은 그릴 때만 보정 — 라이트 모드에서 휘도가 높은 색만
어둡게 환산(
drawController한 곳). 저장 데이터는 불변.
체크리스트 (2026-08-29 구현·자체검증 완료 — 검증 대기):
openwebcad/src/theme.ts신설 —frd_theme동기화(boot +storage이벤트 + 시스템 폴백),themeColor()토큰 조회 캐시,paintColor()휘도 보정. 테마가 바뀌면 캐시를 비우고bumpSceneVersion()으로 정적 장면 비트맵도 다시 굽는다 (계획 대비 추가 — 캐시 비트맵에 배경·선 색이 구워져 있어 전환이 안 먹던 것을 실측에서 잡음: 다크 전환 후 캔버스 픽셀이 255,255,255로 남아 있었다).App.css—ui_template_theme.cssimport + 하드코딩 색 전량 치환 (스크립트 검증: 남은 hex 0개). CAD 골격용 별칭 토큰(--cad-chrome등) 11종은 앱 토큰을 가리키기만 하며 색을 새로 정하지 않는다.index.html—bg-white/bg-slate-950/bg-black제거screenCanvas.drawController.ts— 배경·그리드·선/면/글자 색을 테마 경유Button.tsx·LayerManager.tsx— tailwind 색 유틸 제거, 색은 App.css 토큰이data-type/data-active로 준다. ⚠ 계획 대비 차이 —DropdownButton.tsx는 어디서도 import되지 않는 죽은 컴포넌트라 손대지 않았다(화면에 안 나오는 색).- 재빌드 후 공용 브라우저 실측 (
tmp/browser/shots/427_light_full.png,423_cad_dark.png):- 라이트: 타이틀바
rgb(246,247,250)=--color-paper, 캔버스 픽셀255,255,255, 상태바 동일 토큰, 도면 선은 휘도 보정으로 흰 배경에서 판독 가능. - 다크: 타이틀바
rgb(30,25,48), 캔버스 픽셀22,18,31=--color-canvas(dark). - 리로드 없이 부모 테마 토글 → iframe 즉시 추종 확인
(다크
rgb(30,25,48)→ 라이트rgb(246,247,250), 캔버스도 함께 전환). tsc --noEmit(메인) 통과, CAD 빌드tsc -b통과.- 화면·테마는 사용자가 쓰던 상태(라이트,
#/b05-profile)로 되돌려 놓음.
- 라이트: 타이틀바
- 남은 것(별건) — 도면층 패널 행이 폭 248px을 넘어 버튼이 잘린다. 이번 변경 이전(다크 하드코딩 시절)에도 같던 기존 레이아웃 문제라 손대지 않았다.