import { Ref } from 'vue'; import { Command, EditorState } from '../command/types'; import { Translator } from '../i18n'; import { EditorController, Selection } from './controller'; import { EmbeddableCatalog, ModelId, PredefinedCustomTypeCatalog } from '../core/types'; /** 이 축이 팩토리 클로저에서 쓰는 것 전부. 늘어나면 여기 선언이 먼저 늘어난다(= 의존 인벤토리). */ export interface AttributeContext { /** 편집 대상 reactive 상태(속성만 교체되므로 참조 안정). */ state: EditorState; /** 조회 모드 판정 — add류가 `null`을 돌려주려면 run()의 no-op 백스톱보다 앞에서 봐야 한다. */ editable: Ref; /** 모델 변경의 단일 실행점(조회 모드 no-op + 안내). */ run: (c: Command) => void; /** 잠금 게이트 — 차단 시 true + 안내 emit. 속성 편집은 소속 엔티티 잠금을 따른다. */ gateEntityLocked: (entityId: ModelId) => boolean; /** 호스트 주입 임베더블 카탈로그(`addPredefinedEmbed`의 슬롯 골격 소스). */ embeddableCatalog: Ref; /** * 호스트 주입 ③ predefined customtype 카탈로그 — `convertAttributeType` 이 **되돌림 목적지**로 * ③ 을 받을 때 그 단일 컬럼 메타를 시드하는 출처(②와 같은 성격의 주입이라 나란히 둔다). */ predefinedCustomTypeCatalog: Ref; /** UI 크롬 번역기 — FK 직접 삭제 차단 안내 문구용. */ t: Translator; /** 차단 안내(텍스트별 단기 dedup) — 무음 차단을 막는 백스톱. */ emitGateNotice: (text: string) => void; /** 삭제된 행을 선택이 가리키지 않도록 해제하는 쓰기(`removeAttributes`). */ selection: Ref; } export declare function createAttributeApi(ctx: AttributeContext): Pick;