/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { IContextMenuDelegate } from '@sussudio/base/browser/contextmenu.mjs';
import {
	AnchorAlignment,
	AnchorAxisAlignment,
	IContextViewProvider,
} from '@sussudio/base/browser/ui/contextview/contextview.mjs';
import { IAction } from '@sussudio/base/common/actions.mjs';
import { Event } from '@sussudio/base/common/event.mjs';
import { IDisposable } from '@sussudio/base/common/lifecycle.mjs';
import { IMenuActionOptions, MenuId } from '../../actions/common/actions.mjs';
import { IContextKeyService } from '../../contextkey/common/contextkey.mjs';
export declare const IContextViewService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IContextViewService>;
export interface IContextViewService extends IContextViewProvider {
	readonly _serviceBrand: undefined;
	showContextView(delegate: IContextViewDelegate, container?: HTMLElement, shadowRoot?: boolean): IDisposable;
	hideContextView(data?: any): void;
	getContextViewElement(): HTMLElement;
	layout(): void;
	anchorAlignment?: AnchorAlignment;
}
export interface IContextViewDelegate {
	canRelayout?: boolean;
	getAnchor():
		| HTMLElement
		| {
				x: number;
				y: number;
				width?: number;
				height?: number;
		  };
	render(container: HTMLElement): IDisposable;
	onDOMEvent?(e: any, activeElement: HTMLElement): void;
	onHide?(data?: any): void;
	focus?(): void;
	anchorAlignment?: AnchorAlignment;
	anchorAxisAlignment?: AnchorAxisAlignment;
}
export declare const IContextMenuService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IContextMenuService>;
export interface IContextMenuService {
	readonly _serviceBrand: undefined;
	readonly onDidShowContextMenu: Event<void>;
	readonly onDidHideContextMenu: Event<void>;
	showContextMenu(delegate: IContextMenuDelegate | IContextMenuMenuDelegate): void;
}
export type IContextMenuMenuDelegate = {
	/**
	 * The MenuId that should be used to populate the context menu.
	 */
	menuId?: MenuId;
	/**
	 * Optional options how menu actions are invoked
	 */
	menuActionOptions?: IMenuActionOptions;
	/**
	 * Optional context key service which drives the given menu
	 */
	contextKeyService?: IContextKeyService;
	/**
	 * Optional getter for extra actions. They will be prepended to the menu actions.
	 */
	getActions?(): IAction[];
} & Omit<IContextMenuDelegate, 'getActions'>;
