import { BaseBrick, IBrickData, IBrickInfo, IBrickPartConfig, IValidateInfo, Scheduler } from '@chief-editor/base';
import { ILayoutConfig } from '@chief-editor/types';
import { FunctionAny } from '@co-hooks/util';
import { IFlowBrickConfig } from '../types';
import { FlowBrick } from './FlowBrick';
import { FlowModel } from './FlowModel';
export interface IFlowSchedulerOptions<V, DS, DP, CG, ST> {
    brickConfig: IFlowBrickConfig<V, DS, DP, CG, ST>;
    model: FlowModel;
}
export interface IFlowWatcher {
    watchers: string[];
    func: FunctionAny;
    immediate?: boolean;
    lazy?: boolean;
}
export declare class FlowScheduler<V, DS, DP, CG, ST> implements Scheduler<V, DS, DP, CG, ST> {
    private watcherId;
    private readonly brickConfig;
    private readonly model;
    private events;
    private hooks;
    private validator;
    private pending;
    private loader?;
    private readonly queue;
    constructor(options: IFlowSchedulerOptions<V, DS, DP, CG, ST>);
    initBrickData(brick: BaseBrick<V, DS, DP, CG, ST>, data: IBrickData<V, DS, DP, CG, ST>): IBrickInfo;
    getBrickData(): Omit<IBrickData<V, DS, DP, CG, ST>, 'parts'>;
    getPartList(): IBrickPartConfig[];
    isPartDynamic(): boolean;
    setState(state: Partial<ST>): void;
    setValue(value: V, manual?: boolean, isSilent?: boolean): void;
    getDatasource(data: unknown): void;
    dispatchEvent(name: string | Event, param?: unknown): void;
    getHook(name: string): FunctionAny | null;
    dispose(): void;
    initStaticBrickData(): void;
    init(): void;
    updateBrickData(data: IBrickData<V, DS, DP, CG, ST>): void;
    setBrickLayout(layout: ILayoutConfig): void;
    getByExpression(...expression: Array<string | number>): any;
    private executeHook;
    private extractBrickData;
    private initConfig;
    private loadBrickScheduler;
    private initPriorityQueue;
    private getDatasourceTask;
}
export interface FlowScheduler<V, DS, DP, CG, ST> {
    readonly brick: FlowBrick<V, DS, DP, CG, ST>;
    data: IBrickData<V, DS, DP, CG, ST>;
}
export declare function getDefaultValidateInfo(): IValidateInfo;
