import { DragContext, DragDiff } from "../../../services/drag";
import { AnchorState, EAnchorType } from "../../../store/anchor/Anchor";
import { TBlockId } from "../../../store/block/Block";
import { PortState } from "../../../store/connection/port/Port";
import { GraphComponent, TGraphComponentProps } from "../GraphComponent";
import { GraphLayer } from "../layers/graphLayer/GraphLayer";
export type TAnchorId = string | number;
export type TAnchor = {
    id: string;
    blockId: TBlockId;
    type: EAnchorType | string;
    index?: number;
};
export type TAnchorProps = TGraphComponentProps & TAnchor & {
    size: number;
    lineWidth: number;
    zIndex: number;
    port: PortState;
};
type TAnchorState = {
    size: number;
    raised: boolean;
    selected: boolean;
};
export declare class Anchor<T extends TAnchorProps = TAnchorProps> extends GraphComponent<T, TAnchorState> {
    readonly cursor = "pointer";
    static CANVAS_HOVER_FACTOR: number;
    static DETAILED_HOVER_FACTOR: number;
    getEntityId(): number | string;
    get zIndex(): number;
    connectedState: AnchorState;
    private shift;
    constructor(props: T, parent: GraphLayer);
    getHoverFactor(): number;
    protected stateChanged(_nextState: TAnchorState): void;
    protected propsChanged(_nextProps: T): void;
    protected willMount(): void;
    protected computeShift(state?: TAnchorState, props?: T): void;
    protected onPositionChanged: () => void;
    getPorts(): PortState[];
    /**
     * Get the position of the anchor.
     * Returns the position of the anchor in the coordinate system of the graph(ABSOLUTE).
     *
     * Example:
     * ```ts
     * const pos = anchor.getPosition(); // { x: 100, y: 100 }
     * ```
     * port.getPoint is used port.$state.value so you can use this method in signals effect and compute.
     * ```ts
     * computed(() => {
     *   return anchor.getPosition().x + 10; // { x: 110, y: 100 }
     * });
     * ```
     * @returns The position of the anchor in the coordinate system of the graph(ABSOLUTE).
     */
    getPosition(): import("../../..").TPoint;
    toggleSelected(): void;
    /**
     * Anchor is draggable only when connection creation is disabled.
     * When connections can be created via anchors, dragging is handled by ConnectionLayer.
     */
    isDraggable(): boolean;
    handleDragStart(context: DragContext): void;
    handleDrag(diff: DragDiff, context: DragContext): void;
    handleDragEnd(context: DragContext): void;
    protected isVisible(): boolean;
    protected unmount(): void;
    handleEvent(event: MouseEvent | KeyboardEvent): void;
    private computeRenderSize;
    protected render(): void;
}
export {};
