/// <reference types="node" />
import * as d3 from 'd3';
import { VowlMath } from './util/math';
import { IGraph } from './grlib';
import { BaseNode } from './elements/nodes/BaseNode';
import { BaseProperty } from './elements/properties/baseProperty';
import EventEmitter from 'events';
/**
 *
 * https://www.jb51.net/article/132763.html
 */
export declare class Graph extends EventEmitter implements IGraph {
    curveFunction: any;
    paused: boolean;
    graphContainer: d3.Selection<any>;
    nodeContainer: d3.Selection<any>;
    labelContainer: d3.Selection<any>;
    cardinalityContainer: d3.Selection<any>;
    linkContainer: d3.Selection<any>;
    editContainer: d3.Selection<any>;
    nodeElements: d3.Selection<any>;
    initialLoad: boolean;
    updateRenderingDuringSimulation: boolean;
    labelGroupElements: d3.Selection<any>;
    linkGroups: d3.Selection<any>;
    linkPathElements: d3.Selection<any>;
    cardinalityElements: d3.Selection<any>;
    classNodes: BaseNode[];
    labelNodes: any[];
    links: any;
    properties: BaseProperty[];
    unfilteredData: any;
    simulation: any;
    drag: any;
    zoom: any;
    zoomFactor: number;
    centerGraphViewOnLoad: boolean;
    transformAnimation: boolean;
    graphTranslation: number[];
    graphUpdateRequired: boolean;
    pulseNodeIds: never[];
    nodeArrayForPulse: never[];
    nodeMap: never[];
    locationId: number;
    defaultZoom: number;
    defaultTargetZoom: number;
    global_dof: number;
    touchDevice: boolean;
    last_touch_time: any;
    supportDblclick: boolean;
    originalD3_dblClickFunction: () => void;
    originalD3_touchZoomFunction: () => void;
    deleteGroupElement: any;
    addDataPropertyGroupElement: any;
    donutMenuContainer: any;
    draggerPathLayer: any;
    draggerLayer: any;
    draggerObjectsArray: any[];
    delayedHider: any;
    nodeFreezer: any;
    hoveredNodeElement: any;
    hoveredPropertyElement: any;
    draggingStarted: boolean;
    frozenDomainForPropertyDragger: any;
    frozenRangeForPropertyDragger: any;
    eP: number;
    eN: number;
    editMode: boolean;
    ignoreOtherHoverEvents: boolean;
    forceNotZooming: boolean;
    now: any;
    seenEditorHint: boolean;
    showFilterWarning: boolean;
    keepDetailsCollapsedOnLoading: boolean;
    cachedJsonOBJ: null;
    options: any;
    parser: any;
    language: string;
    classDragger: any;
    rangeDragger: any;
    domainDragger: any;
    shadowClone: any;
    donutMenus: any;
    d3: any;
    static _installedPlugins: never[];
    static plugins: {};
    constructor();
    get Math(): typeof VowlMath;
    /** --------------------------------------------------------- **/
    /** -- getter and setter definitions                       -- **/
    /** --------------------------------------------------------- **/
    isEditorMode(): boolean;
    getGlobalDOF(): number;
    setGlobalDOF(val: any): void;
    updateZoomSliderValue: (val?: number | undefined) => void;
    setDefaultZoom(val: any): void;
    setTargetZoom(val: any): void;
    getPaused(): boolean;
    setPaused(p: any): this;
    graphOptions(): any;
    scaleFactor(): number;
    translation(): number[];
    graphNodeElements(): any;
    graphLabelElements(): any[];
    graphLinkElements(): any;
    size(): {
        nodes: any;
        properties: any;
    };
    setSliderZoom(val: any): this;
    setFilterWarning(val: any): this;
    setZoom(value: any): void;
    setTranslation(translation: any): void;
    Options(): any;
    getUpdateDictionary(): any;
    /** --------------------------------------------------------- **/
    /** graph initialize & rendering  related functions                      **/
    /** --------------------------------------------------------- **/
    /**
     * Initializes
     */
    initialize: (props: any) => this;
    initializeModules: () => void;
    /**
     * Initializes the grlib.
     */
    initializeGraph: () => void;
    lazyRefresh: () => void;
    showEditorHintIfNeeded: () => void;
    setDefaultForceTickFunction(): void;
    private hiddenRecalculatePositions;
    private recalculatePositions;
    private redrawGraph;
    /**
     * Redraws all elements like nodes, links, ...
     */
    private redrawContent;
    private onClickDonutMenu;
    private addClickEvents;
    private defaultIriValue;
    /**
     * Adjusts the containers current scale and position.
     */
    private zoomed;
    updateCanvasContainerSize: () => void;
    /**
     * Loads all settings, removes the old grlib (if it exists) and draws a new one.
     */
    start: () => this;
    updateStyle: () => void;
    update: () => void;
    reload: () => void;
    load: () => void;
    fastUpdate: () => void;
    getNodeMapForSearch: () => never[];
    reset: () => void;
    /** --------------------------------------------------------- **/
    /** -- data related handling                               -- **/
    /** --------------------------------------------------------- **/
    private loadGraphData;
    private quick_refreshGraphData;
    private refreshGraphData;
    clearAllGraphData: () => void;
    getCachedJsonObj(): null;
    clearGraphData: () => void;
    private generateDictionary;
    private filterFunction;
    /** --------------------------------------------------------- **/
    /** -- force-layout related functions                      -- **/
    /** --------------------------------------------------------- **/
    private storeLinksOnNodes;
    private setForceLayoutData;
    /**
     * The label nodes are positioned randomly, because they are created from scratch if the data changes and lose
     * their position information. With this hack the position of old labels is copied to the new labels.
     */
    private setPositionOfOldLabelsOnNewLabels;
    updatePropertyDraggerElements: (property: any) => void;
    private refreshGraphStyle;
    private remove;
    generateEditElements: () => void;
    getUnfilteredData: () => any;
    getClassDataForTtlExport: () => any;
    getPropertyDataForTtlExport: () => any[];
    private calculateLinkPartDistance;
    private getVisibleLinkDistance;
    updateNodeMap: () => void;
    updateHaloStyles: () => void;
    isADraggerActive: () => boolean;
    private transform;
    /** --------------------------------------------------------- **/
    /** -- Touch behaviour functions --                   **/
    /** --------------------------------------------------------- **/
    setTouchDevice(val: any): void;
    isTouchDevice(): boolean;
    /** --------------------------------------------------------- **/
    /** -- halo and localization functions --                     **/
    /** --------------------------------------------------------- **/
    private updateHaloRadius;
    private getScreenCoords;
    private getClickedScreenCoords;
    computeDistanceToCenter: (node: any, inverse?: boolean | undefined) => void;
    zoomToElementInGraph: (element: any) => void;
    updateElementHaloRadius: (element: any) => void;
    private targetLocationZoom;
    private getWorldPosFromScreen;
    locateSearchResult: () => void;
    resetSearchHighlight: () => void;
    updatePulseIds: (nodeIdArray?: never[]) => void;
    highLightNodes: (nodeIdArray: any) => void;
    hideHalos: () => any;
    private nodeInViewport;
    getBoundingBoxForTex: () => number[];
    private updateTargetElement;
    calcBboxPos: (bbox: any) => {
        sP: any[];
        eP: number[];
        cx: number;
        cy: number;
    };
    private transformStr;
    forceRelocationEvent: (dynamic?: boolean | undefined) => void;
    /** --------------------------------------------------------- **/
    /** -- VOWL EDITOR  create/ edit /delete functions --         **/
    /** --------------------------------------------------------- **/
    changeNodeType: (element: any) => void;
    changePropertyType: (element: any) => false | undefined;
    removeEditElements: () => void;
    editorMode(val: any): boolean | undefined;
    private createNewNodeAtPosition;
    private addNewNodeElement;
    getTargetNode: (position: any) => null;
    genericPropertySanityCheck(domain: any, range: any, typeString: any, header: any, action: any): boolean;
    checkIfIriClassAlreadyExist(url: any): any;
    classesSanityCheck(classElement: any, targetType: any): boolean;
    propertyCheckExistenceChecker(property: any, domain: any, range: any): boolean;
    sanityCheckProperty(domain: any, range: any, typeString: any): boolean;
    createNewObjectProperty: (domain: any, range: any, draggerEndposition: any) => false | undefined;
    createDataTypeProperty: (node: any) => void;
    removeNodesViaResponse: (nodesToRemove: any, propsToRemove: any) => void;
    removeNodeViaEditor: (node: any) => void;
    removePropertyViaEditor: (property: any) => void;
    executeColorExternalsModule: () => void;
    executeCompactNotationModule: () => void;
    executeEmptyLiteralFilter: () => void;
    /** --------------------------------------------------------- **/
    /** -- animation functions for the nodes --                   **/
    /** --------------------------------------------------------- **/
    animateDynamicLabelWidth: () => void;
    /** --------------------------------------------------------- **/
    /** -- Touch behaviour functions --                   **/
    /** --------------------------------------------------------- **/
    private modified_dblClickFunction;
    private doubletap;
    private touchzoomed;
    private modified_dblTouchFunction;
    /** --------------------------------------------------------- **/
    /** -- Hover and Selection functions, adding edit elements --  **/
    /** --------------------------------------------------------- **/
    setIgnoreOtherHoverEvents: (val: any) => void;
    private delayedHiddingHoverElements;
    /**
     * 更新动态标签及其悬停元素的实验代码
     */
    private editElementHoverOnHidden;
    private editElementHoverOutHidden;
    private editElementHoverOn;
    killDelayedTimer: () => void;
    /**
     *  编辑模式hover元素
     * @param tbh
     * @param touchBehaviour
     */
    editElementHoverOut: (tbh?: boolean | undefined) => void;
    activateHoverElementsForProperties: (val: any, property: any, inversed: any, touchBehaviour: any) => void;
    updateDraggerElements: () => void;
    private setAddDataPropertyHoverElementPosition;
    private setDeleteHoverElementPosition;
    hideAllMenus(): this;
    private setDeleteHoverElementPositionProperty;
    activateHoverElements: (val: any, node: any, touchBehaviour: any) => void;
    /**
   * 注册插件并且bind到this 推荐使用,  注入graph实例对象,挂在原型链上
   * const MyPlugin = {
    install(Graph, options) {
      Graph.prototype.myattr = 'Example plugin Property';
      Graph.prototype.myfn = function() {
        console.log(this);
        return this.myattr
      }
    }
  };
   Graph.use(MyPlugin);
   * @param plugin 插件纯函数
   */
    static use: (plugin: any) => any;
    /**
     * or 纯函数的方法
     * const A = function(graph){
     *   let graph = this;
     * }
     * Graph.install('a',A);
     * @param name
     * @param descriptor
     */
    static install(name: any, descriptor: any): void;
    private pluginsCall;
    caller(name: any): any;
}
