← 목록
기타 2026-07-17 3KB 읽기 3분

크라우니 오피스 마인드맵 모듈 완성 (punch #1~#8)

개요

크라우니AI 브라우저 내장 오피스의 마인드맵 모듈(ModuleMap)을 데모 껍데기에서 실작동 마인드맵 도구로 완성. 앱 번들(DCLogic 템플릿엔진, React fiber) 무수정 원칙 하에 crownyBridge.js §21 installMapBridge 신규 섹션 + 한선씨 정본 미러로 구현. 시트 §19·슬라이드 §20와 동일 공정.

핵심 발견 (착수 시점)

마인드맵은 슬라이드보다 한 겹 얕았음 — 노드 트리(const data)가 renderVals 내부에 매 렌더 재선언되는 로컬 const라 편집 대상 모델 자체가 없었음(실 state는 {sel,open,layout} 3개뿐, componentDidMount 부재로 키보드 0, 키 가이드 패널이 5기능을 광고만 하는 장식). punch #1이 이를 state.nodes flat 트리로 hoist하는 게 나머지 전제.

무엇을 했는지 (판정표 8 punch 전량)

  • #1 노드 트리 상태화 + 라벨 편집 영속(const data→flat {id,parentId,label,collapsed}, fiber walk findMapLogic, 마인드맵모델.한선 20/20)
  • #2 노드 추가(Tab 자식/Enter 형제) + 키보드 componentDidMount 신설(모듈 게이트·화살표 탐색, DCLogic 지연 reconciliation을 scheduleReflow로 수리, 마인드맵편집.한선 30/30)
  • #3 노드 삭제(하위트리 재귀·루트 가드) + ⌘. 접기(3레이아웃 통일·접힘 zip 정합, 마인드맵접기.한선 21/21)
  • #4 노드 이동/재부모화(⌥←→ indent/outdent·⌥↑↓ 형제순서·드래그, 순환/루트 가드, 인라인 span 히트테스트를 host 마커로 수리, 마인드맵이동.한선 33/33)
  • #5 줌/팬 + 미니맵 실연동(커서기준 줌·빈영역 팬·재부모화와 배타분기·미니맵 뷰포트 추종, VM 상수접힘 함정 회피, 마인드맵뷰포트.한선 22/22)
  • #6 노드 색/스타일(크라우니 7팔레트·YIQ 대비텍스트·조상색 옅은톤 상속·colorSuffix 무회귀, 마인드맵색.한선 23/23)
  • #7 아웃라인↔맵 변환(DFS 들여쓰기·부모스택 파싱·라운드트립 무손실, 마인드맵아웃라인.한선 23/23)
  • #8 맵→슬라이드 덱 / 맵→시트 계층표 내보내기(§19·§20 데이터 주입·스냅샷 독립·지연모듈 drain, 마인드맵내보내기.한선 16/16)

검증

  • 각 punch: hanseonc_high 자가검증 + CDP 실측(before/after) + 문서 27/27 + 마인드맵 앞 punch 무회귀
  • 배포: CrownyAI 1.3.1→1.4.0-beta (punch별 증분)

알려진 앱 한계 (내 변경과 무관)

  • 우측맵·트리 레이아웃의 루트 노드 라벨은 앱 템플릿 하드코딩 → 모델 교체가 그 두 뷰의 루트 텍스트엔 미반영(방사형만 모델 구동). 자식/손자(실제 계층)는 세 뷰 모두 정상.

관련 파일

  • bundle/office/bridge/crownyBridge.js §21 installMapBridge (마인드맵 전 기능, 앱번들 무수정)
  • bundle/office/bridge/마인드맵{모델,편집,접기,이동,뷰포트,색,아웃라인,내보내기}.한선 (정본 미러)
  • spec/마인드맵기능-판정표.md

잔여 이슈 / 다음

  • cdf 실저장(노드 트리·색): 시트 @@SEC 패턴 미러로 후속
  • Phase 4 다음 순서 = 포커스 (→아웃라인→플랜→그래프)
  • 완성 모듈: 시트(10), 슬라이드(10), 마인드맵(8) — 오피스 실작동 축 3개 완성