import { SelectionValue, GroupItem } from '../types';
export declare type OptionEffects = Record<string, {
    allowOnly?: Set<any>;
    requireOneOf?: {
        values: Set<any>;
        message?: string;
    };
}>;
export interface Cond {
    groupId: string;
    in?: any[];
    op?: 'in' | 'notIn' | 'eq' | 'neq' | 'contains' | 'range' | 'exists';
    value?: any;
    values?: any[];
    min?: number;
    max?: number;
}
export interface Expr {
    allOf?: Array<Cond | Expr>;
    anyOf?: Array<Cond | Expr>;
    noneOf?: Array<Cond | Expr>;
    and?: Array<Cond | Expr>;
    or?: Array<Cond | Expr>;
    not?: Array<Cond | Expr>;
}
export interface Action {
    type: 'show' | 'allowOnly' | 'requireOneOf';
    groupId: string;
    values?: any[];
    message?: string;
}
export interface Rule {
    type?: 'expr';
    when?: Expr;
    then?: Action[];
    elseThen?: Action[];
    priority?: number;
    stopAfterApply?: boolean;
}
export declare const normalizeRules: (linkageRules: any) => Rule[];
export declare const getSelectedSet: (val: SelectionValue) => Set<any>;
export declare const evaluateExpr: (expr: Expr | undefined, valuesMap: Record<string, SelectionValue>) => boolean;
export declare const computeAutoHiddenGroups: (rules: Rule[]) => Set<string>;
export declare const computeEffects: (dataSource?: GroupItem[], rawRules?: Rule[], valuesMap?: Record<string, SelectionValue>) => {
    visibleGroups: Record<string, boolean>;
    optionEffects: OptionEffects;
};
export declare const pruneValuesByAllowOnly: (valuesMap: Record<string, SelectionValue>, effects: OptionEffects) => Record<string, SelectionValue>;
export declare const generateSimpleUUID: () => string;
