import { Bounds, IGXM, WorldCoordinates, IGXD, IGXC, ComponentId, vec3 } from "@intelligentgraphics/ig.gfx.core";
import { IMultiArticleAction } from "./MultiArticle";
export interface RuleParameters {
    BBOX: {
        local: Bounds;
        global: Bounds;
        world: Bounds;
    };
    neighbor: {
        left: boolean;
        right: boolean;
        top: boolean;
        bottom: boolean;
    };
    snapPosition: vec3;
}
export declare type EvalConfiguration = Record<string, any>;
export interface CreateAdditionalRuleParameterParams {
    context: ComponentId;
    hasLeftNeighbor: boolean;
    hasRightNeighbor: boolean;
    hasTopNeighbor: boolean;
    hasBottomNeighbor: boolean;
    relativeSnapPosition: WorldCoordinates;
}
/** Evaluation of rules. */
export declare class Rule {
    private static defaultRuleParameters;
    static Debug: boolean;
    /** Evaluate a parametric attachment point against a configuration state.
     * @param point Parametric attachment point.
     * @param configuration A configuration state.
     * @returns Real attachment point, or null.
     */
    static evalAttachPoint(point: IGXD.AttachPoint, configuration: EvalConfiguration): IGXC.AttachPoint | null;
    static evalBooleanRule(rule: string | boolean, properties: EvalConfiguration): boolean | undefined;
    static evalNumberRule(rule: string | number, properties: EvalConfiguration): number | undefined;
    static evalStringRule(rule: string, properties: EvalConfiguration): string | undefined;
    private static _evalRule;
    static evalActionRule(rule: IGXM.IActionRule, properties: EvalConfiguration): IMultiArticleAction;
    static createBoundingBoxForRule(context: ComponentId): any;
    static additionalRuleParameters(context: ComponentId, hasLeftNeighbor: boolean, hasRightNeighbor: boolean, relativeSnapPosition: WorldCoordinates): RuleParameters;
    static createAdditionalRuleParameters({ context, hasBottomNeighbor, hasLeftNeighbor, hasRightNeighbor, hasTopNeighbor, relativeSnapPosition, }: CreateAdditionalRuleParameterParams): RuleParameters;
    static executeAction: (action: IGXM.IActionRule, componentId: string, context: string) => Promise<boolean | void>;
    static executeActions: (actions: Array<IGXM.IActionRule>, componentId: string, context: string) => Promise<boolean | void>;
}
