import * as React from 'react';
import { Link } from './elements';
import { Vector } from './geometry';
import { DiagramModel } from './model';
import { type PaperTransform } from './paper';
import { MutableRenderingState } from './renderingState';
export interface LinkLayerProps {
    model: DiagramModel;
    renderingState: MutableRenderingState;
    shouldRenderLink?: (link: Link) => boolean;
}
interface LinkLayerState {
    readonly version: number;
    readonly shouldUpdateLink: (link: Link) => boolean;
}
export declare class LinkLayer extends React.Component<LinkLayerProps, LinkLayerState> {
    private readonly listener;
    private readonly delayedUpdate;
    private providedContext;
    private updateState;
    private scheduledToUpdate;
    private labelMeasureRequests;
    private delayedMeasureLabels;
    private readonly memoizedLinks;
    constructor(props: LinkLayerProps);
    componentDidMount(): void;
    shouldComponentUpdate(nextProps: LinkLayerProps, nextState: LinkLayerState): boolean;
    componentWillUnmount(): void;
    private scheduleUpdateAll;
    private scheduleUpdateLink;
    private popShouldUpdatePredicate;
    private scheduleLabelMeasure;
    private clearLabelMeasure;
    private measureLabels;
    private performUpdate;
    render(): import("react/jsx-runtime").JSX.Element;
}
export interface LinkPathProps {
    path: string;
    pathProps?: React.SVGAttributes<SVGPathElement>;
    markerSource?: string;
    markerTarget?: string;
}
export declare function LinkPath(props: LinkPathProps): import("react/jsx-runtime").JSX.Element;
export declare function LinkLabelLayer(props: {
    renderingState: MutableRenderingState;
    paperTransform: PaperTransform;
    layerRef?: React.MutableRefObject<HTMLDivElement | null>;
}): import("react/jsx-runtime").JSX.Element;
export interface LinkLabelProps {
    link: Link;
    primary?: boolean;
    position: Vector;
    line?: number;
    className?: string;
    style?: React.CSSProperties;
    textAnchor?: 'start' | 'middle' | 'end';
    title?: string;
    children?: React.ReactNode;
}
export declare function LinkLabel(props: LinkLabelProps): React.ReactPortal;
export interface LinkVerticesProps {
    linkId: string;
    vertices: ReadonlyArray<Vector>;
    className?: string;
    vertexRadius?: number;
    fill?: string;
}
export declare function LinkVertices(props: LinkVerticesProps): import("react/jsx-runtime").JSX.Element | null;
export interface LinkMarkersProps {
    renderingState: MutableRenderingState;
}
export declare class LinkMarkers extends React.Component<LinkMarkersProps> {
    private readonly listener;
    private readonly delayedUpdate;
    render(): import("react/jsx-runtime").JSX.Element;
    componentDidMount(): void;
    shouldComponentUpdate(): boolean;
    componentWillUnmount(): void;
}
export {};
//# sourceMappingURL=linkLayer.d.ts.map