import type { CursorSelection } from '@blockeditor/block-std';
import type { SurfaceSelection } from '@blockeditor/block-std';
import { DisposableGroup, Slot } from '@blockeditor/global/utils';
import type { EdgelessElement } from '../../../_common/types.js';
import { GroupElement } from '../../../surface-block/elements/index.js';
import type { EdgelessPageBlockComponent } from '../edgeless-page-block.js';
export interface EdgelessSelectionState {
    /**
     * The selected elements. Could be blocks or canvas elements
     */
    elements: string[];
    /**
     * Indicate whether the selected element is in editing mode
     */
    editing: boolean;
}
export interface CursorSelectionState {
    x: number;
    y: number;
}
export declare class EdgelessSelectionManager {
    container: EdgelessPageBlockComponent;
    disposable: DisposableGroup;
    slots: {
        updated: Slot<SurfaceSelection[]>;
        remoteUpdated: Slot<void>;
        cursorUpdated: Slot<CursorSelection>;
        remoteCursorUpdated: Slot<void>;
    };
    lastState: SurfaceSelection[];
    selections: SurfaceSelection[];
    cursor: CursorSelection | null;
    remoteCursor: Map<number, CursorSelection>;
    remoteSelection: Map<number, SurfaceSelection>;
    private _activeGroup;
    private _selected;
    private _selectedIds;
    private _remoteSelected;
    get empty(): boolean;
    get activeGroup(): GroupElement | null;
    get editing(): boolean;
    /**
     * ids of the selected elements
     */
    get selectedIds(): string[];
    /**
     * models of the selected elements
     */
    get elements(): EdgelessElement[];
    get firstElement(): EdgelessElement;
    get selectedBound(): import("../../../index.js").Bound;
    private get _selection();
    constructor(container: EdgelessPageBlockComponent);
    private _setState;
    private _setCursor;
    isEmpty(selections: SurfaceSelection[]): boolean;
    equals(selection: SurfaceSelection[]): boolean;
    mount(): void;
    /**
     * check if element is selected by remote peers
     * @param element
     */
    hasRemote(element: string): boolean;
    /**
     * check if the element is selected in local
     * @param element
     */
    has(element: string): boolean;
    set(selection: EdgelessSelectionState | SurfaceSelection[]): void;
    setCursor(cursor: CursorSelection | CursorSelectionState): void;
    clear(): void;
    dispose(): void;
}
//# sourceMappingURL=selection-manager.d.ts.map