import { CancelTokenSource } from 'axios';
import { TableFetchType } from '../types/table-fetch';
export interface CoreUIConfig {
    apiBaseUrl: string;
    iconUrl?: string;
    theme?: 'light' | 'realDark' | 'dark';
    isDarkTheme?: boolean;
    defaultColorPrimary?: string;
}
export interface CoreUII18n {
    locale?: string;
    formatMessage: (descriptor: {
        id: string;
    }, values?: any) => string;
}
export interface CoreUILocale {
    getAllLocales: () => string[];
    setLocale: (locale: string, reload?: boolean) => void;
}
export interface RequestOptions {
    method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
    params?: Record<string, any>;
    data?: any;
    skipErrorHandler?: boolean;
    getResponse?: boolean;
    cancelToken?: CancelTokenSource;
    headers?: Record<string, string>;
    onDownloadProgress?: (progressEvent: any) => void;
}
export interface RequestService {
    <T = any>(url: string, options?: RequestOptions): Promise<T>;
}
export interface Services {
    request: RequestService;
    router?: {
        push: (path: string) => void;
        replace: (path: string) => void;
        goBack: () => void;
    };
}
export interface CurrentUser {
    id?: string | number;
    username?: string;
    fullName?: string;
    isAdmin?: boolean;
    [key: string]: any;
}
export interface CoreHooks {
    useIntl: () => CoreUII18n;
    useCurrentUser: () => CurrentUser | undefined;
    usePaginationStatus?: (key: string) => {
        pagination: any;
        getPaginationStatus: () => any;
        setPagination: (pagination: any) => void;
        getPagination: () => any;
        clearPagination: () => void;
    };
    useTabActive?: () => {
        setTabActive: (tabKey: string, value: any) => void;
        getTabActive: (tabKey: string) => any;
        tabsMap: Record<string, string>;
    };
    useTableFetch: TableFetchType;
    useUserSettings?: () => {
        userSettings: any;
        setUserSettings: any;
        setTheme: (mode: string) => void;
        isDarkTheme: boolean;
        themeData: any;
        componentSize: string;
    };
    useUserSettingsStorage?: () => {
        setStorageUserSettings: (value: Record<string, any>) => void;
        getStorageUserSettings: () => any;
    };
}
export interface CoreUISlots {
    ExtraContent?: React.ComponentType<{
        isDarkTheme?: boolean;
    }>;
}
export interface CoreUIAccess {
    Access: React.ComponentType<{
        accessible: boolean;
        fallback?: React.ReactNode;
        children: React.ReactNode;
    }>;
    useAccess: () => Record<string, any>;
}
export interface CoreUIContextProps {
    config: CoreUIConfig;
    tokens?: Record<string, string>;
    i18n: CoreUII18n;
    locale: CoreUILocale;
    services: Services;
    hooks: CoreHooks;
    localStore?: {
        readColumnSettings: (key: string) => string[] | null;
        readState: (key: string) => void;
        writeColumnSettings: (key: string, value: any) => void;
        writeState: (key: string, value: any) => void;
    };
    slots?: CoreUISlots;
    access?: CoreUIAccess;
}
declare const CoreUIContext: import('react').Context<CoreUIContextProps>;
export default CoreUIContext;
