import React, { ReactNode } from "react";
import { SidebarItem } from "../sidebar/sidebar-resources-provider";
import { UserWorkspaces } from "../toolbar/workspace-picker/workspace-picker-types";
import { Notification } from "../../resources/notification/notification.resource";
import { UserSetting } from "../../../meta/core/resources/users/user-setting.resource";
import { UserVisibleWorkspaceInfo } from "../toolbar/visible-workspace-picker/visible-workspace-picker-types";
import { UserPermissionList } from "../../../meta/core/types/user-permission";
/**
 * Props of {@link ClientRoot}
 */
export interface ClientRootProps {
    /** Child elements that will be displayed inside the client layout.*/
    children: ReactNode;
    /** Preliminary data needed to initialize the client, or a promise resolving to it.*/
    userPermissions: UserPermissionList | Promise<UserPermissionList>;
    /** List of sidebar navigation items, or a promise resolving to it. */
    sidebarItems: SidebarItem[] | Promise<SidebarItem[]>;
    /** User preferences, or a promise resolving to it. */
    userSettings: UserSetting[] | Promise<UserSetting[]>;
    /** Data about workspaces visible to the user, or a promise resolving to it. */
    visibleWorkspaces: UserVisibleWorkspaceInfo | Promise<UserVisibleWorkspaceInfo>;
    /** The user's notifications, or a promise resolving to it. */
    notifications: Notification[] | Promise<Notification[]>;
    /** Information about the workspaces the user has access to, or a promise resolving to it. */
    userWorkspaces: UserWorkspaces | Promise<UserWorkspaces>;
}
/**
 * This component is responsible for initializing the client side after loading data,
 * configuration, and navigation.
 *
 * @param {@link ClientRootProps}
 */
export declare function ClientRoot({ children, userPermissions, sidebarItems, userSettings, visibleWorkspaces, notifications, userWorkspaces, }: Readonly<ClientRootProps>): React.JSX.Element;
