import type { BaseCellValue, FieldType, ITableSnapshot, ProjectedRow } from '@univerjs/core';
import { IBaseProjectionService } from '@univerjs-pro/bases';
import { Disposable, ICommandService, IUniverInstanceService, LocaleService } from '@univerjs/core';
import { IClipboardInterfaceService, IMessageService } from '@univerjs/ui';
import { IBaseUIStateService } from './base-ui-state.service';
export declare const BASE_CLIPBOARD_MIME_TYPE = "application/vnd.univer.base+json";
export declare const IBaseClipboardService: import("@wendellhu/redi").IdentifierDecorator<BaseClipboardService>;
export type BaseClipboardPayload = {
    type: 'records';
    recordIds: string[];
} | {
    type: 'fields';
    fieldIds: string[];
} | {
    type: 'cells';
    cells: Array<{
        recordId: string;
        fieldId: string;
        value: unknown;
    }>;
};
export interface IBaseClipboardFieldMeta {
    id: string;
    name: string;
    type: FieldType;
    options?: IBaseClipboardOption[];
}
export interface IBaseClipboardOption {
    id: string;
    name: string;
}
export interface IBaseClipboardRecordData {
    recordId: string;
    values: Record<string, BaseCellValue>;
    displayValues: Record<string, string>;
}
export interface IBaseClipboardInternalPayload {
    version: 1;
    unitId: string;
    tableId: string;
    viewId: string;
    fields: IBaseClipboardFieldMeta[];
    records: IBaseClipboardRecordData[];
}
export interface ISerializeBaseClipboardRangeInput {
    unitId: string;
    table: ITableSnapshot;
    viewId: string;
    rows: ProjectedRow[];
    fieldIds: string[];
    personOptions?: Record<string, IBaseClipboardOption[]>;
    groupOptions?: Record<string, IBaseClipboardOption[]>;
}
export interface ISerializedBaseClipboardRange {
    recordCount: number;
    plainText: string;
    html: string;
    customData: Record<string, string>;
    payload: IBaseClipboardInternalPayload;
}
export interface IResolveBaseClipboardPastePatchesInput {
    table: ITableSnapshot;
    visibleRows: ProjectedRow[];
    visibleFieldIds: string[];
    startRecordId: string;
    startFieldId: string;
    payload?: IBaseClipboardInternalPayload | null;
    text?: string;
    personOptions?: Record<string, IBaseClipboardOption[]>;
    groupOptions?: Record<string, IBaseClipboardOption[]>;
}
export declare class BaseClipboardService extends Disposable {
    private readonly _clipboardInterfaceService?;
    private readonly _stateService?;
    private readonly _projectionService?;
    private readonly _instanceService?;
    private readonly _commandService?;
    private readonly _messageService?;
    private readonly _localeService?;
    private _payload;
    private _lastSerialized;
    constructor(_clipboardInterfaceService?: IClipboardInterfaceService | undefined, _stateService?: IBaseUIStateService | undefined, _projectionService?: IBaseProjectionService | undefined, _instanceService?: IUniverInstanceService | undefined, _commandService?: ICommandService | undefined, _messageService?: IMessageService | undefined, _localeService?: LocaleService | undefined);
    setClipboard(payload: BaseClipboardPayload | null): void;
    getClipboard(): BaseClipboardPayload | null;
    copy(): Promise<boolean>;
    copyToClipboardData(clipboardData: DataTransfer | null): boolean;
    paste(): Promise<boolean>;
    pasteFromClipboardData(clipboardData: DataTransfer | null): Promise<boolean>;
    private _serializeCurrentSelection;
    private _pasteClipboard;
    private _showCopiedMessage;
    private _resolveContext;
    private _readClipboard;
}
export declare function serializeBaseClipboardRange(input: ISerializeBaseClipboardRangeInput): ISerializedBaseClipboardRange;
export declare function resolveBaseClipboardPastePatches(input: IResolveBaseClipboardPastePatchesInput): Array<{
    recordId: string;
    values: Record<string, BaseCellValue>;
}>;
