import { PureComponent } from "react";
import { type IAnalyticalBackend, type IPreparedExecution } from "@gooddata/sdk-backend-spi";
import { type IExecutionConfig, type IInsight, type IInsightDefinition, type ISettings, type ITheme, type IVisualizationClass } from "@gooddata/sdk-model";
import { type ExplicitDrill, type ILocale, type OnError, type OnExportReady, type OnLoadingChanged, type VisualizationEnvironment } from "@gooddata/sdk-ui";
import { type IVisualizationCatalog } from "./VisualizationCatalog.js";
import { type ISortConfig } from "../interfaces/SortConfig.js";
import { type IBucketItem, type IConfigurationPanelRenderers, type IDrillDownContext, type IExtendedReferencePoint, type IGdcConfig, type IReferencePoint, type IVisCallbacks } from "../interfaces/Visualization.js";
export interface IBaseVisualizationProps extends IVisCallbacks {
    backend: IAnalyticalBackend;
    projectId: string;
    insight: IInsightDefinition;
    insightPropertiesMeta?: any;
    config?: IGdcConfig;
    executionConfig?: IExecutionConfig;
    visualizationClass: IVisualizationClass;
    environment?: VisualizationEnvironment;
    width?: number;
    height?: number;
    locale?: ILocale;
    messages: Record<string, string>;
    dateFormat?: string;
    drillableItems?: ExplicitDrill[];
    totalsEditAllowed?: boolean;
    featureFlags?: ISettings;
    visualizationCatalog?: IVisualizationCatalog;
    newDerivedBucketItems?: IBucketItem[];
    referencePoint?: IReferencePoint;
    onError: OnError;
    onExportReady?: OnExportReady;
    onLoadingChanged: OnLoadingChanged;
    isMdObjectValid?: boolean;
    configPanelClassName?: string;
    theme?: ITheme;
    lastSavedVisClassUrl?: string;
    sourceInsightId?: string;
    onExtendedReferencePointChanged?(referencePoint: IExtendedReferencePoint, sortConfig?: ISortConfig): void;
    onSortingChanged?(sortConfig: ISortConfig): void;
    onNewDerivedBucketItemsPlaced?(): void;
    renderer?(component: any, target: Element): void;
    unmount?(): void;
    configurationPanelRenderers?: IConfigurationPanelRenderers;
    supportsChartFill?: boolean;
}
export declare class BaseVisualization extends PureComponent<IBaseVisualizationProps> {
    static defaultProps: Pick<IBaseVisualizationProps, "visualizationCatalog" | "newDerivedBucketItems" | "referencePoint" | "onExtendedReferencePointChanged" | "onNewDerivedBucketItemsPlaced" | "isMdObjectValid" | "configPanelClassName" | "featureFlags">;
    private visElementId;
    private visualization;
    private executionFactory;
    private containerRef;
    /**
     * The component may render both visualization and config panel. In React18 we therefore need two
     * roots with their respective render methods. This Map holds the roots for both and provides
     * render and unmount methods whenever needed.
     */
    private reactRootsMap;
    constructor(props: IBaseVisualizationProps);
    componentWillUnmount(): void;
    UNSAFE_componentWillReceiveProps(nextProps: IBaseVisualizationProps): void;
    componentDidMount(): void;
    componentDidUpdate(): void;
    render(): import("react/jsx-runtime").JSX.Element;
    private getVisElementClassName;
    private getClassName;
    private setupVisualization;
    private getReactRenderFunction;
    private getReactUnmountFunction;
    private updateVisualization;
    private triggerPlaceNewDerivedBucketItems;
    private triggerExtendedReferencePointChanged;
    private triggerPropertiesChanged;
    private static bucketReferencePointHasChanged;
    private static propertiesControlsHasChanged;
    private somePropertiesRelevantForReferencePointChanged;
    private getVisualizationProps;
    getInsightWithDrillDownApplied(sourceVisualization: IInsight, drillDownContext: IDrillDownContext): IInsight;
    getExecution(): IPreparedExecution | null;
    getExecutions(): IPreparedExecution[] | undefined;
}
//# sourceMappingURL=BaseVisualization.d.ts.map