import { SimpleOverlayOptions } from "./simple-overlay-options.interface";
/** Description of EagnaTreeFormat interface */
export interface EagnaTreeFormat {
    node?: EagnaTreeNode;
    nodes?: EagnaTreeNode[];
}
export declare type sortType = "asc" | "desc" | {
    order: "asc" | "desc";
    byId?: string;
};
declare type FilterFunc = (entry: any) => boolean;
/** This function will be used as children to separate the 'applicable' children for a particular node
 */
declare type TreeDataAttribute = string;
/** This attribute key must be present in the tree node data */
/** Description of EagnaTreeNode interface */
export interface EagnaTreeNode {
    /** Attribute of interest for node interactions [to be returned on 'flat' flag set].
     * *Required unless isStatic=True
     */
    id?: TreeDataAttribute;
    /** Type: Identifier for the context of the node (i.e. 'app1-home', 'module1','module2','module3')  */
    type: string;
    /** Visual display for node in tree.
      * Simple attribute of the data i.e. 'name','title'
      * or as HTML, wrapping attributes from the data in __[attr]__ markers
      * i.e. "<b>__[title]__</b>__[description]__"
      */
    title: string;
    /** Unique identifier of the node. Will be used to generate the node id
     * as 'ParentNodeID' + this.type + this.data[key] i.e. 'project1' + 'engine'+ 1
     * *Required unless isStatic=True
     */
    key?: TreeDataAttribute;
    /** Text to be displayed on-hover of the title  */
    alt_text?: TreeDataAttribute;
    /** Ignore the sorting for this node (use the backend provided order)
     * Only needs to be setted if the tree is initialized with a sort option.
     */
    skipSort?: boolean;
    /** Attribute in the node data which contains the children elements */
    children?: TreeDataAttribute;
    /** Definition of static child nodes */
    staticChildren?: EagnaTreeNode[];
    /** When parents have 'staticChildren', child must have 'isStatic'=true */
    isStatic?: boolean;
    /** When isStatic=True, set 'title' to 'name', and 'name' to your 'Node Label' */
    name?: string;
    /** Definition of single child node */
    node?: EagnaTreeNode;
    /** Definition of multiple child nodes */
    nodes?: EagnaTreeNode[];
    filterFunc?: FilterFunc;
    /** Assign listener to ctrl+click and open new window */
    ctrlOpen?: boolean;
    /** Attribute to be passed to '_auth.getUserMembershipsSnapshot as key' to enforce menu Option access per memberships */
    menuKey?: string;
    /** Describes 'where to find' such key in the tree hierarchy (context: node) (i.e. data.id, parent.data.id, parent.parent.data.id) */
    menuKeyId?: string;
    /** Overlay options (right clicks) */
    menuOptions?: SimpleOverlayOptions[];
    /** Additional information to be passed to the ctrlOpen */
    extra?: TreeDataAttribute;
}
export {};
