/** @packageDocumentation
 * @module InstancesFilter
 */
import { PropertyDescription } from "@itwin/appui-abstract";
import { PropertyFilterBuilderRuleValueRendererProps } from "@itwin/components-react";
import { IModelConnection } from "@itwin/core-frontend";
import { ClassId, ClassInfo, Descriptor, InstanceFilterDefinition, Keys, PropertiesField } from "@itwin/presentation-common";
import { WithConstraints } from "../common/ContentBuilder.js";
import { PresentationInstanceFilter, PresentationInstanceFilterConditionGroup } from "./PresentationInstanceFilter.js";
/**
 * Function that checks if supplied [[PresentationInstanceFilter]] is [[PresentationInstanceFilterConditionGroup]].
 * @beta
 * @deprecated in 5.0. Use `PresentationInstanceFilter.isConditionGroup` instead.
 */
export declare function isPresentationInstanceFilterConditionGroup(filter: PresentationInstanceFilter): filter is PresentationInstanceFilterConditionGroup;
/**
 * Converts [[PresentationInstanceFilter]] into [InstanceFilterDefinition]($presentation-common) that can be passed
 * to [PresentationManager]($presentation-frontend) through request options in order to filter results.
 * @beta
 * @deprecated in 5.0. Use `createInstanceFilterDefinition` instead.
 */
export declare function convertToInstanceFilterDefinition(filter: PresentationInstanceFilter, imodel: IModelConnection): Promise<InstanceFilterDefinition>;
/**
 * Data structure that stores information about filter built by [[PresentationInstanceFilterDialog]].
 * @public
 */
export interface PresentationInstanceFilterInfo {
    /** Instance filter. */
    filter: PresentationInstanceFilter | undefined;
    /** Classes of the properties used in filter. */
    usedClasses: ClassInfo[];
}
/**
 * Data structure that contains information about property used for building filter.
 * @public
 */
export interface PresentationInstanceFilterPropertyInfo {
    /** Content descriptor field that represents this property. */
    field: PropertiesField;
    /** Property description  */
    propertyDescription: WithConstraints<PropertyDescription>;
    /** Ids of the classes where this property is defined. */
    sourceClassIds: ClassId[];
    /**
     * Id of the class where this property is defined.
     * @deprecated in 5.8. Use [[sourceClassIds]] instead.
     */
    sourceClassId: ClassId;
    /** Name of the class that was used to access this property. */
    className: string;
    /** Label of related property category. */
    categoryLabel?: string;
}
/**
 * Props for [[useInstanceFilterPropertyInfos]] hook.
 * @public
 */
export interface UseInstanceFilterPropertyInfosProps {
    /** Descriptor to pull properties from. */
    descriptor: Descriptor;
}
/**
 * Custom hook that collects properties from descriptor for filter building.
 * @public
 */
export declare function useInstanceFilterPropertyInfos({ descriptor }: UseInstanceFilterPropertyInfosProps): {
    propertyInfos: PresentationInstanceFilterPropertyInfo[];
    propertyRenderer: (name: string) => import("react/jsx-runtime").JSX.Element;
};
/**
 * Props for [[PresentationFilterBuilderValueRenderer]].
 * @public
 */
export interface PresentationFilterBuilderValueRendererProps extends PropertyFilterBuilderRuleValueRendererProps {
    /** iModel used to pull data from. */
    imodel: IModelConnection;
    /** Descriptor used to get properties for filter builder. */
    descriptor: Descriptor;
    /** Keys used to create the descriptor. */
    descriptorInputKeys?: Keys;
    /** Currently Selected classes. Improves filter property value list relevence. If not provided, the filter may include broader, less relevant options.*/
    selectedClasses?: ClassInfo[];
}
/**
 * Custom renderer of the filter rule value input. It extends default value input functionality:
 * - For `IsEqual` and `IsNotEqual` operators it renders a selector with unique property values. Unique values are collected from
 * the instances described by the descriptor ([[PresentationFilterBuilderValueRendererProps.descriptor]] and [[PresentationFilterBuilderValueRendererProps.descriptorInputKeys]]).
 * - For kind of quantity properties it renders input with units support.
 *
 * @public
 */
export declare function PresentationFilterBuilderValueRenderer({ imodel, descriptor, descriptorInputKeys, selectedClasses, ...props }: PresentationFilterBuilderValueRendererProps): import("react/jsx-runtime").JSX.Element;
/**
 * Props for [[PresentationInstanceFilterBuilder]] component.
 * @public
 */
export interface PresentationInstanceFilterBuilderProps {
    /** iModel connection to pull data from. */
    imodel: IModelConnection;
    /** Descriptor containing properties and classes that should be available for building filter. */
    descriptor: Descriptor;
    /** Callback that is invoked when filter changes. */
    onInstanceFilterChanged: (filter?: PresentationInstanceFilterInfo) => void;
    /**
     * Specifies how deep rule groups can be nested.
     * @deprecated in 5.0. The component doesn't support multi-level nesting anymore.
     */
    ruleGroupDepthLimit?: number;
    /** Initial filter that will be show when component is mounted. */
    initialFilter?: PresentationInstanceFilterInfo;
}
/**
 * Component for building complex instance filters for filtering content and nodes produced
 * by [PresentationManager]($presentation-frontend).
 *
 * @public
 */
export declare function PresentationInstanceFilterBuilder(props: PresentationInstanceFilterBuilderProps): import("react/jsx-runtime").JSX.Element;
/**
 * Creates [InstanceFilterDefinition]($presentation-common) from [[PresentationInstanceFilterInfo]]. Created definition
 * can be passed to [PresentationManager]($presentation-frontend) through request options in order to filter results.
 * @public
 */
export declare function createInstanceFilterDefinition(info: PresentationInstanceFilterInfo, imodel: IModelConnection): Promise<InstanceFilterDefinition>;
//# sourceMappingURL=PresentationFilterBuilder.d.ts.map