import { AfterViewInit, ElementRef, EventEmitter, OnDestroy, OnInit, QueryList } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { TccET_IAM } from '../../../odata/models/iam.model';
import { TccC4Node } from '../../../odata/models/shared.model';
import { TccTestForRoleService } from '../../../shared/services/tcc-test-for-role/tcc-test-for-role.service';
import { TccLibIcons } from '../../../shared/classes/tcc-register-icons.class';
import { TccSideNavService } from '../../services/tcc-side-nav/tcc-side-nav.service';
import { TccUserPropertyService } from '../../../shared/services/tcc-user-property/tcc-user-property.service';
import { TccAuthService } from '../../../odata/services/tcc-auth/tcc-auth.service';
interface ISideNavElement {
    path: string;
    uniqueidentifier: string;
    icon?: string;
    customIcon?: string;
    usericon?: TccET_IAM.UserResponse;
    c4node?: TccC4Node;
    caption: string;
    tooltip?: string;
    onbottom?: boolean;
    roles?: Array<TccET_IAM.UserRoles>;
    rolesStrategy?: SideNavRolesStrategy;
    licenses?: TccET_IAM.Module[];
    _openParents?: string;
    type: SidenavElementType;
    expandUpwards?: boolean;
}
export declare enum SideNavRolesStrategy {
    standard = "standard",// Admin and Master will be automatically added
    strict = "strict"
}
export interface SideNavConfig {
    sidenavLogoText: string;
    sidenavLogo: string;
    tenant?: {
        Logo?: string;
        Text?: string;
        systemclass: string;
        fallbacklogo: string;
    };
}
export interface SidenavNode extends ISideNavElement {
    children?: Array<SidenavLeaf | SidenavNode>;
    type: "node";
}
export interface SidenavLeaf extends ISideNavElement {
    function?: Function;
    type: "leaf";
    _combinedpath?: string;
    hidden?: boolean;
}
export type SidenavElementType = "leaf" | "node";
export type SidenavElement = SidenavNode | SidenavLeaf;
export declare enum SidenavUserProperties {
    expanded = "expanded"
}
export declare class TccSideNavComponent implements OnInit, AfterViewInit, OnDestroy {
    private router;
    private route;
    private hasRole;
    private userPropertyService;
    private auth;
    navigationchange: EventEmitter<Array<string>>;
    collapse: EventEmitter<number>;
    widthName: QueryList<ElementRef>;
    _activePath: string;
    _activePaths: Array<string>;
    _navelements: Array<SidenavElement>;
    _navelementsbottom: Array<SidenavElement>;
    _sidenavExpanded: boolean;
    _openedSidenavElements: string;
    _openedSidenavElements2: string;
    _maxNameWidth: number;
    CollapseCaption: string;
    ExpandCaption: string;
    sidenavLogo: string;
    sidenavLogoText: string;
    tenantLogo: string;
    tenantText: string;
    className: string;
    private basehref;
    private pathtree;
    private routerSubscribtion;
    private _userRoles;
    private _elements;
    private focusIn;
    private preventNext;
    fallbackLogo: string;
    tenantLoads: boolean;
    tccLibIcons: typeof TccLibIcons.Icon;
    MaxWidth: number;
    set Config(config: SideNavConfig);
    set NavElements(elements: Array<SidenavElement>);
    hasBanner: boolean;
    constructor(router: Router, route: ActivatedRoute, hasRole: TccTestForRoleService, userPropertyService: TccUserPropertyService, auth: TccAuthService, sideNavService: TccSideNavService);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    tenantIconFailed(): void;
    clickSidenavLeaf(element: SidenavLeaf, event: Event): void;
    private onSublevelNav;
    mousedownSublevelNav(element: SidenavNode, event: Event): void;
    mouseoverToplevelLeaf(event: Event, mousein: boolean): void;
    mouseoverSublevelNav(event: Event, element: SidenavNode, mousein: boolean): void;
    focusSublevelNav(event: Event, element: SidenavNode, focusin: boolean): void;
    testForRolesAndLicenses(children: Array<SidenavElement>): void;
    onNavigation(url: string): void;
    filterActivePaths(url: string): Array<string>;
    private build_openParents;
    private build_combinedPath;
    private buildPathTree;
    private parseChildArray;
    private setExpandedWidth;
    expandSidenav(): void;
}
export {};
