import { SlashMenuItem } from '../../../types/editor';
import { OverlayPlacement } from '../../../lib/editor-overlay-position';
/**
 * slash 菜单展开方向。
 */
type SlashMenuPlacement = OverlayPlacement;
/**
 * slash 菜单定位上下文（第一段：内容坐标计算所需输入）。
 */
interface SlashMenuPositionContext {
    /** 编辑器滚动容器。 */
    editorWrapper: HTMLElement;
    /** 光标顶部在编辑器内容坐标系中的位置。 */
    anchorTopInContent: number;
    /** 光标底部在编辑器内容坐标系中的位置。 */
    anchorBottomInContent: number;
    /** 光标左侧在编辑器内容坐标系中的位置。 */
    anchorLeftInContent: number;
    /** 菜单展开方向（在输入更新时决策）。 */
    placement: SlashMenuPlacement;
    /** 主轴偏移（与光标的垂直间距）。 */
    offsetY: number;
}
/**
 * slash 菜单视图控制器。
 */
export interface SlashMenuViewController {
    /** 菜单容器节点。 */
    menu: HTMLDivElement;
    /** 当前菜单是否可见。 */
    isVisible: () => boolean;
    /** 切换菜单显隐。 */
    setVisible: (visible: boolean, updatePosition?: () => void) => void;
    /** 渲染菜单项（输入不变时跳过）。 */
    renderIfNeeded: (items: SlashMenuItem[], activeIndex: number) => void;
    /** 将当前高亮菜单项滚动到可视区域内。 */
    scrollActiveItemIntoView: (onAfterScroll?: () => void) => void;
    /** 更新菜单定位上下文（不会立即强制显示）。 */
    updatePositionContext: (context: SlashMenuPositionContext | null) => void;
    /** 按当前上下文刷新定位。 */
    updatePosition: () => void;
    /** 销毁控制器并清理全局监听。 */
    destroy: () => void;
}
/**
 * 创建 slash 菜单视图控制器。
 */
export declare const createSlashMenuViewController: (portalContainer: HTMLElement) => SlashMenuViewController;
export {};
//# sourceMappingURL=slash-menu-view.d.ts.map