import { Association, AssociationLayout, DiagramLayout, Entity, EntityLayout, GroupLayout, LogicalGroup, LogicalModel, ModelId, Point, Style } from './types'; export interface MergeDiagramSource { logical: LogicalModel; /** 소스 다이어그램 레이아웃 — 임포트 서브그래프의 좌표/스타일을 함께 옮긴다. */ layout: DiagramLayout; } export interface MergeDiagramOptions { /** depth-1 관련 엔티티(경계 관계의 반대편)를 선택집합에 함께 끌어와 관계를 유지(D3 옵션 토글). */ includeRelated?: boolean; /** 병합 대상(타깃) 논리 모델 — 이름/테이블 물리명 충돌 감지에 사용(D7). */ existing: LogicalModel; /** 임포트 서브그래프 좌표에 더할 오프셋(D8 — 빈 영역 배치는 호출자가 계산해 전달). */ offset?: Point; /** * 이름/물리명 충돌 시 붙일 접미사(D7). 기본 `_imported`(타 모듈 import). * 같은 문서 클립보드 붙여넣기는 `_copy`가 자연스럽다(단일 paste와 일관). */ collisionSuffix?: string; /** 결정적 테스트를 위한 id 생성기 주입(기본 newId). */ idFactory?: () => ModelId; } export interface MergeDiagramResult { logical: { entities: Entity[]; associations: Association[]; groups: LogicalGroup[]; }; layout: { entityLayouts: EntityLayout[]; associationLayouts: AssociationLayout[]; groupLayouts: GroupLayout[]; }; /** 소스 modelId → 임포트 modelId 매핑(컨트롤러 진입점·후속 배선용). */ idMap: Map; } /** * 소스 다이어그램의 선택 서브그래프를 새 id 체계로 재매핑해 반환한다. * * @param source 소스 다이어그램(로드된 논리 + 레이아웃) * @param selectedIds 임포트할 엔티티 modelId 목록(부분 선택 — 전량은 전 엔티티 id 전달) * @param opts 경계/충돌/오프셋 정책 */ export declare function mergeDiagram(source: MergeDiagramSource, selectedIds: ModelId[], opts: MergeDiagramOptions): MergeDiagramResult; /** 스타일 맵의 키(속성/연산 modelId) remap — 강등돼 사라진 키는 드롭. */ export declare function remapStyleKeys(styles: Record, get: (old: ModelId) => ModelId | undefined): Record;