/** @packageDocumentation
 * @module InstancesFilter
 */
import { PrimitiveValue } from "@itwin/appui-abstract";
import { PropertyFilter, PropertyFilterRuleGroupOperator, PropertyFilterRuleOperator } from "@itwin/components-react";
import { GenericInstanceFilter } from "@itwin/core-common";
import { ClassInfo, Descriptor, PropertiesField } from "@itwin/presentation-common";
/**
 * Type that describes instance filter based on [Descriptor]($presentation-common) fields. It can be
 * one filter condition or group of filter conditions joined by logical operator.
 * @public
 */
export type PresentationInstanceFilter = PresentationInstanceFilterConditionGroup | PresentationInstanceFilterCondition;
/**
 * Data structure that describes group of filter condition joined by logical operator.
 * @public
 */
export interface PresentationInstanceFilterConditionGroup {
    /** Operator that should be used to join conditions. */
    operator: `${PropertyFilterRuleGroupOperator}`;
    /** Conditions in this group. */
    conditions: PresentationInstanceFilter[];
}
/**
 * Data structure that describes single filter condition.
 * @public
 */
export interface PresentationInstanceFilterCondition {
    /** [PropertiesField]($presentation-common) that contains property used in this condition. */
    field: PropertiesField;
    /** Operator that should be used to compare property value. */
    operator: `${PropertyFilterRuleOperator}`;
    /** Value that property should be compared to. */
    value?: PrimitiveValue;
}
/** @public */
export declare namespace PresentationInstanceFilter {
    /**
     * Converts filter built by [usePropertyFilterBuilder]($components-react) into presentation specific format.
     * @throws if presentation data cannot be found for properties used in `filter`.
     */
    function fromComponentsPropertyFilter(descriptor: Descriptor, filter: PropertyFilter): PresentationInstanceFilter;
    /**
     * Converts [[PresentationInstanceFilter]] into format used by [usePropertyFilterBuilder]($components-react).
     * @throws if fields used in filter cannot be found in `descriptor`.
     */
    function toComponentsPropertyFilter(descriptor: Descriptor, filter: PresentationInstanceFilter): PropertyFilter;
    /**
     * Extracts information from [[PresentationInstanceFilter]] and creates a [GenericInstanceFilter]($common) for building queries.
     */
    function toGenericInstanceFilter(filter: PresentationInstanceFilter, filteredClasses?: ClassInfo[]): GenericInstanceFilter;
    /**
     * Creates [[PresentationInstanceFilter]] from given [GenericInstanceFilter]($common).
     * @throws if fields used in `filter` cannot be found in `descriptor`.
     */
    function fromGenericInstanceFilter(descriptor: Descriptor, filter: GenericInstanceFilter): PresentationInstanceFilter;
    /**
     * Function that checks if supplied [[PresentationInstanceFilter]] is [[PresentationInstanceFilterConditionGroup]].
     */
    function isConditionGroup(filter: PresentationInstanceFilter): filter is PresentationInstanceFilterConditionGroup;
    /**
     * Function that creates equality condition based on supplied [[PropertiesField]] and [[PrimitiveValue]] that is compatible
     * with `UniquePropertyValuesSelector`.
     * If [[PrimitiveValue.value]] is `undefined` created condition uses `is-null` or `is-not-null` operator.
     */
    function createPrimitiveValueEqualityCondition(field: PropertiesField, operator: "is-equal" | "is-not-equal", value: PrimitiveValue): PresentationInstanceFilterCondition;
}
//# sourceMappingURL=PresentationInstanceFilter.d.ts.map