import { ComputedRef, Ref } from 'vue'; import { EditorState } from '../command/types'; import { CommandStack } from '../command/stack'; import { DiagramMeta } from '../adapter/diagramAdapter'; import { OpConflict } from '../command/op'; import { OpSyncTransport } from '../command/opSync'; import { EditorController, HistoryTransport, RestoreTransport } from './controller'; /** 이 축이 팩토리 클로저에서 쓰는 것 전부(주입 옵션 4 + 상태 4). 늘어나면 여기 선언이 먼저 늘어난다. */ export interface HostSyncContext { state: EditorState; /** op-mode 게이트(schemaVersion>=2 && opWriteEnabled) — attach·가용성 판정 공용. */ opMode: ComputedRef; /** 프리즈 시 편집 잠금(쓰기) + 복원 가용성 판정(읽기). */ editable: Ref; /** 하드 프리즈 충돌 노출(쓰기). */ opConflict: Ref; opTransport?: OpSyncTransport; onOpError?: (err: unknown) => void; historyTransport?: HistoryTransport; restoreTransport?: RestoreTransport; } export interface HostSyncBinding extends Pick { /** * op 어댑터 (재)구성 — 최초 생성과 `loadDiagram` 양쪽에서 호출한다. * `stack`·`meta`를 **캡처하지 않고 이 시점에 받는 것**이 이 분리의 핵심이다(reload가 둘 다 교체한다). */ setupOpAdapter(stack: CommandStack, meta: DiagramMeta | undefined): void; teardownOpAdapter(): void; } export declare function createHostSync(ctx: HostSyncContext): HostSyncBinding;