import type { ButtonHTMLAttributes, ReactNode } from "react";
import type { MetabolicDashboardConfig } from "../branding/types";
import type { DashboardContentFetchers, DashboardTabContentLoadErrorInfo } from "../MetabolicDashboard/dashboardTab/dashboardTabModel";
export type ShellLayoutProps = {
    sidebar: ReactNode;
    children: ReactNode;
    sidebarWidthClassName?: string;
    className?: string;
};
export type SideMenuNavButtonProps = {
    label: string;
    icon: ReactNode;
    isActive?: boolean;
    onClick?: () => void;
    className?: string;
    disabledTooltip?: string;
} & Pick<ButtonHTMLAttributes<HTMLButtonElement>, "type" | "disabled" | "onPointerEnter" | "onFocus">;
export type SideMenuItem = {
    id: string;
    label: string;
    icon: ReactNode;
    disabled?: boolean;
    disabledTooltip?: string;
};
export type SideMenuUserProfile = {
    displayName?: string;
    email?: string;
    avatarSrc?: string;
};
export type SideMenuFooterProps = {
    userProfile?: SideMenuUserProfile;
};
export type SideMenuProps = {
    title?: ReactNode;
    logo?: ReactNode;
    userProfile?: SideMenuUserProfile;
    footerContent?: ReactNode;
    className?: string;
    navClassName?: string;
    items?: SideMenuItem[];
    activeItemId?: string;
    defaultActiveItemId?: string;
    onItemClick?: (id: string) => void;
    onNavItemPrefetch?: (id: string) => void;
};
export type MetabolicDashboardViewerRole = "practitioner" | "patient";
export type MetabolicDashboardReportHttpConfig = {
    apiKey?: string;
    userId?: string;
    reportId?: string;
    questionnaireResponseId?: string;
    headers?: HeadersInit;
    fetchImpl?: typeof fetch;
};
export type MetabolicDashboardProps = {
    config?: MetabolicDashboardConfig;
    apiKey?: string;
    viewerRole?: MetabolicDashboardViewerRole;
    sideMenuTitle?: ReactNode;
    sideMenuLogo?: ReactNode;
    sideMenuBottomAction?: ReactNode;
    sideMenuButtonLabel?: ReactNode;
    onSideMenuButtonClick?: () => void;
    sideMenuUserProfile?: SideMenuUserProfile;
    content?: ReactNode;
    reportHttpConfig?: MetabolicDashboardReportHttpConfig;
    dashboardContentFetchers?: Partial<DashboardContentFetchers>;
    onDashboardTabContentLoadError?: (info: DashboardTabContentLoadErrorInfo) => void;
    onExportReports?: () => void | Promise<void>;
    renderMainContent?: (activeItemId: string) => ReactNode;
    activeNavItemId?: string;
    defaultActiveNavItemId?: string;
    onActiveNavItemChange?: (activeItemId: string) => void;
    shellClassName?: string;
    sideMenuClassName?: string;
    mainClassName?: string;
    sidebarWidthClassName?: string;
    dashboardTabContentCacheTtlMs?: number;
};
