import type { ObjectSet, ObjectTypeDefinition, PropertyKeys } from "@osdk/api";
import { type UsePropertyAggregationResult } from "./usePropertyAggregation.js";
export interface UseDualScopeAggregationOptions {
	limit?: number;
	sortBy?: "count" | "value";
	selectedValues?: string[];
}
/**
* Aggregates a property over `scopedObjectSet` (the narrowed scope) and pins
* any values that exist in `emptySourceObjectSet` (the unfiltered base) but
* are absent from the narrowed result to count=0, so facets can render
* "filtered-out" rows alongside live counts.
*
* When `emptySourceObjectSet` is `undefined`, this falls through to a single
* aggregation against `scopedObjectSet` — equivalent to `usePropertyAggregation`
* with `selectedValues` as the only pinned values.
*
* @param objectType - Object type for the aggregation
* @param propertyKey - Property to aggregate on
* @param scopedObjectSet - Set the live counts are computed against (post-narrowing)
* @param emptySourceObjectSet - Unfiltered base set whose values are pinned as
*   count=0 when absent from the scoped aggregation. Pass `undefined` to skip
*   the dual-scope behavior.
* @param options.selectedValues - Values to always include in the result, even
*   when their count is 0 (e.g. currently-selected filter values)
* @returns Aggregation against the scoped set, with isLoading reflecting both
*   queries when dual-scope is active.
*/
export declare function useDualScopeAggregation<
	Q extends ObjectTypeDefinition,
	K extends PropertyKeys<Q>
>(objectType: Q, propertyKey: K, scopedObjectSet: ObjectSet<Q> | undefined, emptySourceObjectSet: ObjectSet<Q> | undefined, options?: UseDualScopeAggregationOptions): UsePropertyAggregationResult;
