import type { PayloadAction } from '@reduxjs/toolkit';
import type { ReactElement } from 'react';
import type { ClusterChooserType } from '../components/cluster/ClusterChooser';
export type FunctionsToOverride = {
    setToken?: (cluster: string, token: string | null) => void;
    getToken?: (cluster: string) => string | undefined;
};
export interface UIPanel {
    /** Unique ID for this panel */
    id: string;
    /** Panel location */
    side: 'top' | 'right' | 'bottom' | 'left';
    /** React component that will be rendered inside the panel */
    component: (props: any) => ReactElement;
}
export interface UIState {
    isVersionDialogOpen: boolean;
    clusterChooserButtonComponent?: ClusterChooserType;
    hideAppBar?: boolean;
    isFullWidth?: boolean;
    functionsToOverride: FunctionsToOverride;
    panels: Array<UIPanel>;
}
export declare const INITIAL_UI_STATE: UIState;
export declare const uiSlice: import("@reduxjs/toolkit").Slice<UIState, {
    setHideAppBar(state: import("immer").WritableDraft<UIState>, action: PayloadAction<boolean | undefined>): void;
    setClusterChooserButton(state: import("immer").WritableDraft<UIState>, action: PayloadAction<ClusterChooserType | undefined>): void;
    setVersionDialogOpen(state: import("immer").WritableDraft<UIState>, action: PayloadAction<boolean>): void;
    setFunctionsToOverride(state: import("immer").WritableDraft<UIState>, action: PayloadAction<FunctionsToOverride>): void;
    setIsFullWidth(state: import("immer").WritableDraft<UIState>, action: PayloadAction<boolean | undefined>): void;
    addUIPanel(state: import("immer").WritableDraft<UIState>, action: PayloadAction<UIPanel>): void;
}, "ui", "ui", import("@reduxjs/toolkit").SliceSelectors<UIState>>;
/**
 * @returns UI panels grouped by their location
 */
export declare const useUIPanelsGroupedBySide: () => {
    top: UIPanel[];
    right: UIPanel[];
    left: UIPanel[];
    bottom: UIPanel[];
};
declare const _default: import("redux").Reducer<UIState>;
export default _default;
