import { HookSubscriberInfo } from './subscriptions.js';
export interface MenuCallbackProperties<IdT, EntityIdT> {
    selectedIds: IdT[];
    entityId: EntityIdT;
    permissions: string[];
    supports: string[];
}
export interface MenuClickHandlerProperties<IdT, EntityIdT, FormValueT extends object = object> extends MenuCallbackProperties<IdT, EntityIdT> {
    formValues: FormValueT;
}
type AsyncCallbackProperty<IdT, EntityIdT, ReturnT> = (props: MenuCallbackProperties<IdT, EntityIdT>) => ReturnT | Promise<ReturnT>;
export type ContextMenuIcon = {
    [key in string]: string;
};
export interface ContextMenu extends HookSubscriberInfo {
    icon?: ContextMenuIcon;
}
export interface ContextMenuItem<IdT, EntityIdT, FormValueT extends object = object> {
    id: string;
    title: string;
    icon?: ContextMenuIcon;
    urls?: string[] | AsyncCallbackProperty<IdT, EntityIdT, string[] | undefined>;
    onClick?: (props: MenuClickHandlerProperties<IdT, EntityIdT, FormValueT>) => void;
    filter?: AsyncCallbackProperty<IdT, EntityIdT, boolean>;
    access?: string;
    formDefinitions?: object[] | AsyncCallbackProperty<IdT, EntityIdT, object[]>;
    children?: ContextMenuItem<IdT, EntityIdT, FormValueT>[];
}
export {};
