/**
 * @param {any} domain
 * @returns {domain is SelectionDomainRef}
 */
export function isSelectionDomainRef(domain: any): domain is SelectionDomainRef;
/**
 * @typedef {import("../utils/domainArray.js").DomainArray} DomainArray
 * @typedef {import("../spec/scale.js").ComplexDomain} ComplexDomain
 * @typedef {import("../spec/scale.js").ScalarDomain} ScalarDomain
 * @typedef {import("../spec/scale.js").SelectionDomainRef} SelectionDomainRef
 * @typedef {import("../spec/parameter.js").ExprRef} ExprRef
 * @typedef {import("./scaleResolution.js").ScaleResolutionMember} ScaleResolutionMember
 * @typedef {{ view: import("../view/view.js").default, channel: import("../spec/channel.js").ChannelWithScale, type: import("../spec/channel.js").Type, domain: import("../spec/scale.js").Scale["domain"] }} ConfiguredDomainSource
 * @typedef {() => Set<ScaleResolutionMember>} ScaleMembersGetter
 * @typedef {() => ConfiguredDomainSource | undefined} ViewLevelConfiguredDomainGetter
 * @typedef {(interval: ScalarDomain | ComplexDomain) => number[]} FromComplexInterval
 * @typedef {(assembly: import("../spec/scale.js").Scale["assembly"] | undefined) => number[]} GetLocusExtent
 * @typedef {{
 *   domains: DomainArray[],
 *   selectionRef: SelectionDomainLinkInfo | undefined,
 *   selectionRuntime: any,
 *   selectionDescription: string | undefined,
 *   hasLiteralDomain: boolean,
 * }} ConfiguredDomainResolutionState
 * @typedef {{
 *   kind: "literal",
 *   domain: DomainArray,
 * } | {
 *   kind: "selection",
 *   domain: DomainArray | undefined,
 *   description: string,
 *   param: string,
 *   encoding: "x" | "y",
 *   hasInitial: boolean,
 *   runtime: any,
 * }} ConfiguredDomainMemberResolution
 * @typedef {{
 *   param: string,
 *   encoding: "x" | "y",
 *   hasInitial: boolean,
 *   runtime: any,
 * }} SelectionDomainLinkInfo
 */
export default class DomainPlanner {
    /**
     * @param {object} options
     * @param {ScaleMembersGetter} options.getActiveMembers Active shared-scale members used for configured domain planning.
     * @param {ScaleMembersGetter} [options.getAllMembers] All members, including inactive ones, used for conflict validation.
     * @param {ScaleMembersGetter} [options.getDataMembers] Members used for data-domain extraction; defaults to `getActiveMembers`.
     * @param {ViewLevelConfiguredDomainGetter} [options.getViewLevelConfiguredDomain] View-level configured domain source.
     * @param {() => import("../spec/channel.js").Type} options.getType
     * @param {GetLocusExtent} options.getLocusExtent
     * @param {FromComplexInterval} options.fromComplexInterval
     */
    constructor({ getActiveMembers, getAllMembers, getDataMembers, getViewLevelConfiguredDomain, getType, getLocusExtent, fromComplexInterval, }: {
        getActiveMembers: ScaleMembersGetter;
        getAllMembers?: ScaleMembersGetter;
        getDataMembers?: ScaleMembersGetter;
        getViewLevelConfiguredDomain?: ViewLevelConfiguredDomainGetter;
        getType: () => import("../spec/channel.js").Type;
        getLocusExtent: GetLocusExtent;
        fromComplexInterval: FromComplexInterval;
    });
    /**
     * @returns {any[]}
     */
    get initialDomainSnapshot(): any[];
    /**
     * @param {{ includeSelectionInitial?: boolean }} [options]
     */
    hasConfiguredDomain(options?: {
        includeSelectionInitial?: boolean;
    }): boolean;
    hasSelectionConfiguredDomain(): boolean;
    /**
     * @returns {SelectionDomainLinkInfo | undefined}
     */
    getSelectionConfiguredDomainBindingInfo(): SelectionDomainLinkInfo | undefined;
    getSelectionConfiguredDomainInfo(): {
        param: string;
        encoding: "x" | "y";
    };
    invalidateConfiguredDomain(): void;
    /**
     * Returns the default domain without considering configured domains.
     *
     * @param {boolean} [extractDataDomain]
     * @param {import("../spec/scale.js").Scale["assembly"]} [locusAssembly]
     * @returns {any[]}
     */
    getDefaultDomain(extractDataDomain?: boolean, locusAssembly?: import("../spec/scale.js").Scale["assembly"]): any[];
    /**
     * Returns the configured domain or a data-derived/default domain.
     *
     * @param {boolean} [extractDataDomain]
     * @param {import("../spec/scale.js").Scale["assembly"]} [locusAssembly]
     * @param {{ includeSelectionInitial?: boolean }} [options]
     * @returns {any[]}
     */
    getConfiguredOrDefaultDomain(extractDataDomain?: boolean, locusAssembly?: import("../spec/scale.js").Scale["assembly"], options?: {
        includeSelectionInitial?: boolean;
    }): any[];
    /**
     * Unions the configured domains of all participating views.
     *
     * @param {{ includeSelectionInitial?: boolean }} [options]
     * @return {DomainArray}
     */
    getConfiguredDomain(options?: {
        includeSelectionInitial?: boolean;
    }): DomainArray;
    /**
     * Extracts and unions the data domains of all participating views.
     *
     * @return {DomainArray | undefined}
     */
    getDataDomain(): DomainArray | undefined;
    /**
     * @param {import("../types/encoder.js").VegaScale} scale
     * @param {boolean} domainWasInitialized
     * @param {any[]} [snapshotDomain]
     * @returns {boolean} true if listeners should be notified immediately
     */
    captureInitialDomain(scale: import("../types/encoder.js").VegaScale, domainWasInitialized: boolean, snapshotDomain?: any[]): boolean;
    #private;
}
export type DomainArray = import("../utils/domainArray.js").DomainArray;
export type ComplexDomain = import("../spec/scale.js").ComplexDomain;
export type ScalarDomain = import("../spec/scale.js").ScalarDomain;
export type SelectionDomainRef = import("../spec/scale.js").SelectionDomainRef;
export type ExprRef = import("../spec/parameter.js").ExprRef;
export type ScaleResolutionMember = import("./scaleResolution.js").ScaleResolutionMember;
export type ConfiguredDomainSource = {
    view: import("../view/view.js").default;
    channel: import("../spec/channel.js").ChannelWithScale;
    type: import("../spec/channel.js").Type;
    domain: import("../spec/scale.js").Scale["domain"];
};
export type ScaleMembersGetter = () => Set<ScaleResolutionMember>;
export type ViewLevelConfiguredDomainGetter = () => ConfiguredDomainSource | undefined;
export type FromComplexInterval = (interval: ScalarDomain | ComplexDomain) => number[];
export type GetLocusExtent = (assembly: import("../spec/scale.js").Scale["assembly"] | undefined) => number[];
export type ConfiguredDomainResolutionState = {
    domains: DomainArray[];
    selectionRef: SelectionDomainLinkInfo | undefined;
    selectionRuntime: any;
    selectionDescription: string | undefined;
    hasLiteralDomain: boolean;
};
export type ConfiguredDomainMemberResolution = {
    kind: "literal";
    domain: DomainArray;
} | {
    kind: "selection";
    domain: DomainArray | undefined;
    description: string;
    param: string;
    encoding: "x" | "y";
    hasInitial: boolean;
    runtime: any;
};
export type SelectionDomainLinkInfo = {
    param: string;
    encoding: "x" | "y";
    hasInitial: boolean;
    runtime: any;
};
//# sourceMappingURL=domainPlanner.d.ts.map