/** @packageDocumentation
 * @module PropertyGrid
 */
import "../common/DisposePolyfill.js";
import { PropertyRecord } from "@itwin/appui-abstract";
import { IPropertyDataProvider, PropertyData, PropertyDataChangeEvent } from "@itwin/components-react";
import { IModelConnection } from "@itwin/core-frontend";
import { CategoryDescription, DescriptorOverrides, Field, InstanceKey, Ruleset } from "@itwin/presentation-common";
import { CacheInvalidationProps, ContentDataProvider, IContentDataProvider } from "../common/ContentDataProvider.js";
import { DiagnosticsProps } from "../common/Diagnostics.js";
/**
 * Default presentation ruleset used by [[PresentationPropertyDataProvider]]. The ruleset just gets properties
 * of the selected elements.
 *
 * @public
 */
export declare const DEFAULT_PROPERTY_GRID_RULESET: Ruleset;
/**
 * Interface for presentation rules-driven property data provider.
 * @public
 */
export type IPresentationPropertyDataProvider = IPropertyDataProvider & IContentDataProvider;
/**
 * Properties for creating a [[PresentationPropertyDataProvider]] instance.
 * @public
 */
export interface PresentationPropertyDataProviderProps extends DiagnosticsProps {
    /** IModelConnection to use for requesting property data. */
    imodel: IModelConnection;
    /**
     * Id of the ruleset to use when requesting properties or a ruleset itself. If not
     * set, default presentation rules are used which return content for the selected elements.
     */
    ruleset?: string | Ruleset;
    /**
     * If true, additional 'favorites' category is not created.
     */
    disableFavoritesCategory?: boolean;
}
/**
 * Presentation Rules-driven property data provider implementation.
 * @public
 */
export declare class PresentationPropertyDataProvider extends ContentDataProvider implements IPresentationPropertyDataProvider {
    onDataChanged: PropertyDataChangeEvent;
    private _includeFieldsWithNoValues;
    private _includeFieldsWithCompositeValues;
    private _isNestedPropertyCategoryGroupingEnabled;
    private _onFavoritesChangedRemoveListener?;
    private _shouldCreateFavoritesCategory;
    /**
     * Constructor
     */
    constructor(props: PresentationPropertyDataProviderProps);
    /**
     * Dispose the presentation property data provider.
     */
    [Symbol.dispose](): void;
    /** @deprecated in 5.7. Use `[Symbol.dispose]` instead. */
    dispose(): void;
    /**
     * Invalidates cached content and clears categorized data.
     */
    protected invalidateCache(props: CacheInvalidationProps): void;
    /**
     * Provides content configuration for the property grid
     */
    protected getDescriptorOverrides(): Promise<DescriptorOverrides>;
    /**
     * Hides the computed display label field from the list of properties
     */
    protected isFieldHidden(field: Field): boolean;
    /**
     * Should fields with no values be included in the property list. No value means:
     * - For *primitive* fields: `null`, `undefined`, `""` (empty string)
     * - For *array* fields: `[]` (empty array)
     * - For *struct* fields: `{}` (object with no members)
     *
     * @deprecated in 3.x. Use [FilteringPropertyDataProvider]($components-react) and [IPropertyDataFilterer]($components-react) APIs for filtering-out properties.
     */
    get includeFieldsWithNoValues(): boolean;
    set includeFieldsWithNoValues(value: boolean);
    /**
     * Should fields with composite values be included in the property list.
     * Fields with composite values:
     * - *array* fields.
     * - *struct* fields.
     *
     * @deprecated in 3.x. Use [FilteringPropertyDataProvider]($components-react) and [IPropertyDataFilterer]($components-react) APIs for filtering-out properties.
     */
    get includeFieldsWithCompositeValues(): boolean;
    set includeFieldsWithCompositeValues(value: boolean);
    /**
     * Is nested property categories enabled. Defaults to `true`.
     */
    get isNestedPropertyCategoryGroupingEnabled(): boolean;
    set isNestedPropertyCategoryGroupingEnabled(value: boolean);
    /**
     * Should the specified field be included in the favorites category.
     * @deprecated in 5.2. Use `isFieldFavoriteAsync` instead.
     */
    protected isFieldFavorite(field: Field): boolean;
    /** Should the specified field be included in the favorites category. */
    protected isFieldFavoriteAsync(field: Field): Promise<boolean>;
    /**
     * Sorts the specified list of categories by priority. May be overriden
     * to supply a different sorting algorithm.
     */
    protected sortCategories(categories: CategoryDescription[]): void;
    /**
     * Sorts the specified list of fields by priority. May be overriden to supply a different sorting algorithm.
     * @deprecated in 5.2. Use `sortFieldsAsync` instead.
     */
    protected sortFields(category: CategoryDescription, fields: Field[]): void;
    /**
     * Sorts the specified list of fields by priority. May be overriden to supply a different sorting algorithm.
     */
    protected sortFieldsAsync(category: CategoryDescription, fields: Field[]): Promise<void>;
    /**
     * Returns property data.
     */
    protected getMemoizedData: import("micro-memoize").Memoized<() => Promise<PropertyData>>;
    /**
     * Returns property data.
     */
    getData(): Promise<PropertyData>;
    /**
     * Get keys of instances which were used to create given [PropertyRecord]($appui-abstract).
     */
    getPropertyRecordInstanceKeys(record: PropertyRecord): Promise<InstanceKey[]>;
    private setupFavoritePropertiesListener;
}
//# sourceMappingURL=DataProvider.d.ts.map