import Joi from '@vizzly/joi';
import { Dumpable } from '../Dumpable';
import { DataSet } from '../DataSet/types';
import { DataPanelConfig } from '../DataPanelConfig/types';
import { FormatPanelConfig } from '../FormatPanelConfig/types';
import FieldNotFoundInDataSet from '../errors/FieldNotFoundInDataSet';
import DataSetNotFound from '../errors/DataSetNotFound';
import CorruptedView from '../errors/CorruptedView';
import { ComponentInterfaceConfig } from './types/ComponentInterfaceConfig';
import { ComponentNamespace } from './types/namespaces.types';
import { AcceptedTypes } from '../CustomField/types';
export * from './types/ComponentInterfaceConfig';
export interface ComponentInterface<Hydrated = any, Dumped = any> extends Dumpable<Hydrated, Dumped> {
    title: string;
    description: string;
    servicesClass: string;
    namespace: ComponentNamespace;
    setDataAttributesFromPreAggregatedDataSet?: (attributes: Hydrated, dataSet: DataSet) => Hydrated;
    removeField: (hydrated: Hydrated, fieldId: string) => Hydrated;
    init: (dataSetId: string, overrides?: Partial<Hydrated>) => Hydrated;
    setAttributes: (original: Hydrated, changes: Partial<Hydrated>) => Hydrated;
    validate: (hydrated: Hydrated, dataSets: DataSet[]) => (CorruptedView | FieldNotFoundInDataSet | DataSetNotFound)[];
    schema: Joi.ObjectSchema;
    createFeedback?: (hydrated: Hydrated) => boolean | string | null;
    isRunnable: (hydrated: Hydrated) => boolean;
    autoGenerate: (dataSet: DataSet) => Hydrated;
    dataPanelConfig: () => DataPanelConfig;
    formatPanelConfig: () => FormatPanelConfig;
    supportedCustomFields: {
        percentages: boolean;
        simpleMaths: boolean;
        aggregateMaths: boolean;
        rules: boolean;
        roundedNumbers: boolean;
        dateCalculations: boolean;
        conditional: boolean;
        customBuild: Array<AcceptedTypes> | false;
    };
    supportedFeatures: {
        parameters: 'v1' | 'v2' | false;
        colorGradient: boolean;
    };
    supportedAggregations?: Array<string>;
    parametersV2Sections?: Array<DataPanelConfig[number]['namespace']>;
}
export declare type LoadComponentInterface<Hydrated, Dumped> = (config: ComponentInterfaceConfig) => ComponentInterface<Hydrated, Dumped>;
