import { Ref } from 'vue'; import { Command, EditorState } from '../command/types'; import { EditorController, Selection } from './controller'; import { ModelId } from '../core/types'; /** 이 축이 팩토리 클로저에서 쓰는 것 전부. 늘어나면 여기 선언이 먼저 늘어난다(= 의존 인벤토리). */ export interface GroupContext { /** 편집 대상 reactive 상태(속성만 교체되므로 참조 안정). */ state: EditorState; /** 조회 모드 판정 — add류가 `null`을 돌려주려면 run()의 no-op 백스톱보다 앞에서 봐야 한다. */ editable: Ref; /** 모델 변경의 단일 실행점(조회 모드 no-op + 안내). */ run: (c: Command) => void; /** 그룹 생성 후 선택 해제(사라진 엔티티 선택을 남기지 않는다). */ selection: Ref; /** 잠금 게이트(엔티티) — `dropEntity`가 옮기는 대상이 엔티티라서 필요하다. */ gateEntityLocked: (id: ModelId) => boolean; /** 잠금 게이트(그룹) — 차단 시 true + 안내 emit. */ gateGroupLocked: (groupId: ModelId) => boolean; /** 순수 잠금 조회 — 공개 질의 `isGroupLocked`의 위임 대상. **안내를 내지 않는다**(위 ⚠️). */ isGroupLockedFn: (groupId: ModelId) => boolean; } export declare function createGroupApi(ctx: GroupContext): Pick;