import { Ref } from 'vue'; import { Command, EditorState } from '../command/types'; import { Translator } from '../i18n'; import { EditorController } from './controller'; import { ModelId } from '../core/types'; /** 이 축이 팩토리 클로저에서 쓰는 것 전부. 늘어나면 여기 선언이 먼저 늘어난다(= 의존 인벤토리). */ export interface AssociationContext { /** 편집 대상 reactive 상태(속성만 교체되므로 참조 안정). */ state: EditorState; /** 조회 모드 판정 — add류가 `null`을 돌려주려면 run()의 no-op 백스톱보다 앞에서 봐야 한다. */ editable: Ref; /** 모델 변경의 단일 실행점(조회 모드 no-op + 안내). */ run: (c: Command) => void; /** 잠금 게이트(엔티티) — 관계 *생성*은 관계가 아직 없어 양 끝을 각각 본다. */ gateEntityLocked: (id: ModelId) => boolean; /** 잠금 게이트(관계) — 양끝 중 하나라도 잠기면 차단(그 의미론의 단일 출처). */ gateAssocLocked: (assocId: ModelId) => boolean; /** 번역 — 아래 임베드 순환 차단의 «이유» 안내에 쓴다(엔티티·속성 축의 구조 차단 안내와 같은 짝). */ t: Translator; /** 구조 차단 안내 — 무음 차단은 "고장"으로 읽힌다(VE-2 규율 · 직렬화 타입 분기의 실사용 보고 선례). */ emitGateNotice: (text: string) => void; } export declare function createAssociationApi(ctx: AssociationContext): Pick;