import { BaseParamType } from '../_Base';
import { ExpressionManager } from '../../expressions/ExpressionManager';
import { CorePoint } from '../../../core/geometry/Point';
import { CoreEntity } from '../../../core/geometry/Entity';
import { ParamType } from '../../poly/ParamType';
import { ParamValuesTypeMap } from '../types/ParamValuesTypeMap';
import { CoreObject } from '../../../core/geometry/Object';
import { MethodDependency } from '../../expressions/MethodDependency';
import { CoreGraphNodeId } from '../../../core/graph/CoreGraph';
declare type EntityCallback<T extends ParamType> = (entity: CoreEntity, value: ParamValuesTypeMap[T] | any) => void;
declare type PointEntityCallback<T extends ParamType> = (entity: CorePoint, value: ParamValuesTypeMap[T] | any) => void;
declare type ObjectEntityCallback<T extends ParamType> = (entity: CoreObject, value: ParamValuesTypeMap[T] | any) => void;
export declare class ExpressionController<T extends ParamType> {
    protected param: BaseParamType;
    protected _expression: string | undefined;
    protected _entities: CoreEntity[] | undefined;
    protected _entity_callback: EntityCallback<T> | undefined;
    protected _manager: ExpressionManager | undefined;
    protected _method_dependencies_by_graph_node_id: Map<CoreGraphNodeId, MethodDependency> | undefined;
    constructor(param: BaseParamType);
    dispose(): void;
    private _resetMethodDependencies;
    registerMethodDependency(method_dependency: MethodDependency): void;
    active(): boolean;
    expression(): string | undefined;
    is_errored(): boolean;
    error_message(): string | null | undefined;
    requires_entities(): boolean;
    set_expression(expression: string | undefined, set_dirty?: boolean): void;
    update_from_method_dependency_name_change(): void;
    compute_expression(): Promise<any>;
    compute_expression_for_entities(entities: CoreEntity[], callback: EntityCallback<T>): Promise<void>;
    compute_expression_for_points(entities: CorePoint[], callback: PointEntityCallback<T>): Promise<void>;
    compute_expression_for_objects(entities: CoreObject[], callback: ObjectEntityCallback<T>): Promise<void>;
    entities(): CoreEntity[] | undefined;
    entity_callback(): EntityCallback<T> | undefined;
    set_entities(entities: CoreEntity[], callback: EntityCallback<T>): void;
    reset_entities(): void;
}
export {};
