/**
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @format
 */
import React from 'react';
import type { Rect } from '../utils/Rect';
type CursorState = {
    top: number;
    left: number;
};
type ResizingSides = {
    left?: boolean;
    top?: boolean;
    bottom?: boolean;
    right?: boolean;
} | null | undefined;
export type InteractiveProps = {
    isMovableAnchor?: (event: React.MouseEvent) => boolean;
    onMoveStart?: () => void;
    onMoveEnd?: () => void;
    onMove?: (top: number, left: number, event: MouseEvent) => void;
    id?: string;
    movable?: boolean;
    hidden?: boolean;
    moving?: boolean;
    grow?: boolean;
    siblings?: Partial<{
        [key: string]: Rect;
    }>;
    updateCursor?: (cursor?: string | null | undefined) => void;
    zIndex?: number;
    top?: number;
    left?: number;
    minTop?: number;
    minLeft?: number;
    width?: number | string;
    height?: number | string;
    minWidth?: number;
    minHeight?: number;
    maxWidth?: number;
    maxHeight?: number;
    onCanResize?: (sides: ResizingSides) => void;
    onResizeStart?: () => void;
    onResizeEnd?: () => void;
    onResize?: (width: number, height: number) => void;
    resizing?: boolean;
    resizable?: boolean | ResizingSides;
    innerRef?: (elem: HTMLElement | null) => void;
    style?: Object;
    className?: string;
    children?: React.ReactNode;
    gutterWidth?: number;
};
type InteractiveState = {
    moving: boolean;
    movingInitialProps: InteractiveProps | null | undefined;
    movingInitialCursor: CursorState | null | undefined;
    cursor: string | undefined;
    resizingSides: ResizingSides;
    couldResize: boolean;
    resizing: boolean;
    resizingInitialRect: Rect | null | undefined;
    resizingInitialCursor: CursorState | null | undefined;
};
export declare class Interactive extends React.Component<InteractiveProps, InteractiveState> {
    constructor(props: InteractiveProps, context: Object);
    globalMouse: boolean;
    ref?: HTMLElement | null;
    nextTop?: number | null;
    nextLeft?: number | null;
    nextEvent?: MouseEvent | null;
    static defaultProps: {
        minHeight: number;
        minLeft: number;
        minTop: number;
        minWidth: number;
    };
    onMouseMove: (event: MouseEvent) => void;
    startAction: (event: React.MouseEvent) => void;
    startTitleAction(event: React.MouseEvent): void;
    startMoving(event: React.MouseEvent): void;
    getPossibleTargetWindows(rect: Rect): Rect[];
    startWindowAction(event: React.MouseEvent): void;
    startResizeAction(event: React.MouseEvent): void;
    componentDidUpdate(_prevProps: InteractiveProps, prevState: InteractiveState): void;
    resetMoving(): void;
    resetResizing(): void;
    componentWillUnmount(): void;
    endAction: () => void;
    onMouseLeave: () => void;
    onClick: (e: React.MouseEvent) => void;
    calculateMove(event: MouseEvent): void;
    resize(width: number, height: number): void;
    move(top: number, left: number, event: MouseEvent): void;
    calculateResize(event: MouseEvent): void;
    getRect(): Rect;
    getResizable(): ResizingSides;
    checkIfResizable(event: MouseEvent): {
        left: boolean;
        right: boolean;
        top: boolean;
        bottom: boolean;
    } | undefined;
    calculateResizable(event: MouseEvent): void;
    setRef: (ref: HTMLElement | null) => void;
    onLocalMouseMove: (event: React.MouseEvent) => void;
    render(): JSX.Element;
}
export {};
//# sourceMappingURL=Interactive.d.ts.map