import type Graphic from "@arcgis/core/Graphic";
import type Geometry from "@arcgis/core/geometry/Geometry";
import type Query from "@arcgis/core/rest/support/Query";
import type { Feature } from "../../data/Feature.js";
import type { BuildingComponentSublayerExtension } from "../../mapping/BuildingComponentSublayerExtension.js";
import type { CSVLayerExtension } from "../../mapping/CSVLayerExtension.js";
import type { FeatureCollectionLayerExtension } from "../../mapping/FeatureCollectionLayerExtension.js";
import type { FeatureLayerExtension } from "../../mapping/FeatureLayerExtension.js";
import type { GeoJSONLayerExtension } from "../../mapping/GeoJSONLayerExtension.js";
import type { SceneLayerExtension } from "../../mapping/SceneLayerExtension.js";
import type { StreamLayerExtension } from "../../mapping/StreamLayerExtension.js";
import type { SubtypeGroupLayerExtension } from "../../mapping/SubtypeGroupLayerExtension.js";
import type { SubtypeSublayerExtension } from "../../mapping/SubtypeSublayerExtension.js";
import type { CountResult } from "../CountResult.js";
import type { ClientSideQueryableSublayerExtension } from "../query/ClientSideQueryProvider.js";
import type { IdentifyOptions } from "./IdentifyOptions.js";
import { IdentifyProviderBase } from "./IdentifyProviderBase.js";
/**
 * LayerExtensions that support client-side identify.
 */
export type ClientSideIdentifiableLayerExtension = CSVLayerExtension | FeatureLayerExtension | FeatureCollectionLayerExtension | GeoJSONLayerExtension | SceneLayerExtension | StreamLayerExtension | SubtypeGroupLayerExtension;
/**
 * SublayerExtensions that support client-side identify.
 */
export type ClientSideIdentifiableSublayerExtension = BuildingComponentSublayerExtension | SubtypeSublayerExtension;
/**
 * An identify provider that works with graphics rendered on the map.
 */
export declare abstract class ClientSideIdentifyProvider extends IdentifyProviderBase {
    /**
     * @inheritDoc
     */
    protected _identify(source: ClientSideIdentifiableLayerExtension | ClientSideQueryableSublayerExtension, geometry: Geometry, options: IdentifyOptions, geometryType?: string): AsyncIterable<Feature>;
    /**
     * @inheritDoc
     */
    protected _count(source: ClientSideIdentifiableLayerExtension | ClientSideQueryableSublayerExtension, geometry: Geometry, options: IdentifyOptions, geometryType?: string): Promise<CountResult>;
    /**
     * Creates a query object that gets passed into the
     * LayerView.queryFeatures() function.
     *
     * @param source The source to query.
     * @param geometry The geometry to query with.
     * @param options Options for the query.
     * @param aggregateIds The ObjectIds of cluster features to query with.
     */
    protected _createQuery(source: ClientSideIdentifiableLayerExtension | ClientSideQueryableSublayerExtension, geometry: Geometry | undefined, options: IdentifyOptions, aggregateIds?: (string | number | undefined)[]): Query;
    protected _getClientSideLayerGraphics(source: ClientSideIdentifiableLayerExtension | ClientSideQueryableSublayerExtension, geometry: Geometry, options: IdentifyOptions, geometryType?: string): Promise<Graphic[] | undefined>;
}
