import { BaseConnection } from "../../components/canvas/connections";
import { Graph } from "../../graph";
import { Component } from "../../lib";
import { MultipleSelectionBucket } from "../../services/selection/MultipleSelectionBucket";
import { ESelectionStrategy } from "../../services/selection/types";
import { RootStore } from "../index";
import { ConnectionState, TConnection, TConnectionId } from "./ConnectionState";
import { PortState, TPortId } from "./port/Port";
import { PortsStore } from "./port/PortList";
declare module "../../graphEvents" {
    interface GraphEventsDefinitions {
        "connection-selection-change": (event: SelectionEvent<TConnection["id"]>) => void;
    }
}
export declare class ConnectionsStore {
    rootStore: RootStore;
    protected graph: Graph;
    $connections: import("@preact/signals-core").ReadonlySignal<ConnectionState<{
        id?: TConnectionId;
        sourceBlockId?: import("../..").TBlockId;
        targetBlockId?: import("../..").TBlockId;
        sourceAnchorId?: string;
        targetAnchorId?: string;
        sourcePortId?: TPortId;
        targetPortId?: TPortId;
        label?: string;
        styles?: Partial<import("../../graphConfig").TConnectionColors> & {
            dashes?: number[];
        };
        dashed?: boolean;
        selected?: boolean;
    }>[]>;
    $connectionsMap: import("@preact/signals-core").Signal<Map<TConnectionId, ConnectionState<{
        id?: TConnectionId;
        sourceBlockId?: import("../..").TBlockId;
        targetBlockId?: import("../..").TBlockId;
        sourceAnchorId?: string;
        targetAnchorId?: string;
        sourcePortId?: TPortId;
        targetPortId?: TPortId;
        label?: string;
        styles?: Partial<import("../../graphConfig").TConnectionColors> & {
            dashes?: number[];
        };
        dashed?: boolean;
        selected?: boolean;
    }>>>;
    /**
     * Bucket for managing connection selection state
     * Resolves IDs to ConnectionState instances
     */
    readonly connectionSelectionBucket: MultipleSelectionBucket<string | number, ConnectionState>;
    /**
     * @deprecated Use connectionSelectionBucket.$selectedEntities instead
     * Computed signal that returns selected connections as ConnectionState instances
     */
    $selectedConnections: import("@preact/signals-core").ReadonlySignal<ConnectionState<{
        id?: TConnectionId;
        sourceBlockId?: import("../..").TBlockId;
        targetBlockId?: import("../..").TBlockId;
        sourceAnchorId?: string;
        targetAnchorId?: string;
        sourcePortId?: TPortId;
        targetPortId?: TPortId;
        label?: string;
        styles?: Partial<import("../../graphConfig").TConnectionColors> & {
            dashes?: number[];
        };
        dashed?: boolean;
        selected?: boolean;
    }>[]>;
    /**
     * Computed signal that returns selected connections as BaseConnection GraphComponent instances
     * Automatically resolves ConnectionState to BaseConnection components via getViewComponent()
     * Use this when you need to work with rendered Connection components
     */
    $selectedConnectionComponents: import("@preact/signals-core").ReadonlySignal<BaseConnection<import("../../components/canvas/connections").TBaseConnectionProps, import("../../components/canvas/connections").TBaseConnectionState, import("../../components/canvas/GraphComponent").GraphComponentContext, {
        id?: TConnectionId;
        sourceBlockId?: import("../..").TBlockId;
        targetBlockId?: import("../..").TBlockId;
        sourceAnchorId?: string;
        targetAnchorId?: string;
        sourcePortId?: TPortId;
        targetPortId?: TPortId;
        label?: string;
        styles?: Partial<import("../../graphConfig").TConnectionColors> & {
            dashes?: number[];
        };
        dashed?: boolean;
        selected?: boolean;
    }>[]>;
    /**
     * Ports store instance
     * Note: Made public to allow subscription to port changes
     */
    ports: PortsStore;
    constructor(rootStore: RootStore, graph: Graph);
    /**
     * Claim ownership of a port (for Blocks, Anchors)
     * @param id Port identifier
     * @param owner Component that will own this port
     * @returns The port state
     */
    claimPort(id: TPortId, owner: Component): PortState;
    /**
     * Release ownership of a port (when Block/Anchor is destroyed)
     * @param id Port identifier
     * @param owner Component that currently owns this port
     */
    releasePort(id: TPortId, owner: Component): void;
    /**
     * Start observing a port (for Connections)
     * @param id Port identifier
     * @param observer The object that will observe this port
     * @returns The port state
     */
    observePort(id: TPortId, observer: unknown): PortState;
    /**
     * Stop observing a port (when Connection is destroyed)
     * @param id Port identifier
     * @param observer The object that was observing this port
     */
    unobservePort(id: TPortId, observer: unknown): void;
    /**
     * Get a port by its ID
     * @param id Port identifier
     * @returns The port state if it exists
     */
    getPort(id: TPortId): PortState | undefined;
    /**
     * Get all ports
     * @returns Array of all port states
     */
    getAllPorts(): PortState[];
    /**
     * Check if a port exists
     * @param id Port identifier
     * @returns true if port exists
     */
    hasPort(id: TPortId): boolean;
    /**
     * Check if a port can be deleted and delete it if possible
     * @param id Port identifier
     */
    private checkAndDeletePort;
    deletePorts(ports: TPortId[]): void;
    updateConnections(connections: TConnection[]): void;
    setConnections(connections: TConnection[]): void;
    protected getOrCreateConnection(connections: TConnection): ConnectionState<{
        id?: TConnectionId;
        sourceBlockId?: import("../..").TBlockId;
        targetBlockId?: import("../..").TBlockId;
        sourceAnchorId?: string;
        targetAnchorId?: string;
        sourcePortId?: TPortId;
        targetPortId?: TPortId;
        label?: string;
        styles?: Partial<import("../../graphConfig").TConnectionColors> & {
            dashes?: number[];
        };
        dashed?: boolean;
        selected?: boolean;
    }>;
    addConnection(connection: TConnection): TConnectionId;
    protected notifyConnectionMapChanged(): void;
    deleteConnections(connections: ConnectionState[]): void;
    deleteSelectedConnections(): void;
    /**
     * Updates connection selection using the SelectionService
     * @param ids Connection IDs to update selection for
     * @param selected Whether to select or deselect
     * @param strategy The selection strategy to apply
     */
    setConnectionsSelection(ids: TConnectionId[], selected: boolean, strategy?: ESelectionStrategy): void;
    /**
     * Resets the selection for connections
     *
     * @returns {void}
     */
    resetSelection(): void;
    getConnections(ids?: TConnectionId[]): ConnectionState<{
        id?: TConnectionId;
        sourceBlockId?: import("../..").TBlockId;
        targetBlockId?: import("../..").TBlockId;
        sourceAnchorId?: string;
        targetAnchorId?: string;
        sourcePortId?: TPortId;
        targetPortId?: TPortId;
        label?: string;
        styles?: Partial<import("../../graphConfig").TConnectionColors> & {
            dashes?: number[];
        };
        dashed?: boolean;
        selected?: boolean;
    }>[];
    getConnectionState(id: TConnectionId): ConnectionState<{
        id?: TConnectionId;
        sourceBlockId?: import("../..").TBlockId;
        targetBlockId?: import("../..").TBlockId;
        sourceAnchorId?: string;
        targetAnchorId?: string;
        sourcePortId?: TPortId;
        targetPortId?: TPortId;
        label?: string;
        styles?: Partial<import("../../graphConfig").TConnectionColors> & {
            dashes?: number[];
        };
        dashed?: boolean;
        selected?: boolean;
    }>;
    getConnection(id: TConnectionId): TConnection | undefined;
    getConnectionStates(ids: TConnectionId[]): ConnectionState<{
        id?: TConnectionId;
        sourceBlockId?: import("../..").TBlockId;
        targetBlockId?: import("../..").TBlockId;
        sourceAnchorId?: string;
        targetAnchorId?: string;
        sourcePortId?: TPortId;
        targetPortId?: TPortId;
        label?: string;
        styles?: Partial<import("../../graphConfig").TConnectionColors> & {
            dashes?: number[];
        };
        dashed?: boolean;
        selected?: boolean;
    }>[];
    toJSON(): {
        id?: TConnectionId;
        sourceBlockId?: import("../..").TBlockId;
        targetBlockId?: import("../..").TBlockId;
        sourceAnchorId?: string;
        targetAnchorId?: string;
        sourcePortId?: TPortId;
        targetPortId?: TPortId;
        label?: string;
        styles?: Partial<import("../../graphConfig").TConnectionColors> & {
            dashes?: number[];
        };
        dashed?: boolean;
        selected?: boolean;
    }[];
    reset(): void;
}
