import { IChart, IChartData, ISettings, IWidgetVariables } from "../interfaces";
import { WidgetConfigInner } from "./widgetConfig";
import { IWidgetSettings } from "../widgetSettings";
import { WidgetOptions } from "./widgetOptions";
declare type EventBusFunc = (varName: string, value: any, dataSourceId: number) => Promise<boolean>;
export declare type AddVarFunc<T> = (dataSourceIndex: number, name: T, description: string, hint: string) => void;
export declare abstract class Chart implements IChart {
    protected config: WidgetConfigInner;
    protected options: WidgetOptions;
    protected widgetSettings: IWidgetSettings;
    protected chartData: IChartData;
    protected loading: boolean;
    protected uniqId: string;
    private resizeObserver;
    private readonly template;
    initialized: boolean;
    abstract run(): void;
    abstract getSettings(): IWidgetSettings;
    abstract getVariables(): IWidgetVariables;
    abstract getStyles(): ISettings;
    getTemplate(): string | null;
    onResize: (width: number, height: number) => void;
    /**
     * Обработчик сообщений от шины
     * По-умолчанию пустой и возвращает false
     * @return true - если необходима перерисовка
     */
    onEventBus: EventBusFunc;
    constructor(config: WidgetConfigInner, options: WidgetOptions);
    destroy(): void;
    /**
     * Создание виджета
     */
    readonly create: () => void;
    /**
     * Перерисовать виджет с текущими данными
     */
    redraw(): Promise<void>;
    /**
     * Получить названия всех DataSources
     * NOTE: На донный момент возвращает только SingleDataSource
     * TODO: Передать на отдельное поле DataSetId
     */
    getDataSourceNameIds(): string[];
    /**
     * Получить индекс dataSource
     */
    getDataSourceIndex(dataSourceName: string): number | null;
    /**
     * Добавить переменную для управления виджетом извне
     */
    protected addVar<T = string>(res: IWidgetVariables): AddVarFunc<T>;
    /**
     * Возвращает настройку из сеттингов виджета
     * В зависимости от количества параметров, использует данные настройки чарта или настройки из параметра
     * @param {ISettings} args[0] - settings Объект с настройками
     * @param {string} args[1] - path название поля
     * или
     * @param {string} args[0] - path название поля
     * @return возвращает значение того типа, к которому присваивается результат, поэтому нужен тип T
     */
    protected getWidgetSetting<T = void>(...args: Array<ISettings | string>): T;
    /**
     * Возвращает настройку из датасета
     * @param settings Объект с настройками или индекс dataSource с настройками
     * @param path название поля
     * @return возвращает значение того типа, к которому присваивается результат, поэтому нужен тип T
     */
    protected getDataSetSettings<T = void>(settings: ISettings | number, path: string): T;
    /**
     * Проверяем, есть ли среди графиков гистограммы
     * Для них необходимо изменить вид графика
     */
    protected hasHistogram(): boolean;
    /**
     * Заменить все названия классов на нужные
     * @param template
     */
    protected replaceTemplateClasses(template: string): string;
    /**
     * Отрендерить шаблон
     */
    protected renderTemplate(data: Object): string;
    private startLoading;
    private stopLoading;
}
export {};
