import { HardAs, LiteralObject, Point, Text } from '@p-lc/shared'; import { Get } from 'type-fest'; import { AnyEditorPlugin, Editor, EditorDefaultPropertiesExtHkt, EditorDefaultPropertiesExtHktPlugin, EditorRawPlugin } from '../../types'; import { editorPluginRender } from '../editor-plugin-render'; /** * 编辑器上下文菜单仓库插件属性扩展高等类型 */ export interface EditorPluginContextMenuStorePropertiesExtHkt { editor: { /** * 上下文菜单仓库 */ contextMenuStore: { /** * 上下文菜单实体,由其他插件扩展,只用于类型推导 */ contextMenuEntities: LiteralObject; /** * 条目,id -> 条目 */ items: Record>; /** * 是否可见 */ visible: boolean; /** * 展示点 */ displayPoint: Point; /** * 已匹配的条目 */ matchedItems: ContextMenuItem[]; /** * 当前实体 */ currentEntity: ContextMenuEntity | null; /** * 打开 * @param entity 实体 * @param point 点 * @returns 是否成功打开 */ open(entity: ContextMenuEntity, point: Point): boolean; /** * 关闭 * @item 需要执行的条目 */ close(item?: ContextMenuItem): void; }; }; } /** * 上下文菜单实体基础部分 */ export interface ContextMenuEntityBase { /** * 类型 */ type: string; } /** * 上下文菜单实体 */ export type ContextMenuEntities = Get, [ 'contextMenuStore', 'contextMenuEntities' ]>; /** * 上下文菜单实体 */ export type ContextMenuEntity = HardAs, [ContextMenuEntityType]>, ContextMenuEntityBase>; /** * 上下文菜单实体类型 */ export type ContextMenuEntityType = HardAs, string>; /** * 上下文菜单条目 */ export interface ContextMenuItem { /** * 唯一标识 */ id: string; /** * 下标,小的在前,默认:Infinity */ index?: number; /** * 标签 */ label: Text; /** * 匹配,匹配后才展示 * @param entity 实体 * @param ctx 上下文,编辑器 */ match(entity: ContextMenuEntity, ctx: Editor): boolean; /** * 操作 * @param entity 实体 * @param ctx 上下文,编辑器 */ action(entity: ContextMenuEntity, ctx: Editor): void; } /** * EditorPluginContextMenuStorePropertiesExtHkt 辅助类型 */ export interface $EditorPluginContextMenuStorePropertiesExtHkt extends EditorDefaultPropertiesExtHkt { type: EditorPluginContextMenuStorePropertiesExtHkt>; } /** * 编辑器上下文菜单仓库插件 */ export declare const editorPluginContextMenuStore: EditorRawPlugin<$EditorPluginContextMenuStorePropertiesExtHkt, typeof editorPluginRender>; //# sourceMappingURL=editor-plugin-context-menu-store.d.ts.map