import type { ComponentType, ReactNode } from "react";
import { type FetchReportPageOptions } from "../api/fetchReportPage";
import type { ReportPageNavKey } from "../api/reportPageTypes";
export type DashboardTabStaticPageHeader = {
    title: string;
    subtitle: string;
};
type RunPage = <T>(signal: AbortSignal, execute: () => Promise<T>) => Promise<T>;
type OptsFactory = (signal: AbortSignal) => FetchReportPageOptions;
export type DashboardTabPluginDefinition = {
    id: ReportPageNavKey;
    sideMenuLabel: string;
    icon: ReactNode;
    pageHeader: DashboardTabStaticPageHeader;
    Tab: ComponentType<{
        content: never;
    }>;
    Skeleton: ComponentType<{
        pageHeader: DashboardTabStaticPageHeader;
    }>;
    createHttpFetcher: (runPage: RunPage, opts: OptsFactory) => (signal: AbortSignal) => Promise<unknown>;
};
export declare const DASHBOARD_TAB_PLUGINS: readonly [DashboardTabPluginDefinition, DashboardTabPluginDefinition, DashboardTabPluginDefinition, DashboardTabPluginDefinition, DashboardTabPluginDefinition, DashboardTabPluginDefinition, DashboardTabPluginDefinition, DashboardTabPluginDefinition, DashboardTabPluginDefinition];
export type DashboardTabDefinitionId = (typeof DASHBOARD_TAB_PLUGINS)[number]["id"];
export declare const defaultSideMenuItems: {
    disabled?: boolean | undefined;
    disabledTooltip?: string | undefined;
    id: keyof import("..").ReportPageDtoByNavId;
    label: string;
    icon: ReactNode;
}[];
export declare const DASHBOARD_TAB_REGISTRY: { [K in DashboardTabDefinitionId]: {
    Tab: ComponentType<{
        content: never;
    }>;
    Skeleton: ComponentType<{
        pageHeader: DashboardTabStaticPageHeader;
    }>;
    pageHeader: DashboardTabStaticPageHeader;
}; };
export declare function getDashboardTabStaticPageHeader(id: DashboardTabDefinitionId): DashboardTabStaticPageHeader;
type PluginDef = (typeof DASHBOARD_TAB_PLUGINS)[number];
type TabContentOf<P> = P extends {
    Tab: ComponentType<{
        content: infer C;
    }>;
} ? C : never;
export type HttpDashboardContentFetchersResult = {
    [K in DashboardTabDefinitionId]: (signal: AbortSignal) => Promise<TabContentOf<Extract<PluginDef, {
        id: K;
    }>>>;
};
export declare function buildHttpDashboardContentFetchersFromPlugins(runPage: RunPage, opts: OptsFactory): HttpDashboardContentFetchersResult;
export {};
