import { EventedComponent } from "./components/canvas/EventedComponent/EventedComponent";
import { GraphState } from "./graph";
import { TGraphColors, TGraphConstants } from "./graphConfig";
import { TCameraState } from "./services/camera/CameraService";
export type GraphMouseEvent<E extends Event = Event> = CustomEvent<{
    target?: EventedComponent;
    sourceEvent: E;
    pointerPressed?: boolean;
}>;
export type GraphEventParams<T extends CustomEvent> = T extends CustomEvent ? T["detail"] : never;
export declare const extractNativeGraphMouseEvent: (event: GraphMouseEvent) => MouseEvent;
export type GraphMouseEventNames = "mousedown" | "click" | "dblclick" | "mouseenter" | "mouseleave";
export interface BaseGraphEventDefinition {
    mousedown: (event: GraphMouseEvent) => void;
    click: (event: GraphMouseEvent) => void;
    dblclick: (event: GraphMouseEvent) => void;
    mouseenter: (event: GraphMouseEvent) => void;
    mouseleave: (event: GraphMouseEvent) => void;
}
export type UnwrapBaseGraphEvents<Key extends keyof BaseGraphEventDefinition = keyof BaseGraphEventDefinition, T extends BaseGraphEventDefinition[Key] = BaseGraphEventDefinition[Key], P extends Parameters<T>[0] = Parameters<T>[0]> = P extends CustomEvent ? P : never;
export type UnwrapBaseGraphEventsDetail<Key extends keyof BaseGraphEventDefinition, T extends BaseGraphEventDefinition[Key] = BaseGraphEventDefinition[Key], P extends Parameters<T>[0] = Parameters<T>[0]> = UnwrapGraphEvents<Key, T, P>["detail"];
export interface GraphEventsDefinitions extends BaseGraphEventDefinition {
    "camera-change": (event: CustomEvent<TCameraState>) => void;
    "constants-changed": (event: CustomEvent<{
        constants: TGraphConstants;
    }>) => void;
    "colors-changed": (event: CustomEvent<{
        colors: TGraphColors;
    }>) => void;
    "state-change": (event: CustomEvent<{
        state: GraphState;
    }>) => void;
}
export type UnwrapGraphEvents<Key extends keyof GraphEventsDefinitions, T extends GraphEventsDefinitions[Key] = GraphEventsDefinitions[Key], P extends Parameters<T>[0] = Parameters<T>[0]> = P extends CustomEvent ? P : never;
export type UnwrapGraphEventsDetail<Key extends keyof GraphEventsDefinitions, T extends GraphEventsDefinitions[Key] = GraphEventsDefinitions[Key], P extends Parameters<T>[0] = Parameters<T>[0]> = UnwrapGraphEvents<Key, T, P>["detail"];
export type SelectionEvent<T> = CustomEvent<{
    /** List of next selection state */
    list: T[];
    /** Details of changes */
    changes: {
        add: T[];
        removed: T[];
    };
}>;
export declare function isNativeGraphEventName(eventType: string): eventType is GraphMouseEventNames;
