import { ComponentUI, ComponentModel } from '@teambit/component';
import { ComponentTreeUI, ComponentTreeNode } from '@teambit/component-tree';
import { SlotRegistry } from '@teambit/harmony';
import type { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';
import { MenuWidgetSlot, MenuWidget } from '@teambit/ui-foundation.ui.menu';
import { SidebarUI, SidebarItem, SidebarItemSlot } from '@teambit/sidebar';
import { MenuItemSlot, MenuItem } from '@teambit/ui-foundation.ui.main-dropdown';
import { UIRootUI as UIRoot, UiUI } from '@teambit/ui';
import { GraphUI } from '@teambit/graph';
import React, { ReactNode } from 'react';
import { RouteProps } from 'react-router-dom';
import { CommandBarUI } from '@teambit/command-bar';
import type { DrawerType } from '@teambit/ui-foundation.ui.tree.drawer';
import { ComponentFilters } from '@teambit/component.ui.component-filters.component-filter-context';
import { DrawerWidgetSlot, ComponentFiltersSlot } from '@teambit/component.ui.component-drawer';
export type SidebarWidgetSlot = SlotRegistry<ComponentTreeNode>;
export declare class WorkspaceUI {
    /**
     * route slot.
     */
    private routeSlot;
    /**
     * component ui extension.
     */
    private componentUi;
    /**
     * menu slot
     */
    private menuSlot;
    private menuItemSlot;
    private sidebar;
    private sidebarSlot;
    /**
     * sidebar link slot
     */
    private sidebarItemSlot;
    private drawerWidgetSlot;
    private drawerComponentsFiltersSlot;
    private commandBarUI;
    private menuWidgetSlot;
    constructor(
    /**
     * route slot.
     */
    routeSlot: RouteSlot, 
    /**
     * component ui extension.
     */
    componentUi: ComponentUI, 
    /**
     * menu slot
     */
    menuSlot: RouteSlot, menuItemSlot: MenuItemSlot, sidebar: SidebarUI, sidebarSlot: SidebarWidgetSlot, 
    /**
     * sidebar link slot
     */
    sidebarItemSlot: SidebarItemSlot, drawerWidgetSlot: DrawerWidgetSlot, drawerComponentsFiltersSlot: ComponentFiltersSlot, commandBarUI: CommandBarUI, menuWidgetSlot: MenuWidgetSlot);
    private setKeyBindHandler;
    /**
     * register a route to the workspace.
     */
    registerRoutes(routes: RouteProps[]): this;
    registerDrawers(...drawers: DrawerType[]): this;
    registerSidebarWidget(componentTreeNode: ComponentTreeNode): this;
    registerMenuItem: (menuItems: MenuItem[]) => void;
    registerMenuWidget: (menuWidgets: MenuWidget[]) => void;
    registerMenuRoutes: (routes: RouteProps[]) => this;
    setComponents: (components: ComponentModel[]) => void;
    registerSidebarLink: (...links: SidebarItem[]) => void;
    /**
     * register component filters
     */
    registerDrawerComponentFilters: (filters: ComponentFilters) => void;
    registerDrawerWidgets: (widgets: ReactNode[]) => void;
    uiRoot(): UIRoot;
    listSidebarItems(): (React.ComponentClass<{}, any> | React.FunctionComponent<{}>)[];
    private menuItems;
    static dependencies: import("@teambit/harmony").Aspect[];
    static runtime: import("@teambit/harmony").RuntimeDefinition;
    static slots: (((registerFn: () => string) => SlotRegistry<ComponentTreeNode>) | ((registerFn: () => string) => SlotRegistry<RouteProps>) | ((registerFn: () => string) => SlotRegistry<DrawerWidgetSlot>))[];
    static provider([ui, componentUi, sidebar, componentTree, commandBarUI, graphUI]: [
        UiUI,
        ComponentUI,
        SidebarUI,
        ComponentTreeUI,
        CommandBarUI,
        GraphUI
    ], config: any, [routeSlot, menuSlot, menuItemSlot, sidebarSlot, sidebarItemSlot, drawerWidgetSlot, drawerComponentsFiltersSlot, menuWidgetSlot,]: [
        RouteSlot,
        RouteSlot,
        MenuItemSlot,
        SidebarWidgetSlot,
        SidebarItemSlot,
        DrawerWidgetSlot,
        ComponentFiltersSlot,
        MenuWidgetSlot
    ]): Promise<WorkspaceUI>;
}
export default WorkspaceUI;
