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

import { DragMouseEvent } from '@sussudio/base/browser/mouseEvent.mjs';
import { VSBuffer } from '@sussudio/base/common/buffer.mjs';
import { URI } from '@sussudio/base/common/uri.mjs';
import { IBaseTextResourceEditorInput } from '../../editor/common/editor.mjs';
import { ServicesAccessor } from '../../instantiation/common/instantiation.mjs';
export interface FileAdditionalNativeProperties {
	/**
	 * The real path to the file on the users filesystem. Only available on electron.
	 */
	readonly path?: string;
}
export declare const CodeDataTransfers: {
	EDITORS: string;
	FILES: string;
};
export interface IDraggedResourceEditorInput extends IBaseTextResourceEditorInput {
	resource: URI | undefined;
	/**
	 * A hint that the source of the dragged editor input
	 * might not be the application but some external tool.
	 */
	isExternal?: boolean;
	/**
	 * Whether we probe for the dropped editor to be a workspace
	 * (i.e. code-workspace file or even a folder), allowing to
	 * open it as workspace instead of opening as editor.
	 */
	allowWorkspaceOpen?: boolean;
}
export declare function extractEditorsDropData(e: DragEvent): Array<IDraggedResourceEditorInput>;
export declare function extractEditorsAndFilesDropData(
	accessor: ServicesAccessor,
	e: DragEvent,
): Promise<Array<IDraggedResourceEditorInput>>;
export declare function createDraggedEditorInputFromRawResourcesData(
	rawResourcesData: string | undefined,
): IDraggedResourceEditorInput[];
interface IFileTransferData {
	resource: URI;
	isDirectory?: boolean;
	contents?: VSBuffer;
}
export declare function extractFileListData(accessor: ServicesAccessor, files: FileList): Promise<IFileTransferData[]>;
export declare function containsDragType(event: DragEvent, ...dragTypesToFind: string[]): boolean;
export interface IResourceStat {
	resource: URI;
	isDirectory?: boolean;
}
export interface IDragAndDropContributionRegistry {
	/**
	 * Registers a drag and drop contribution.
	 */
	register(contribution: IDragAndDropContribution): void;
	/**
	 * Returns all registered drag and drop contributions.
	 */
	getAll(): IterableIterator<IDragAndDropContribution>;
}
interface IDragAndDropContribution {
	readonly dataFormatKey: string;
	getEditorInputs(data: string): IDraggedResourceEditorInput[];
	setData(resources: IResourceStat[], event: DragMouseEvent | DragEvent): void;
}
export declare const Extensions: {
	DragAndDropContribution: string;
};
export {};
