Frontend — 그래프 시스템 - xxriny/KNU-PROJECT GitHub Wiki

1. src/components/SAArtifactGraph.jsx

라인 코드 설명
1–12 import ReactFlow, Handle, MarkerType, Position
13–49 SAArtifactNode 커스텀 노드 — 타이틀, 서브타이틀, 배지, accent 컬러, dimmed/highlighted 상태
50–130 SAArtifactGraph 컴포넌트 graph.nodes/edges → ReactFlow 렌더, FIT_VIEW_OPTIONS(padding 0.1, zoom 0.05~1.5), 인접성 기반 하이라이트(hover/select 시 연결 노드만 강조)
131–200 줌 레벨 반응 zoomLevel < 0.78 시 저우선 엣지 라벨 숨김
201–325 사이드 패널 선택 노드 상세 — module_id, 기능 목록(테이블), 파일 경로, 매핑 요구사항, 의존 모듈, 증거

2. src/components/saGraphAdapters.js

라인 코드 설명
1–3 import graphLayout, graphUtils
4–79 normalizeSystemDiagramForGraph() spec → 레이어별 x배치, degree 정렬, 관계 타입별 색상(explicit 파랑/semantic 보라/execution_order 회색)
80–120 normalizeFlowchartForGraph() stages → 수평 나열, sequential 파랑/parallel 틸, 기능명 프리뷰
121–269 normalizeUMLForGraph() cluster 모드: 레이어 집계 노드, detail 모드: 개별 컴포넌트 노드, hideExecutionOrder/minConfidence 필터
270–379 normalizeContainerDiagramForGraph() container_config 기반 — 컴포넌트/외부시스템 그래프, edge 색상(http 파랑/ipc 보라/data 틸/external 앰버)

3. src/components/graphLayout.js

라인 코드 설명
5 LAYER_ORDER 5+1 레이어 순서 상수
7 LAYER_COLOR 레이어별 색상 매핑
16 getLayerX() 레이어명 → x좌표(120 + index×620)
22 clamp() 값 범위 제한 유틸
26–43 buildDynamicLayerXMap() 활성 레이어 수·최대 아이템 수 기반 동적 갭 계산 → {layer: x}

4. src/components/graphUtils.js

라인 코드 설명
5 groupBy() 배열 → 키 함수 기반 그룹 객체
14 dedupeEdges() `source
22 compactPathLabel() "핵심 분석 모듈:" 접두사 제거 + 마지막 2 디렉토리 축약(40자 제한)
33 buildDegreeMap() 엣지 목록 → {nodeId: degree} 연결 수 맵

5. src/components/TopologyGraph.jsx

라인 코드 설명
1–14 import @xyflow/reactReactFlow, Background, Controls, MarkerType, 색상 상수
15–96 computeLayeredLayout() 의존성 기반 BFS 레이어링 → 우선순위 정렬 → x/y 좌표 계산
97–101 truncateLabel() 긴 라벨 축약 헬퍼
102–250 TopologyGraph 컴포넌트 rtmMap 빌드, 노드 원형 스타일(border=우선순위 색), 엣지 smoothstep, NODE_W 332, NODE_H 162
251–380 ReactFlow 렌더 fitView, zoom 0.2~2, 범례(우선순위 3컬러 + 도형 4종)
381–470 사이드 패널 선택 노드 상세 — ID, 설명, 카테고리, 우선순위, 의존성 버튼, 태그, 네비게이션(Workspace 상세/RTM 탭/SA Topology)
471–478 SideSection 사이드 패널 내부 섹션 서브 컴포넌트