import { AnchorState } from "store/anchor/Anchor";
import { TAnchor } from "../../components/canvas/anchors";
import { TBlock } from "../../components/canvas/blocks/Block";
import { Graph } from "../../graph";
import { TRect } from "../../utils/types/shapes";
import { ESelectionStrategy } from "../../utils/types/types";
import { RootStore } from "../index";
import { BlockState, TBlockId } from "./Block";
declare module "../../graphEvents" {
    interface GraphEventsDefinitions {
        /**
         *
         * Emited when selection of blocks changes.
         * Preventing the event will prevent selection change.
         *
         */
        "blocks-selection-change": (event: SelectionEvent<TBlockId>) => void;
        /**
         * Emited when selection of block's anchor changes.
         * Preventing the event will prevent selection change.
         *
         */
        "block-anchor-selection-change": (event: CustomEvent<{
            /** Block anchor */
            anchor: TAnchor;
            /** Is anchor selected */
            selected: boolean;
        }>) => void;
        /**
         * Emited when block changes.
         *
         * Preventing the event will prevent block change.
         */
        "block-change": (event: CustomEvent<{
            /** Changed block */
            block: TBlock;
        }>) => void;
    }
}
export declare class BlockListStore {
    rootStore: RootStore;
    protected graph: Graph;
    $blocksMap: import("@preact/signals-core").Signal<Map<TBlockId, BlockState<TBlock>>>;
    $blocks: import("@preact/signals-core").Signal<BlockState<TBlock>[]>;
    /**
     * This signal is used to store blocks in reactive state.
     * this signal fired for each change of the block state.
     *
     * NOTE: Please do not use it before you know what you are doing.
     */
    $blocksReactiveState: import("@preact/signals-core").ReadonlySignal<BlockState<TBlock>[]>;
    $selectedBlocks: import("@preact/signals-core").ReadonlySignal<BlockState<TBlock>[]>;
    $selectedAnchor: import("@preact/signals-core").ReadonlySignal<AnchorState>;
    protected isDirtyRect: boolean;
    $usableRect: import("@preact/signals-core").Signal<TRect>;
    constructor(rootStore: RootStore, graph: Graph);
    getUsableRect(): TRect;
    protected forceRecalcUsableRect(blocks?: BlockState<TBlock>[]): void;
    protected recalcUsableRect: import("lodash").DebouncedFuncLeading<(blocks?: any) => void>;
    setAnchorSelection(blockId: BlockState["id"], anchorId: AnchorState["id"], selected: boolean): void;
    protected unsetAnchorsSelection(): void;
    updatePosition(id: BlockState["id"], nextState: Pick<TBlock, "x" | "y">): void;
    protected setBlockSelection(block: BlockState | BlockState["id"], selected: boolean, params?: {
        ignoreChanges?: boolean;
    }): boolean;
    protected updateBlocksMap(blocks: Map<BlockState["id"], BlockState> | [BlockState["id"], BlockState][]): void;
    addBlock(block: Omit<TBlock, "id"> & {
        id?: TBlockId;
    }): TBlockId;
    deleteBlocks(blocks: (TBlock["id"] | TBlock)[]): void;
    updateBlocks(blocks: TBlock[]): void;
    setBlocks(blocks: TBlock[]): void;
    protected getOrCraeateBlockState(block: TBlock): BlockState<TBlock>;
    protected applyBlocksState(blocks: BlockState[]): void;
    protected computeSelectionChange(ids: TBlockId[], selected: boolean, strategy?: ESelectionStrategy): {
        add: BlockState<TBlock>[];
        removed: BlockState<TBlock>[];
        list: BlockState<TBlock>[];
    };
    updateBlocksSelection(ids: TBlockId[], selected: boolean, strategy?: ESelectionStrategy): void;
    getBlockConnections(blockId: TBlockId): import("../..").ConnectionState<import("../..").TConnection>[];
    resetSelection(): void;
    deleteSelectedBlocks(): void;
    deleteAllBlockConnections(blockId: TBlockId): void;
    reset(): void;
    toJSON(): TBlock[];
    getBlockState(id: TBlockId): BlockState<TBlock>;
    getBlock(id: TBlockId): TBlock | undefined;
    getBlocks(ids: BlockState["id"][]): BlockState<TBlock>[];
    getBlockStates(ids: BlockState["id"][]): BlockState<TBlock>[];
}
