import React from 'react';
export type IExpressionValue = string | number | boolean | Date;
export type IExpression = {
    [key: string]: IExpressionValue;
};
export type IExpressionNote = IExpression & {
    note?: string;
};
export declare function restoreHash<T extends IExpression>(selections?: Partial<{
    [k in StringKeyOf<T>]: Array<NonNullable<T[k]> | EditorSelectionRelation<T>> | NonNullable<T[k]>;
}>): [{
    expression: T;
}[], {
    expression: T;
}[], string];
export type StringKeyOf<T> = string & Exclude<Exclude<keyof T, symbol>, number>;
export type EditorSelectionRelation<T extends IExpressionNote> = {
    value: T[StringKeyOf<T>];
} & Partial<T>;
export declare function TestOracle<T extends IExpression, E extends IExpressionNote = T & {
    note?: string;
}, K extends StringKeyOf<E> = StringKeyOf<E>, S extends {
    [k in StringKeyOf<E>]: Array<NonNullable<E[k]> | EditorSelectionRelation<E>> | NonNullable<E[k]>;
} = {
    [k in StringKeyOf<E>]: Array<NonNullable<E[k]> | EditorSelectionRelation<E>> | NonNullable<E[k]>;
}>({ defaultCols, defaultRows, colSelections, execute, sort }: {
    defaultCols: Partial<E>[];
    defaultRows: Partial<E>[];
    colSelections: Partial<S>;
    execute: (options: Partial<T>) => Promise<React.ReactNode>;
    sort?: (options: Partial<E> | undefined) => Promise<void | ((row: {
        expression: Partial<E>;
    }) => number)>;
}): React.ReactElement<any, any>;
